stage4/generate_c/generate_c_typedecl.cc
changeset 327 da78d0d93c75
parent 322 293967b9277d
child 328 66cd5d9893dd
equal deleted inserted replaced
326:e3fbf97d2021 327:da78d0d93c75
   177   TRACE("subrange_type_declaration_c");  
   177   TRACE("subrange_type_declaration_c");  
   178   
   178   
   179   current_typedefinition = subrange_td;
   179   current_typedefinition = subrange_td;
   180 
   180 
   181   s4o_incl.print("__DECLARE_DERIVED_TYPE(");
   181   s4o_incl.print("__DECLARE_DERIVED_TYPE(");
       
   182   symbol->subrange_type_name->accept(*basedecl);
       
   183   s4o_incl.print(",");
   182   current_basetypedeclaration = subrangebasetype_bd;
   184   current_basetypedeclaration = subrangebasetype_bd;
   183   symbol->subrange_spec_init->accept(*this);
   185   symbol->subrange_spec_init->accept(*this);
   184   current_basetypedeclaration = none_bd;
   186   current_basetypedeclaration = none_bd;
   185   s4o_incl.print(",");
       
   186   symbol->subrange_type_name->accept(*basedecl);
       
   187   s4o_incl.print(")\n");
   187   s4o_incl.print(")\n");
   188   
   188   
   189   current_type_name = symbol->subrange_type_name;
   189   current_type_name = symbol->subrange_type_name;
   190   
   190   
   191   current_basetypedeclaration = subrangetest_bd;
   191   current_basetypedeclaration = subrangetest_bd;
   295 void *visit(enumerated_type_declaration_c *symbol) {
   295 void *visit(enumerated_type_declaration_c *symbol) {
   296   TRACE("enumerated_type_declaration_c");
   296   TRACE("enumerated_type_declaration_c");
   297   
   297   
   298   current_typedefinition = enumerated_td;
   298   current_typedefinition = enumerated_td;
   299 
   299 
   300   s4o_incl.print("typedef enum {\n");
   300   s4o_incl.print("__DECLARE_ENUMERATED_TYPE(");
       
   301   symbol->enumerated_type_name->accept(*basedecl);
       
   302   s4o_incl.print(",\n");
   301   s4o_incl.indent_right();
   303   s4o_incl.indent_right();
   302   symbol->enumerated_spec_init->accept(*this);
   304   symbol->enumerated_spec_init->accept(*this);
   303   s4o_incl.indent_left();
   305   s4o_incl.indent_left();
   304   s4o_incl.print("} ");
   306   s4o_incl.print(")\n");
   305   symbol->enumerated_type_name->accept(*basedecl);
       
   306   s4o_incl.print(";\n");
       
   307 
   307 
   308   current_typedefinition = none_td;
   308   current_typedefinition = none_td;
   309 
   309 
   310   return NULL;
   310   return NULL;
   311 }
   311 }
   345 
   345 
   346   if (array_is_derived)
   346   if (array_is_derived)
   347 	s4o_incl.print("__DECLARE_DERIVED_TYPE(");
   347 	s4o_incl.print("__DECLARE_DERIVED_TYPE(");
   348   else
   348   else
   349 	s4o_incl.print("__DECLARE_ARRAY_TYPE(");
   349 	s4o_incl.print("__DECLARE_ARRAY_TYPE(");
       
   350   symbol->identifier->accept(*basedecl);
       
   351   s4o_incl.print(",");
   350   current_basetypedeclaration = arraybasetypeincl_bd;
   352   current_basetypedeclaration = arraybasetypeincl_bd;
   351   symbol->array_spec_init->accept(*this);
   353   symbol->array_spec_init->accept(*this);
   352   current_basetypedeclaration = none_bd;
   354   current_basetypedeclaration = none_bd;
   353   s4o_incl.print(",");
       
   354   symbol->identifier->accept(*basedecl);
       
   355   if (!array_is_derived) {
   355   if (!array_is_derived) {
   356 	s4o_incl.print(",");
   356 	s4o_incl.print(",");
   357 	current_basetypedeclaration = arraysubrange_bd;
   357 	current_basetypedeclaration = arraysubrange_bd;
   358 	symbol->array_spec_init->accept(*this);
   358 	symbol->array_spec_init->accept(*this);
   359 	current_basetypedeclaration = none_bd;
   359 	current_basetypedeclaration = none_bd;
   472 /*  simple_type_name ':' simple_spec_init */
   472 /*  simple_type_name ':' simple_spec_init */
   473 void *visit(simple_type_declaration_c *symbol) {
   473 void *visit(simple_type_declaration_c *symbol) {
   474   TRACE("simple_type_declaration_c");
   474   TRACE("simple_type_declaration_c");
   475 
   475 
   476   s4o_incl.print("__DECLARE_DERIVED_TYPE(");
   476   s4o_incl.print("__DECLARE_DERIVED_TYPE(");
       
   477   symbol->simple_type_name->accept(*basedecl);
       
   478   s4o_incl.print(",");
   477   symbol->simple_spec_init->accept(*this);
   479   symbol->simple_spec_init->accept(*this);
   478   s4o_incl.print(",");
       
   479   symbol->simple_type_name->accept(*basedecl);
       
   480   s4o_incl.print(")\n");
   480   s4o_incl.print(")\n");
   481   return NULL;
   481   return NULL;
   482 }
   482 }
   483 
   483 
   484 /* simple_specification [ASSIGN constant] */
   484 /* simple_specification [ASSIGN constant] */
   546   TRACE("structure_type_declaration_c");
   546   TRACE("structure_type_declaration_c");
   547 
   547 
   548   current_typedefinition = struct_td;
   548   current_typedefinition = struct_td;
   549 
   549 
   550   s4o_incl.print("__DECLARE_STRUCT_TYPE(");
   550   s4o_incl.print("__DECLARE_STRUCT_TYPE(");
       
   551   symbol->structure_type_name->accept(*basedecl);
       
   552   s4o_incl.print(",");
   551   symbol->structure_specification->accept(*this);
   553   symbol->structure_specification->accept(*this);
   552   s4o_incl.print(",");
   554   s4o_incl.print(")\n");
   553   symbol->structure_type_name->accept(*basedecl);
       
   554   s4o_incl.print(");\n");
       
   555 
   555 
   556   current_typedefinition = none_td;
   556   current_typedefinition = none_td;
   557 
   557 
   558   return NULL;
   558   return NULL;
   559 }
   559 }
   573 /* structure_declaration:  STRUCT structure_element_declaration_list END_STRUCT */
   573 /* structure_declaration:  STRUCT structure_element_declaration_list END_STRUCT */
   574 /* structure_element_declaration_list structure_element_declaration ';' */
   574 /* structure_element_declaration_list structure_element_declaration ';' */
   575 //SYM_LIST(structure_element_declaration_list_c)
   575 //SYM_LIST(structure_element_declaration_list_c)
   576 void *visit(structure_element_declaration_list_c *symbol) {
   576 void *visit(structure_element_declaration_list_c *symbol) {
   577   TRACE("structure_element_declaration_list_c");
   577   TRACE("structure_element_declaration_list_c");
   578   s4o_incl.print("struct {\n");
   578   s4o_incl.print("\n");
   579   s4o_incl.indent_right();
   579   s4o_incl.indent_right();
   580   s4o_incl.print(s4o_incl.indent_spaces);
   580   s4o_incl.print(s4o_incl.indent_spaces);
   581 
   581 
   582   print_list_incl(symbol, "", s4o_incl.indent_spaces, "");
   582   print_list_incl(symbol, "", s4o_incl.indent_spaces, "");
   583 
   583 
   584   s4o_incl.indent_left();
   584   s4o_incl.indent_left();
   585   s4o_incl.print(s4o_incl.indent_spaces);
   585   s4o_incl.print(s4o_incl.indent_spaces);
   586   s4o_incl.print("}");
       
   587   return NULL;
   586   return NULL;
   588 }
   587 }
   589 
   588 
   590 /*  structure_element_name ':' spec_init */
   589 /*  structure_element_name ':' spec_init */
   591 //SYM_REF2(structure_element_declaration_c, structure_element_name, spec_init)
   590 //SYM_REF2(structure_element_declaration_c, structure_element_name, spec_init)