equal
deleted
inserted
replaced
407 } |
407 } |
408 |
408 |
409 |
409 |
410 /* a helper function... */ |
410 /* a helper function... */ |
411 symbol_c *narrow_candidate_datatypes_c::base_type(symbol_c *symbol) { |
411 symbol_c *narrow_candidate_datatypes_c::base_type(symbol_c *symbol) { |
412 /* NOTE: symbol == NULL is valid. It will occur when, for e.g., an undefined/undeclared symbolic_variable is used |
412 /* NOTE: symbol == NULL is valid. It will occur when, for e.g., an undefined/undeclared symbolic_variable is used in the code. */ |
413 * in the code. |
|
414 */ |
|
415 if (symbol == NULL) return NULL; |
413 if (symbol == NULL) return NULL; |
416 return (symbol_c *)symbol->accept(search_base_type); |
414 return search_base_type_c::get_basetype_decl(symbol); |
417 } |
415 } |
418 |
416 |
419 /*********************/ |
417 /*********************/ |
420 /* B 1.2 - Constants */ |
418 /* B 1.2 - Constants */ |
421 /*********************/ |
419 /*********************/ |
1080 * In the above situation it is a legal operation when (l_expr.datatype == r_expr.datatype) && is_enumerated(r/l_expr.datatype) && is_bool(symbol.datatype) |
1078 * In the above situation it is a legal operation when (l_expr.datatype == r_expr.datatype) && is_enumerated(r/l_expr.datatype) && is_bool(symbol.datatype) |
1081 */ |
1079 */ |
1082 void *narrow_candidate_datatypes_c::narrow_binary_expression(const struct widen_entry widen_table[], symbol_c *symbol, symbol_c *l_expr, symbol_c *r_expr, bool *deprecated_operation, bool allow_enums) { |
1080 void *narrow_candidate_datatypes_c::narrow_binary_expression(const struct widen_entry widen_table[], symbol_c *symbol, symbol_c *l_expr, symbol_c *r_expr, bool *deprecated_operation, bool allow_enums) { |
1083 symbol_c *l_type, *r_type; |
1081 symbol_c *l_type, *r_type; |
1084 int count = 0; |
1082 int count = 0; |
1085 search_base_type_c search_base_type; |
|
1086 |
1083 |
1087 if (NULL != deprecated_operation) |
1084 if (NULL != deprecated_operation) |
1088 *deprecated_operation = false; |
1085 *deprecated_operation = false; |
1089 |
1086 |
1090 for(unsigned int i = 0; i < l_expr->candidate_datatypes.size(); i++) { |
1087 for(unsigned int i = 0; i < l_expr->candidate_datatypes.size(); i++) { |
1094 r_type = r_expr->candidate_datatypes[j]; |
1091 r_type = r_expr->candidate_datatypes[j]; |
1095 if (is_widening_compatible(widen_table, l_type, r_type, symbol->datatype, deprecated_operation)) { |
1092 if (is_widening_compatible(widen_table, l_type, r_type, symbol->datatype, deprecated_operation)) { |
1096 l_expr->datatype = l_type; |
1093 l_expr->datatype = l_type; |
1097 r_expr->datatype = r_type; |
1094 r_expr->datatype = r_type; |
1098 count ++; |
1095 count ++; |
1099 } else if ((l_type == r_type) && search_base_type.type_is_enumerated(l_type) && get_datatype_info_c::is_BOOL_compatible(symbol->datatype)) { |
1096 } else if ((l_type == r_type) && search_base_type_c::type_is_enumerated(l_type) && get_datatype_info_c::is_BOOL_compatible(symbol->datatype)) { |
1100 if (NULL != deprecated_operation) *deprecated_operation = false; |
1097 if (NULL != deprecated_operation) *deprecated_operation = false; |
1101 l_expr->datatype = l_type; |
1098 l_expr->datatype = l_type; |
1102 r_expr->datatype = r_type; |
1099 r_expr->datatype = r_type; |
1103 count ++; |
1100 count ++; |
1104 } |
1101 } |
1250 /* CASE expression OF case_element_list ELSE statement_list END_CASE */ |
1247 /* CASE expression OF case_element_list ELSE statement_list END_CASE */ |
1251 // SYM_REF3(case_statement_c, expression, case_element_list, statement_list) |
1248 // SYM_REF3(case_statement_c, expression, case_element_list, statement_list) |
1252 void *narrow_candidate_datatypes_c::visit(case_statement_c *symbol) { |
1249 void *narrow_candidate_datatypes_c::visit(case_statement_c *symbol) { |
1253 for (unsigned int i = 0; i < symbol->expression->candidate_datatypes.size(); i++) { |
1250 for (unsigned int i = 0; i < symbol->expression->candidate_datatypes.size(); i++) { |
1254 if ((get_datatype_info_c::is_ANY_INT(symbol->expression->candidate_datatypes[i])) |
1251 if ((get_datatype_info_c::is_ANY_INT(symbol->expression->candidate_datatypes[i])) |
1255 || (search_base_type.type_is_enumerated(symbol->expression->candidate_datatypes[i]))) |
1252 || (search_base_type_c::type_is_enumerated(symbol->expression->candidate_datatypes[i]))) |
1256 symbol->expression->datatype = symbol->expression->candidate_datatypes[i]; |
1253 symbol->expression->datatype = symbol->expression->candidate_datatypes[i]; |
1257 } |
1254 } |
1258 symbol->expression->accept(*this); |
1255 symbol->expression->accept(*this); |
1259 if (NULL != symbol->statement_list) |
1256 if (NULL != symbol->statement_list) |
1260 symbol->statement_list->accept(*this); |
1257 symbol->statement_list->accept(*this); |