stage3/narrow_candidate_datatypes.cc
changeset 441 e8de43eefcc5
parent 439 cf7d6862033d
child 443 ff4d26b7e51d
equal deleted inserted replaced
440:a745f7d38a5d 441:e8de43eefcc5
   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 }