stage4/generate_c/generate_c_st.cc
changeset 376 7dcbd8418771
parent 375 7a11f9e9e703
child 377 60b012b7793f
equal deleted inserted replaced
375:7a11f9e9e703 376:7dcbd8418771
   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");