103 |
108 |
104 bool fill_candidate_datatypes_c::add_2datatypes_to_candidate_list(symbol_c *symbol, symbol_c *datatype1, symbol_c *datatype2) { |
109 bool fill_candidate_datatypes_c::add_2datatypes_to_candidate_list(symbol_c *symbol, symbol_c *datatype1, symbol_c *datatype2) { |
105 add_datatype_to_candidate_list(symbol, datatype1); |
110 add_datatype_to_candidate_list(symbol, datatype1); |
106 add_datatype_to_candidate_list(symbol, datatype2); |
111 add_datatype_to_candidate_list(symbol, datatype2); |
107 return true; |
112 return true; |
|
113 } |
|
114 |
|
115 void fill_candidate_datatypes_c::remove_incompatible_datatypes(symbol_c *symbol) { |
|
116 /* Remove unsigned data types */ |
|
117 if (! IS_UNDEF( uint64, symbol)) { |
|
118 if (VALID_CVALUE( uint64, symbol)) { |
|
119 uint64_t value = GET_CVALUE(uint64, symbol); |
|
120 if (value > 1) { |
|
121 remove_from_candidate_datatype_list(&search_constant_type_c::bool_type_name, symbol->candidate_datatypes); |
|
122 remove_from_candidate_datatype_list(&search_constant_type_c::safebool_type_name, symbol->candidate_datatypes); |
|
123 } |
|
124 if (value > UINT8_MAX ) { |
|
125 remove_from_candidate_datatype_list(&search_constant_type_c::usint_type_name, symbol->candidate_datatypes); |
|
126 remove_from_candidate_datatype_list(&search_constant_type_c::safeusint_type_name, symbol->candidate_datatypes); |
|
127 remove_from_candidate_datatype_list(&search_constant_type_c::byte_type_name, symbol->candidate_datatypes); |
|
128 remove_from_candidate_datatype_list(&search_constant_type_c::safebyte_type_name, symbol->candidate_datatypes); |
|
129 } |
|
130 if (value > UINT16_MAX ) { |
|
131 remove_from_candidate_datatype_list(&search_constant_type_c::uint_type_name, symbol->candidate_datatypes); |
|
132 remove_from_candidate_datatype_list(&search_constant_type_c::safeuint_type_name, symbol->candidate_datatypes); |
|
133 remove_from_candidate_datatype_list(&search_constant_type_c::word_type_name, symbol->candidate_datatypes); |
|
134 remove_from_candidate_datatype_list(&search_constant_type_c::safeword_type_name, symbol->candidate_datatypes); |
|
135 } |
|
136 if (value > UINT32_MAX ) { |
|
137 remove_from_candidate_datatype_list(&search_constant_type_c::udint_type_name, symbol->candidate_datatypes); |
|
138 remove_from_candidate_datatype_list(&search_constant_type_c::safeudint_type_name, symbol->candidate_datatypes); |
|
139 remove_from_candidate_datatype_list(&search_constant_type_c::dword_type_name, symbol->candidate_datatypes); |
|
140 remove_from_candidate_datatype_list(&search_constant_type_c::safedword_type_name, symbol->candidate_datatypes); |
|
141 } |
|
142 } |
|
143 if (IS_OVERFLOW( uint64, symbol)) { |
|
144 remove_from_candidate_datatype_list(&search_constant_type_c::bool_type_name, symbol->candidate_datatypes); |
|
145 remove_from_candidate_datatype_list(&search_constant_type_c::safebool_type_name, symbol->candidate_datatypes); |
|
146 remove_from_candidate_datatype_list(&search_constant_type_c::usint_type_name, symbol->candidate_datatypes); |
|
147 remove_from_candidate_datatype_list(&search_constant_type_c::safeusint_type_name, symbol->candidate_datatypes); |
|
148 remove_from_candidate_datatype_list(&search_constant_type_c::byte_type_name, symbol->candidate_datatypes); |
|
149 remove_from_candidate_datatype_list(&search_constant_type_c::safebyte_type_name, symbol->candidate_datatypes); |
|
150 remove_from_candidate_datatype_list(&search_constant_type_c::uint_type_name, symbol->candidate_datatypes); |
|
151 remove_from_candidate_datatype_list(&search_constant_type_c::safeuint_type_name, symbol->candidate_datatypes); |
|
152 remove_from_candidate_datatype_list(&search_constant_type_c::word_type_name, symbol->candidate_datatypes); |
|
153 remove_from_candidate_datatype_list(&search_constant_type_c::safeword_type_name, symbol->candidate_datatypes); |
|
154 remove_from_candidate_datatype_list(&search_constant_type_c::udint_type_name, symbol->candidate_datatypes); |
|
155 remove_from_candidate_datatype_list(&search_constant_type_c::safeudint_type_name, symbol->candidate_datatypes); |
|
156 remove_from_candidate_datatype_list(&search_constant_type_c::dword_type_name, symbol->candidate_datatypes); |
|
157 remove_from_candidate_datatype_list(&search_constant_type_c::safedword_type_name, symbol->candidate_datatypes); |
|
158 remove_from_candidate_datatype_list(&search_constant_type_c::ulint_type_name, symbol->candidate_datatypes); |
|
159 remove_from_candidate_datatype_list(&search_constant_type_c::safeulint_type_name, symbol->candidate_datatypes); |
|
160 remove_from_candidate_datatype_list(&search_constant_type_c::lword_type_name, symbol->candidate_datatypes); |
|
161 remove_from_candidate_datatype_list(&search_constant_type_c::safelword_type_name, symbol->candidate_datatypes); |
|
162 } |
|
163 } |
|
164 /* Remove signed data types */ |
|
165 if (! IS_UNDEF( int64, symbol)) { |
|
166 if (VALID_CVALUE( int64, symbol)) { |
|
167 int64_t value = GET_CVALUE(int64, symbol); |
|
168 if (value < 0 || value > 1) { |
|
169 remove_from_candidate_datatype_list(&search_constant_type_c::bool_type_name, symbol->candidate_datatypes); |
|
170 remove_from_candidate_datatype_list(&search_constant_type_c::safebool_type_name, symbol->candidate_datatypes); |
|
171 } |
|
172 if ((value < INT8_MIN ) || (value > INT8_MAX )) { |
|
173 remove_from_candidate_datatype_list(&search_constant_type_c::sint_type_name, symbol->candidate_datatypes); |
|
174 remove_from_candidate_datatype_list(&search_constant_type_c::safesint_type_name, symbol->candidate_datatypes); |
|
175 remove_from_candidate_datatype_list(&search_constant_type_c::byte_type_name, symbol->candidate_datatypes); |
|
176 remove_from_candidate_datatype_list(&search_constant_type_c::safebyte_type_name, symbol->candidate_datatypes); |
|
177 } |
|
178 if ((value < INT16_MIN ) || (value > INT16_MAX)) { |
|
179 remove_from_candidate_datatype_list(&search_constant_type_c::int_type_name, symbol->candidate_datatypes); |
|
180 remove_from_candidate_datatype_list(&search_constant_type_c::safeint_type_name, symbol->candidate_datatypes); |
|
181 remove_from_candidate_datatype_list(&search_constant_type_c::word_type_name, symbol->candidate_datatypes); |
|
182 remove_from_candidate_datatype_list(&search_constant_type_c::safeword_type_name, symbol->candidate_datatypes); |
|
183 } |
|
184 if ((value < INT32_MIN ) || (value > INT32_MAX)) { |
|
185 remove_from_candidate_datatype_list(&search_constant_type_c::dint_type_name, symbol->candidate_datatypes); |
|
186 remove_from_candidate_datatype_list(&search_constant_type_c::safedint_type_name, symbol->candidate_datatypes); |
|
187 remove_from_candidate_datatype_list(&search_constant_type_c::dword_type_name, symbol->candidate_datatypes); |
|
188 remove_from_candidate_datatype_list(&search_constant_type_c::safedword_type_name, symbol->candidate_datatypes); |
|
189 } |
|
190 } |
|
191 if (IS_OVERFLOW( int64, symbol)) { |
|
192 /* Not exist a valid signed integer data types it can represent the current value */ |
|
193 remove_from_candidate_datatype_list(&search_constant_type_c::sint_type_name, symbol->candidate_datatypes); |
|
194 remove_from_candidate_datatype_list(&search_constant_type_c::safesint_type_name, symbol->candidate_datatypes); |
|
195 remove_from_candidate_datatype_list(&search_constant_type_c::int_type_name, symbol->candidate_datatypes); |
|
196 remove_from_candidate_datatype_list(&search_constant_type_c::safeint_type_name, symbol->candidate_datatypes); |
|
197 remove_from_candidate_datatype_list(&search_constant_type_c::dint_type_name, symbol->candidate_datatypes); |
|
198 remove_from_candidate_datatype_list(&search_constant_type_c::safedint_type_name, symbol->candidate_datatypes); |
|
199 remove_from_candidate_datatype_list(&search_constant_type_c::lint_type_name, symbol->candidate_datatypes); |
|
200 remove_from_candidate_datatype_list(&search_constant_type_c::safelint_type_name, symbol->candidate_datatypes); |
|
201 remove_from_candidate_datatype_list(&search_constant_type_c::byte_type_name, symbol->candidate_datatypes); |
|
202 remove_from_candidate_datatype_list(&search_constant_type_c::safebyte_type_name, symbol->candidate_datatypes); |
|
203 remove_from_candidate_datatype_list(&search_constant_type_c::word_type_name, symbol->candidate_datatypes); |
|
204 remove_from_candidate_datatype_list(&search_constant_type_c::safeword_type_name, symbol->candidate_datatypes); |
|
205 remove_from_candidate_datatype_list(&search_constant_type_c::dword_type_name, symbol->candidate_datatypes); |
|
206 remove_from_candidate_datatype_list(&search_constant_type_c::safedword_type_name, symbol->candidate_datatypes); |
|
207 remove_from_candidate_datatype_list(&search_constant_type_c::lword_type_name, symbol->candidate_datatypes); |
|
208 remove_from_candidate_datatype_list(&search_constant_type_c::safelword_type_name, symbol->candidate_datatypes); |
|
209 } |
|
210 } |
|
211 /* Remove floating point data types */ |
|
212 if (! IS_UNDEF( real64, symbol)) { |
|
213 if (VALID_CVALUE( real64, symbol)) { |
|
214 real64_t value = GET_CVALUE(real64, symbol); |
|
215 /* We need a way to understand when lost precision happen and overflow for single precision. |
|
216 * In this way we can remove REAL data type when a value has a mantissa or exponent too large. |
|
217 */ |
|
218 } |
|
219 if (IS_OVERFLOW( real64, symbol)) { |
|
220 /* Not exist a valid real data types that it can represent the current value */ |
|
221 remove_from_candidate_datatype_list(&search_constant_type_c::real_type_name, symbol->candidate_datatypes); |
|
222 remove_from_candidate_datatype_list(&search_constant_type_c::safereal_type_name, symbol->candidate_datatypes); |
|
223 remove_from_candidate_datatype_list(&search_constant_type_c::lreal_type_name, symbol->candidate_datatypes); |
|
224 remove_from_candidate_datatype_list(&search_constant_type_c::safelreal_type_name, symbol->candidate_datatypes); |
|
225 } |
|
226 } |
108 } |
227 } |
109 |
228 |
110 |
229 |
111 /* returns true if compatible function/FB invocation, otherwise returns false */ |
230 /* returns true if compatible function/FB invocation, otherwise returns false */ |
112 /* Assumes that the candidate_datatype lists of all the parameters being passed haved already been filled in */ |
231 /* Assumes that the candidate_datatype lists of all the parameters being passed haved already been filled in */ |
380 /* B 1.2.1 - Numeric Literals */ |
499 /* B 1.2.1 - Numeric Literals */ |
381 /******************************/ |
500 /******************************/ |
382 #define sizeoftype(symbol) get_sizeof_datatype_c::getsize(symbol) |
501 #define sizeoftype(symbol) get_sizeof_datatype_c::getsize(symbol) |
383 |
502 |
384 void *fill_candidate_datatypes_c::handle_any_integer(symbol_c *symbol) { |
503 void *fill_candidate_datatypes_c::handle_any_integer(symbol_c *symbol) { |
385 int calc_size = sizeoftype(symbol); |
504 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
386 |
505 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::byte_type_name, &search_constant_type_c::safebyte_type_name); |
387 if (calc_size <= sizeoftype(&search_constant_type_c::bool_type_name)) |
506 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::word_type_name, &search_constant_type_c::safeword_type_name); |
388 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
507 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dword_type_name, &search_constant_type_c::safedword_type_name); |
389 if (calc_size <= sizeoftype(&search_constant_type_c::byte_type_name)) |
508 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lword_type_name, &search_constant_type_c::safelword_type_name); |
390 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::byte_type_name, &search_constant_type_c::safebyte_type_name); |
509 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::sint_type_name, &search_constant_type_c::safesint_type_name); |
391 if (calc_size <= sizeoftype(&search_constant_type_c::word_type_name)) |
510 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::int_type_name, &search_constant_type_c::safeint_type_name); |
392 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::word_type_name, &search_constant_type_c::safeword_type_name); |
511 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dint_type_name, &search_constant_type_c::safedint_type_name); |
393 if (calc_size <= sizeoftype(&search_constant_type_c::dword_type_name)) |
512 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lint_type_name, &search_constant_type_c::safelint_type_name); |
394 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dword_type_name, &search_constant_type_c::safedword_type_name); |
513 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::usint_type_name, &search_constant_type_c::safeusint_type_name); |
395 if (calc_size <= sizeoftype(&search_constant_type_c::lword_type_name)) |
514 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::uint_type_name, &search_constant_type_c::safeuint_type_name); |
396 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lword_type_name, &search_constant_type_c::safelword_type_name); |
515 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::udint_type_name, &search_constant_type_c::safeudint_type_name); |
397 |
516 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name, &search_constant_type_c::safeulint_type_name); |
398 if (calc_size < sizeoftype(&search_constant_type_c::sint_type_name)) |
517 remove_incompatible_datatypes(symbol); |
399 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::sint_type_name, &search_constant_type_c::safesint_type_name); |
|
400 if (calc_size < sizeoftype(&search_constant_type_c::int_type_name)) |
|
401 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::int_type_name, &search_constant_type_c::safeint_type_name); |
|
402 if (calc_size < sizeoftype(&search_constant_type_c::dint_type_name)) |
|
403 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dint_type_name, &search_constant_type_c::safedint_type_name); |
|
404 if (calc_size < sizeoftype(&search_constant_type_c::lint_type_name)) |
|
405 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lint_type_name, &search_constant_type_c::safelint_type_name); |
|
406 if (calc_size <= sizeoftype(&search_constant_type_c::usint_type_name)) |
|
407 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::usint_type_name, &search_constant_type_c::safeusint_type_name); |
|
408 if (calc_size <= sizeoftype(&search_constant_type_c::uint_type_name)) |
|
409 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::uint_type_name, &search_constant_type_c::safeuint_type_name); |
|
410 if (calc_size <= sizeoftype(&search_constant_type_c::udint_type_name)) |
|
411 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::udint_type_name, &search_constant_type_c::safeudint_type_name); |
|
412 if (calc_size <= sizeoftype(&search_constant_type_c::ulint_type_name)) |
|
413 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name, &search_constant_type_c::safeulint_type_name); |
|
414 |
|
415 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
518 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
416 return NULL; |
519 return NULL; |
417 } |
520 } |
418 |
521 |
419 |
522 |
420 |
523 |
421 void *fill_candidate_datatypes_c::handle_any_real(symbol_c *symbol) { |
524 void *fill_candidate_datatypes_c::handle_any_real(symbol_c *symbol) { |
422 int calc_size = sizeoftype(symbol); |
525 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::real_type_name, &search_constant_type_c::safereal_type_name); |
423 |
526 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name, &search_constant_type_c::safelreal_type_name); |
424 if (calc_size <= sizeoftype(&search_constant_type_c::real_type_name)) |
527 remove_incompatible_datatypes(symbol); |
425 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::real_type_name, &search_constant_type_c::safereal_type_name); |
|
426 if (calc_size <= sizeoftype(&search_constant_type_c::lreal_type_name)) |
|
427 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name, &search_constant_type_c::safelreal_type_name); |
|
428 if (debug) std::cout << "ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
528 if (debug) std::cout << "ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
429 return NULL; |
529 return NULL; |
430 } |
530 } |
431 |
531 |
432 |
532 |
433 |
533 |
434 void *fill_candidate_datatypes_c::handle_any_literal(symbol_c *symbol, symbol_c *symbol_value, symbol_c *symbol_type) { |
534 void *fill_candidate_datatypes_c::handle_any_literal(symbol_c *symbol, symbol_c *symbol_value, symbol_c *symbol_type) { |
435 symbol_value->accept(*this); |
535 symbol_value->accept(*this); |
436 if (search_in_candidate_datatype_list(symbol_type, symbol_value->candidate_datatypes) >= 0) |
536 if (search_in_candidate_datatype_list(symbol_type, symbol_value->candidate_datatypes) >= 0) |
437 add_datatype_to_candidate_list(symbol, symbol_type); |
537 add_datatype_to_candidate_list(symbol, symbol_type); |
|
538 remove_incompatible_datatypes(symbol); |
438 if (debug) std::cout << "XXX_LITERAL [" << symbol->candidate_datatypes.size() << "]\n"; |
539 if (debug) std::cout << "XXX_LITERAL [" << symbol->candidate_datatypes.size() << "]\n"; |
439 return NULL; |
540 return NULL; |
440 } |
541 } |
441 |
542 |
442 |
543 |
491 } |
587 } |
492 |
588 |
493 |
589 |
494 void *fill_candidate_datatypes_c::visit(boolean_true_c *symbol) { |
590 void *fill_candidate_datatypes_c::visit(boolean_true_c *symbol) { |
495 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
591 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
|
592 remove_incompatible_datatypes(symbol); |
496 return NULL; |
593 return NULL; |
497 } |
594 } |
498 |
595 |
499 void *fill_candidate_datatypes_c::visit(boolean_false_c *symbol) { |
596 void *fill_candidate_datatypes_c::visit(boolean_false_c *symbol) { |
500 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
597 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
|
598 remove_incompatible_datatypes(symbol); |
501 return NULL; |
599 return NULL; |
502 } |
600 } |
503 |
601 |
504 /*******************************/ |
602 /*******************************/ |
505 /* B.1.2.2 Character Strings */ |
603 /* B.1.2.2 Character Strings */ |
506 /*******************************/ |
604 /*******************************/ |
507 void *fill_candidate_datatypes_c::visit(double_byte_character_string_c *symbol) { |
605 void *fill_candidate_datatypes_c::visit(double_byte_character_string_c *symbol) { |
508 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::wstring_type_name, &search_constant_type_c::safewstring_type_name); |
606 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::wstring_type_name, &search_constant_type_c::safewstring_type_name); |
|
607 remove_incompatible_datatypes(symbol); |
509 return NULL; |
608 return NULL; |
510 } |
609 } |
511 |
610 |
512 void *fill_candidate_datatypes_c::visit(single_byte_character_string_c *symbol) { |
611 void *fill_candidate_datatypes_c::visit(single_byte_character_string_c *symbol) { |
513 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::string_type_name, &search_constant_type_c::safestring_type_name); |
612 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::string_type_name, &search_constant_type_c::safestring_type_name); |
1322 * details (e.g. how to round and truncate numbers) as defined in IEC 61131-3, we will leave this to the future. |
1421 * details (e.g. how to round and truncate numbers) as defined in IEC 61131-3, we will leave this to the future. |
1323 * Also, the question will arise if we should also replace calls to standard |
1422 * Also, the question will arise if we should also replace calls to standard |
1324 * functions if the input parameters are all literals (e.g. ADD(42, 42)). This |
1423 * functions if the input parameters are all literals (e.g. ADD(42, 42)). This |
1325 * means this class will be more difficult than it appears at first. |
1424 * means this class will be more difficult than it appears at first. |
1326 */ |
1425 */ |
1327 void *fill_candidate_datatypes_c::visit( add_expression_c *symbol) {return handle_binary_expression(widen_ADD_table, symbol, symbol->l_exp, symbol->r_exp);} |
1426 void *fill_candidate_datatypes_c::visit( add_expression_c *symbol) { |
|
1427 void *ret = handle_binary_expression(widen_ADD_table, symbol, symbol->l_exp, symbol->r_exp); |
|
1428 remove_incompatible_datatypes(symbol); |
|
1429 return ret; |
|
1430 } |
1328 void *fill_candidate_datatypes_c::visit( sub_expression_c *symbol) {return handle_binary_expression(widen_SUB_table, symbol, symbol->l_exp, symbol->r_exp);} |
1431 void *fill_candidate_datatypes_c::visit( sub_expression_c *symbol) {return handle_binary_expression(widen_SUB_table, symbol, symbol->l_exp, symbol->r_exp);} |
1329 void *fill_candidate_datatypes_c::visit( mul_expression_c *symbol) {return handle_binary_expression(widen_MUL_table, symbol, symbol->l_exp, symbol->r_exp);} |
1432 void *fill_candidate_datatypes_c::visit( mul_expression_c *symbol) {return handle_binary_expression(widen_MUL_table, symbol, symbol->l_exp, symbol->r_exp);} |
1330 void *fill_candidate_datatypes_c::visit( div_expression_c *symbol) {return handle_binary_expression(widen_DIV_table, symbol, symbol->l_exp, symbol->r_exp);} |
1433 void *fill_candidate_datatypes_c::visit( div_expression_c *symbol) {return handle_binary_expression(widen_DIV_table, symbol, symbol->l_exp, symbol->r_exp);} |
1331 void *fill_candidate_datatypes_c::visit( mod_expression_c *symbol) {return handle_binary_expression(widen_MOD_table, symbol, symbol->l_exp, symbol->r_exp);} |
1434 void *fill_candidate_datatypes_c::visit( mod_expression_c *symbol) {return handle_binary_expression(widen_MOD_table, symbol, symbol->l_exp, symbol->r_exp);} |
1332 void *fill_candidate_datatypes_c::visit(power_expression_c *symbol) {return handle_binary_expression(widen_EXPT_table, symbol, symbol->l_exp, symbol->r_exp);} |
1435 void *fill_candidate_datatypes_c::visit(power_expression_c *symbol) {return handle_binary_expression(widen_EXPT_table, symbol, symbol->l_exp, symbol->r_exp);} |