stage4/generate_c/generate_c.cc
changeset 318 746a357b8747
parent 283 214d3fdee596
child 330 d2facfcf485a
equal deleted inserted replaced
317:5b687021c6e7 318:746a357b8747
   610   s4o.print(" = ");
   610   s4o.print(" = ");
   611   {
   611   {
   612     /* get the default value of this variable's type */
   612     /* get the default value of this variable's type */
   613     symbol_c *default_value = (symbol_c *)symbol->type_name->accept(*type_initial_value_c::instance());
   613     symbol_c *default_value = (symbol_c *)symbol->type_name->accept(*type_initial_value_c::instance());
   614     if (default_value == NULL) ERROR;
   614     if (default_value == NULL) ERROR;
   615     default_value->accept(*this);
   615     initialization_analyzer_c initialization_analyzer(default_value);
       
   616     switch (initialization_analyzer.get_initialization_type()) {
       
   617       case initialization_analyzer_c::struct_it:
       
   618         {
       
   619           generate_c_structure_initialization_c *structure_initialization = new generate_c_structure_initialization_c(&s4o);
       
   620           structure_initialization->init_structure_default(symbol->type_name);
       
   621           structure_initialization->init_structure_values(default_value);
       
   622           delete structure_initialization;
       
   623         }
       
   624     	break;
       
   625       case initialization_analyzer_c::array_it:
       
   626         {
       
   627     	  generate_c_array_initialization_c *array_initialization = new generate_c_array_initialization_c(&s4o);
       
   628     	  array_initialization->init_array_size(symbol->type_name);
       
   629     	  array_initialization->init_array_values(default_value);
       
   630     	  delete array_initialization;
       
   631         }
       
   632     	break;
       
   633       default:
       
   634         default_value->accept(*this);
       
   635         break;
       
   636     }
   616   }
   637   }
   617   s4o.print(";\n\n");
   638   s4o.print(";\n\n");
   618   
   639   
   619   s4o.print(s4o.indent_spaces + "// Control execution\n");
   640   s4o.print(s4o.indent_spaces + "// Control execution\n");
   620   s4o.print(s4o.indent_spaces + "if (!EN) {\n");
   641   s4o.print(s4o.indent_spaces + "if (!EN) {\n");