MCPcopy Create free account
hub / github.com/boostorg/build / argument_compiler_add

Function argument_compiler_add

v2/engine/function.c:3175–3241  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3173}
3174
3175static void argument_compiler_add( struct argument_compiler * c, OBJECT * arg,
3176 OBJECT * file, int line )
3177{
3178 switch ( c->state )
3179 {
3180 case ARGUMENT_COMPILER_FOUND_OBJECT:
3181
3182 if ( object_equal( arg, constant_question_mark ) )
3183 {
3184 c->arg.flags = ARG_OPTIONAL;
3185 }
3186 else if ( object_equal( arg, constant_plus ) )
3187 {
3188 c->arg.flags = ARG_PLUS;
3189 }
3190 else if ( object_equal( arg, constant_star ) )
3191 {
3192 c->arg.flags = ARG_STAR;
3193 }
3194
3195 dynamic_array_push( c->args, c->arg );
3196 c->state = ARGUMENT_COMPILER_START;
3197
3198 if ( c->arg.flags != ARG_ONE )
3199 break;
3200 /* fall-through */
3201
3202 case ARGUMENT_COMPILER_START:
3203
3204 c->arg.type_name = 0;
3205 c->arg.index = -1;
3206 c->arg.flags = ARG_ONE;
3207
3208 if ( is_type_name( object_str( arg ) ) )
3209 {
3210 c->arg.type_name = object_copy( arg );
3211 c->state = ARGUMENT_COMPILER_FOUND_TYPE;
3212 break;
3213 }
3214 /* fall-through */
3215
3216 case ARGUMENT_COMPILER_FOUND_TYPE:
3217
3218 if ( is_type_name( object_str( arg ) ) )
3219 {
3220 printf( "%s:%d: missing argument name before type name: %s\n",
3221 object_str( file ), line, object_str( arg ) );
3222 exit( 1 );
3223 }
3224
3225 c->arg.arg_name = object_copy( arg );
3226 if ( object_equal( arg, constant_star ) )
3227 {
3228 c->arg.flags = ARG_VARIADIC;
3229 dynamic_array_push( c->args, c->arg );
3230 c->state = ARGUMENT_COMPILER_DONE;
3231 }
3232 else

Callers 3

arg_list_compile_builtinFunction · 0.85
arg_list_compile_pythonFunction · 0.85

Calls 4

object_equalFunction · 0.85
is_type_nameFunction · 0.85
object_strFunction · 0.85
object_copyFunction · 0.85

Tested by

no test coverage detected