225 /********************************/ |
225 /********************************/ |
226 /* signed_integer DOTDOT signed_integer */ |
226 /* signed_integer DOTDOT signed_integer */ |
227 void *visit(subrange_c *symbol) { |
227 void *visit(subrange_c *symbol) { |
228 switch (wanted_casegeneration) { |
228 switch (wanted_casegeneration) { |
229 case subrange_cg: |
229 case subrange_cg: |
230 s4o.print("case_expression >= "); |
230 s4o.print("__case_expression >= "); |
231 symbol->lower_limit->accept(*this); |
231 symbol->lower_limit->accept(*this); |
232 s4o.print(" && case_expression <= "); |
232 s4o.print(" && __case_expression <= "); |
233 symbol->upper_limit->accept(*this); |
233 symbol->upper_limit->accept(*this); |
234 break; |
234 break; |
235 default: |
235 default: |
236 break; |
236 break; |
237 } |
237 } |
1075 |
1075 |
1076 void *visit(case_statement_c *symbol) { |
1076 void *visit(case_statement_c *symbol) { |
1077 symbol_c *expression_type = search_expression_type->get_type(symbol->expression); |
1077 symbol_c *expression_type = search_expression_type->get_type(symbol->expression); |
1078 s4o.print("{\n"); |
1078 s4o.print("{\n"); |
1079 s4o.indent_right(); |
1079 s4o.indent_right(); |
1080 if (search_base_type.type_is_enumerated(expression_type)) { |
1080 s4o.print(s4o.indent_spaces); |
1081 s4o.print(s4o.indent_spaces); |
1081 if (search_expression_type->is_literal_integer_type(expression_type)) |
1082 expression_type->accept(*this); |
1082 search_expression_type->lint_type_name.accept(*this); |
1083 s4o.print(" case_expression = "); |
1083 else if (search_expression_type->is_literal_real_type(expression_type)) |
1084 } |
1084 search_expression_type->lreal_type_name.accept(*this); |
1085 else { |
1085 else |
1086 s4o.print(s4o.indent_spaces + "IEC_LINT case_expression = (IEC_LINT)"); |
1086 expression_type->accept(*this); |
1087 } |
1087 s4o.print(" __case_expression = "); |
1088 symbol->expression->accept(*this); |
1088 symbol->expression->accept(*this); |
1089 s4o.print(";\n" + s4o.indent_spaces + "switch (case_expression) {\n"); |
1089 s4o.print(";\n" + s4o.indent_spaces + "switch (__case_expression) {\n"); |
1090 s4o.indent_right(); |
1090 s4o.indent_right(); |
1091 wanted_casegeneration = single_cg; |
1091 wanted_casegeneration = single_cg; |
1092 symbol->case_element_list->accept(*this); |
1092 symbol->case_element_list->accept(*this); |
1093 wanted_casegeneration = subrange_cg; |
1093 wanted_casegeneration = subrange_cg; |
1094 s4o.print(s4o.indent_spaces + "default:\n"); |
1094 s4o.print(s4o.indent_spaces + "default:\n"); |