136 if do_il: |
136 if do_il: |
137 res += """ |
137 res += """ |
138 {""" |
138 {""" |
139 if not do_type_search_only: |
139 if not do_type_search_only: |
140 res += """ |
140 res += """ |
141 identifier_c %(input_name)s_param_name("%(input_name)s"); |
141 symbol_c *%(input_name)s_param_name = (symbol_c *)(new identifier_c("%(input_name)s")); |
142 /* Get the value from a foo(<param_name> = <param_value>) style call */ |
142 /* Get the value from a foo(<param_name> = <param_value>) style call */ |
143 symbol_c *%(input_name)s_param_value = &this->default_variable_name; |
143 symbol_c *%(input_name)s_param_value = &this->default_variable_name; |
144 """%{"input_name":Paramname} |
144 """%{"input_name":Paramname} |
145 res += """ |
145 res += """ |
146 symbol_c *%(input_name)s_type_symbol = param_data_type; |
146 symbol_c *%(input_name)s_type_symbol = param_data_type; |
147 last_type_symbol = param_data_type; |
147 last_type_symbol = param_data_type; |
148 """%{"input_name":Paramname} |
148 """%{"input_name":Paramname} |
149 else: |
149 else: |
150 res += """ |
150 res += """ |
151 { |
151 { |
152 identifier_c %(input_name)s_param_name("%(input_name)s"); |
152 symbol_c *%(input_name)s_param_name = (symbol_c *)(new identifier_c("%(input_name)s")); |
153 /* Get the value from a foo(<param_name> = <param_value>) style call */ |
153 /* Get the value from a foo(<param_name> = <param_value>) style call */ |
154 symbol_c *%(input_name)s_param_value = function_call_param_iterator.search_f(&%(input_name)s_param_name); |
154 symbol_c *%(input_name)s_param_value = function_call_param_iterator.search_f(%(input_name)s_param_name); |
155 symbol_c *%(input_name)s_type_symbol = NULL; |
155 symbol_c *%(input_name)s_type_symbol = NULL; |
156 |
156 |
157 /* Get the value from a foo(<param_value>) style call */ |
157 /* Get the value from a foo(<param_value>) style call */ |
158 if (%(input_name)s_param_value == NULL) |
158 if (%(input_name)s_param_value == NULL) |
159 %(input_name)s_param_value = function_call_param_iterator.next_nf(); |
159 %(input_name)s_param_value = function_call_param_iterator.next_nf(); |
194 res += """ |
194 res += """ |
195 if (nb_param < %(min_nb_param)d) |
195 if (nb_param < %(min_nb_param)d) |
196 nb_param = %(min_nb_param)d; |
196 nb_param = %(min_nb_param)d; |
197 char* nb_param_str = new char[10]; |
197 char* nb_param_str = new char[10]; |
198 sprintf(nb_param_str, "%%d", nb_param); |
198 sprintf(nb_param_str, "%%d", nb_param); |
199 identifier_c nb_param_name("nb_param"); |
199 symbol_c * nb_param_name = (symbol_c *)(new identifier_c("nb_param")); |
200 ADD_PARAM_LIST(&nb_param_name, (symbol_c*)(new integer_c((const char *)nb_param_str)), (symbol_c*)(new int_type_name_c()), function_param_iterator_c::direction_in) |
200 ADD_PARAM_LIST(nb_param_name, (symbol_c*)(new integer_c((const char *)nb_param_str)), (symbol_c*)(new int_type_name_c()), function_param_iterator_c::direction_in) |
201 """%{"min_nb_param" : len(fdecl["inputs"])} |
201 """%{"min_nb_param" : len(fdecl["inputs"])} |
202 for paramname,paramtype,unused in fdecl["inputs"]: |
202 for paramname,paramtype,unused in fdecl["inputs"]: |
203 res += """ |
203 res += """ |
204 if (%(input_name)s_type_symbol == NULL) |
204 if (%(input_name)s_type_symbol == NULL) |
205 %(input_name)s_type_symbol = last_type_symbol; |
205 %(input_name)s_type_symbol = last_type_symbol; |
206 ADD_PARAM_LIST(&%(input_name)s_param_name, %(input_name)s_param_value, %(input_name)s_type_symbol, function_param_iterator_c::direction_in) |
206 ADD_PARAM_LIST(%(input_name)s_param_name, %(input_name)s_param_value, %(input_name)s_type_symbol, function_param_iterator_c::direction_in) |
207 """%{"input_name" : paramname} |
207 """%{"input_name" : paramname} |
208 if fdecl["extensible"]: |
208 if fdecl["extensible"]: |
209 res += """ |
209 res += """ |
210 int base_num = %d; |
210 int base_num = %d; |
211 symbol_c *param_value = NULL; |
211 symbol_c *param_value = NULL; |
|
212 symbol_c *param_name = NULL; |
212 do{ |
213 do{ |
213 char my_name[10]; |
214 char my_name[10]; |
214 sprintf(my_name, "IN%%d", base_num++); |
215 sprintf(my_name, "IN%%d", base_num++); |
215 identifier_c param_name(my_name); |
216 param_name = (symbol_c*)(new identifier_c(my_name)); |
216 |
217 |
217 /* Get the value from a foo(<param_name> = <param_value>) style call */ |
218 /* Get the value from a foo(<param_name> = <param_value>) style call */ |
218 param_value = function_call_param_iterator.search_f(¶m_name); |
219 param_value = function_call_param_iterator.search_f(param_name); |
219 |
220 |
220 /* Get the value from a foo(<param_value>) style call */ |
221 /* Get the value from a foo(<param_value>) style call */ |
221 if (param_value == NULL) |
222 if (param_value == NULL) |
222 param_value = function_call_param_iterator.next_nf(); |
223 param_value = function_call_param_iterator.next_nf(); |
223 if (param_value != NULL){ |
224 if (param_value != NULL){ |
224 symbol_c *current_type_symbol = search_expression_type->get_type(param_value); |
225 symbol_c *current_type_symbol = search_expression_type->get_type(param_value); |
225 last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ; |
226 last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ; |
226 |
227 |
227 /*Function specific CODE */ |
228 /*Function specific CODE */ |
228 ADD_PARAM_LIST(¶m_name, param_value, current_type_symbol, function_param_iterator_c::direction_in) |
229 ADD_PARAM_LIST(param_name, param_value, current_type_symbol, function_param_iterator_c::direction_in) |
229 } |
230 } |
230 |
231 |
231 }while(param_value != NULL); |
232 }while(param_value != NULL); |
232 """%(fdecl["baseinputnumber"] + 2) |
233 """%(fdecl["baseinputnumber"] + 2) |
233 |
234 |