380 /* | function_name [il_operand_list] */ |
380 /* | function_name [il_operand_list] */ |
381 /* NOTE: The parameters 'called_function_declaration' and 'extensible_param_count' are used to pass data between the stage 3 and stage 4. */ |
381 /* NOTE: The parameters 'called_function_declaration' and 'extensible_param_count' are used to pass data between the stage 3 and stage 4. */ |
382 // SYM_REF2(il_function_call_c, function_name, il_operand_list, symbol_c *called_function_declaration; int extensible_param_count;) |
382 // SYM_REF2(il_function_call_c, function_name, il_operand_list, symbol_c *called_function_declaration; int extensible_param_count;) |
383 void *narrow_candidate_datatypes_c::visit(il_function_call_c *symbol) { |
383 void *narrow_candidate_datatypes_c::visit(il_function_call_c *symbol) { |
384 generic_function_call_t fcall_param = { |
384 generic_function_call_t fcall_param = { |
385 /* fcall_param.function_name = */ symbol->function_name, |
385 /* fcall_param.function_name = */ symbol->function_name, |
386 /* fcall_param.nonformal_operand_list = */ symbol->il_operand_list, |
386 /* fcall_param.nonformal_operand_list = */ symbol->il_operand_list, |
387 /* fcall_param.formal_operand_list = */ NULL, |
387 /* fcall_param.formal_operand_list = */ NULL, |
388 /* fcall_param.candidate_functions = */ symbol->candidate_functions, |
388 /* enum {POU_FB, POU_function} POU_type = */ generic_function_call_t::POU_function, |
389 /* fcall_param.called_function_declaration = */ symbol->called_function_declaration, |
389 /* fcall_param.candidate_functions = */ symbol->candidate_functions, |
390 /* fcall_param.extensible_param_count = */ symbol->extensible_param_count |
390 /* fcall_param.called_function_declaration = */ symbol->called_function_declaration, |
|
391 /* fcall_param.extensible_param_count = */ symbol->extensible_param_count |
391 }; |
392 }; |
392 |
393 |
393 /* The first parameter of a non formal function call in IL will be the 'current value' (i.e. the prev_il_instruction) |
394 /* The first parameter of a non formal function call in IL will be the 'current value' (i.e. the prev_il_instruction) |
394 * In order to be able to handle this without coding special cases, we simply prepend that symbol |
395 * In order to be able to handle this without coding special cases, we simply prepend that symbol |
395 * to the il_operand_list (done in fill_candidate_datatypes_c), and remove it later (in the print_datatypes_error_c). |
396 * to the il_operand_list (done in fill_candidate_datatypes_c), and remove it later (in the print_datatypes_error_c). |
451 /* | function_name '(' eol_list [il_param_list] ')' */ |
452 /* | function_name '(' eol_list [il_param_list] ')' */ |
452 /* NOTE: The parameter 'called_function_declaration' is used to pass data between the stage 3 and stage 4. */ |
453 /* NOTE: The parameter 'called_function_declaration' is used to pass data between the stage 3 and stage 4. */ |
453 // SYM_REF2(il_formal_funct_call_c, function_name, il_param_list, symbol_c *called_function_declaration; int extensible_param_count;) |
454 // SYM_REF2(il_formal_funct_call_c, function_name, il_param_list, symbol_c *called_function_declaration; int extensible_param_count;) |
454 void *narrow_candidate_datatypes_c::visit(il_formal_funct_call_c *symbol) { |
455 void *narrow_candidate_datatypes_c::visit(il_formal_funct_call_c *symbol) { |
455 generic_function_call_t fcall_param = { |
456 generic_function_call_t fcall_param = { |
456 /* fcall_param.function_name = */ symbol->function_name, |
457 /* fcall_param.function_name = */ symbol->function_name, |
457 /* fcall_param.nonformal_operand_list = */ NULL, |
458 /* fcall_param.nonformal_operand_list = */ NULL, |
458 /* fcall_param.formal_operand_list = */ symbol->il_param_list, |
459 /* fcall_param.formal_operand_list = */ symbol->il_param_list, |
459 /* fcall_param.candidate_functions = */ symbol->candidate_functions, |
460 /* enum {POU_FB, POU_function} POU_type = */ generic_function_call_t::POU_function, |
460 /* fcall_param.called_function_declaration = */ symbol->called_function_declaration, |
461 /* fcall_param.candidate_functions = */ symbol->candidate_functions, |
461 /* fcall_param.extensible_param_count = */ symbol->extensible_param_count |
462 /* fcall_param.called_function_declaration = */ symbol->called_function_declaration, |
|
463 /* fcall_param.extensible_param_count = */ symbol->extensible_param_count |
462 }; |
464 }; |
463 |
465 |
464 narrow_function_invocation(symbol, fcall_param); |
466 narrow_function_invocation(symbol, fcall_param); |
465 return NULL; |
467 return NULL; |
466 } |
468 } |
1141 /* formal_param_list -> may be NULL ! */ |
1143 /* formal_param_list -> may be NULL ! */ |
1142 /* nonformal_param_list -> may be NULL ! */ |
1144 /* nonformal_param_list -> may be NULL ! */ |
1143 // SYM_REF3(function_invocation_c, function_name, formal_param_list, nonformal_param_list, symbol_c *called_function_declaration; int extensible_param_count; std::vector <symbol_c *> candidate_functions;) |
1145 // SYM_REF3(function_invocation_c, function_name, formal_param_list, nonformal_param_list, symbol_c *called_function_declaration; int extensible_param_count; std::vector <symbol_c *> candidate_functions;) |
1144 void *narrow_candidate_datatypes_c::visit(function_invocation_c *symbol) { |
1146 void *narrow_candidate_datatypes_c::visit(function_invocation_c *symbol) { |
1145 generic_function_call_t fcall_param = { |
1147 generic_function_call_t fcall_param = { |
1146 /* fcall_param.function_name = */ symbol->function_name, |
1148 /* fcall_param.function_name = */ symbol->function_name, |
1147 /* fcall_param.nonformal_operand_list = */ symbol->nonformal_param_list, |
1149 /* fcall_param.nonformal_operand_list = */ symbol->nonformal_param_list, |
1148 /* fcall_param.formal_operand_list = */ symbol->formal_param_list, |
1150 /* fcall_param.formal_operand_list = */ symbol->formal_param_list, |
1149 /* fcall_param.candidate_functions = */ symbol->candidate_functions, |
1151 /* enum {POU_FB, POU_function} POU_type = */ generic_function_call_t::POU_function, |
1150 /* fcall_param.called_function_declaration = */ symbol->called_function_declaration, |
1152 /* fcall_param.candidate_functions = */ symbol->candidate_functions, |
1151 /* fcall_param.extensible_param_count = */ symbol->extensible_param_count |
1153 /* fcall_param.called_function_declaration = */ symbol->called_function_declaration, |
|
1154 /* fcall_param.extensible_param_count = */ symbol->extensible_param_count |
1152 }; |
1155 }; |
1153 |
1156 |
1154 narrow_function_invocation(symbol, fcall_param); |
1157 narrow_function_invocation(symbol, fcall_param); |
1155 return NULL; |
1158 return NULL; |
1156 } |
1159 } |