stage4/generate_c/generate_c_typedecl.cc
changeset 221 c6aed7e5f070
parent 178 1622dc05c6ca
child 279 c0453b7f99df
equal deleted inserted replaced
220:f332b62cd2c1 221:c6aed7e5f070
   193 /********************************/
   193 /********************************/
   194 /*  subrange_type_name ':' subrange_spec_init */
   194 /*  subrange_type_name ':' subrange_spec_init */
   195 void *visit(subrange_type_declaration_c *symbol) {
   195 void *visit(subrange_type_declaration_c *symbol) {
   196   TRACE("subrange_type_declaration_c");  
   196   TRACE("subrange_type_declaration_c");  
   197   
   197   
   198   s4o_incl.print("typedef ");
   198   s4o_incl.print("__DECLARE_DERIVED_TYPE(");
   199   current_basetypedeclaration = subrangebasetype_bd;
   199   current_basetypedeclaration = subrangebasetype_bd;
   200   symbol->subrange_spec_init->accept(*this);
   200   symbol->subrange_spec_init->accept(*this);
   201   current_basetypedeclaration = none_bd;
   201   current_basetypedeclaration = none_bd;
   202   s4o_incl.print(" ");
   202   s4o_incl.print(", ");
   203   symbol->subrange_type_name->accept(*basedecl);
   203   symbol->subrange_type_name->accept(*basedecl);
   204   s4o_incl.print(";\n");
   204   s4o_incl.print(")\n");
   205   
   205   
   206   current_type_name = symbol->subrange_type_name;
   206   current_type_name = symbol->subrange_type_name;
   207   
   207   
   208   current_basetypedeclaration = subrangetest_bd;
   208   current_basetypedeclaration = subrangetest_bd;
   209   symbol->subrange_spec_init->accept(*this);
   209   symbol->subrange_spec_init->accept(*this);
   338 
   338 
   339 /*  identifier ':' array_spec_init */
   339 /*  identifier ':' array_spec_init */
   340 void *visit(array_type_declaration_c *symbol) {
   340 void *visit(array_type_declaration_c *symbol) {
   341   TRACE("array_type_declaration_c");
   341   TRACE("array_type_declaration_c");
   342   
   342   
   343   s4o_incl.print("typedef ");
   343   s4o_incl.print("__DECLARE_ARRAY_TYPE(");
   344   current_basetypedeclaration = arraybasetypeincl_bd;
   344   current_basetypedeclaration = arraybasetypeincl_bd;
   345   symbol->array_spec_init->accept(*this);
   345   symbol->array_spec_init->accept(*this);
   346   current_basetypedeclaration = none_bd;
   346   current_basetypedeclaration = none_bd;
   347   s4o_incl.print(" ");
   347   s4o_incl.print(",");
   348   symbol->identifier->accept(*basedecl);
   348   symbol->identifier->accept(*basedecl);
       
   349   s4o_incl.print(",");
   349   current_basetypedeclaration = arraysubrange_bd;
   350   current_basetypedeclaration = arraysubrange_bd;
   350   symbol->array_spec_init->accept(*this);
   351   symbol->array_spec_init->accept(*this);
   351   current_basetypedeclaration = none_bd;
   352   current_basetypedeclaration = none_bd;
   352   s4o_incl.print(";\n");
   353   s4o_incl.print(")\n");
   353   
   354   
   354   if (search_base_type.type_is_subrange(symbol->identifier)) {
   355   if (search_base_type.type_is_subrange(symbol->identifier)) {
   355     s4o.print("#define __CHECK_");
   356     s4o.print("#define __CHECK_");
   356     symbol->identifier->accept(*this);
   357     symbol->identifier->accept(*this);
   357     s4o.print(" __CHECK_");
   358     s4o.print(" __CHECK_");
   441 
   442 
   442 /*  simple_type_name ':' simple_spec_init */
   443 /*  simple_type_name ':' simple_spec_init */
   443 void *visit(simple_type_declaration_c *symbol) {
   444 void *visit(simple_type_declaration_c *symbol) {
   444   TRACE("simple_type_declaration_c");
   445   TRACE("simple_type_declaration_c");
   445 
   446 
   446   s4o_incl.print("typedef ");
   447   s4o_incl.print("__DECLARE_DERIVED_TYPE");
   447   symbol->simple_spec_init->accept(*this);
   448   symbol->simple_spec_init->accept(*this);
   448   s4o_incl.print(" ");
   449   s4o_incl.print(",");
   449   symbol->simple_type_name->accept(*basedecl);
   450   symbol->simple_type_name->accept(*basedecl);
   450   s4o_incl.print(";\n");
   451   s4o_incl.print(");\n");
   451   return NULL;
   452   return NULL;
   452 }
   453 }
   453 
   454 
   454 /* simple_specification [ASSIGN constant] */
   455 /* simple_specification [ASSIGN constant] */
   455 //SYM_REF2(simple_spec_init_c, simple_specification, constant)
   456 //SYM_REF2(simple_spec_init_c, simple_specification, constant)
   513 /*  structure_type_name ':' structure_specification */
   514 /*  structure_type_name ':' structure_specification */
   514 //SYM_REF2(structure_type_declaration_c, structure_type_name, structure_specification)
   515 //SYM_REF2(structure_type_declaration_c, structure_type_name, structure_specification)
   515 void *visit(structure_type_declaration_c *symbol) {
   516 void *visit(structure_type_declaration_c *symbol) {
   516   TRACE("structure_type_declaration_c");
   517   TRACE("structure_type_declaration_c");
   517 
   518 
   518   s4o_incl.print("typedef ");
   519   s4o_incl.print("__DECLARE_STRUCT_TYPE(");
   519   symbol->structure_specification->accept(*this);
   520   symbol->structure_specification->accept(*this);
   520   s4o_incl.print(" ");
   521   s4o_incl.print(",");
   521   symbol->structure_type_name->accept(*basedecl);
   522   symbol->structure_type_name->accept(*basedecl);
   522   s4o_incl.print(";\n");
   523   s4o_incl.print(");\n");
   523   return NULL;
   524   return NULL;
   524 }
   525 }
   525 
   526 
   526 /* structure_type_name ASSIGN structure_initialization */
   527 /* structure_type_name ASSIGN structure_initialization */
   527 /* structure_initialization may be NULL ! */
   528 /* structure_initialization may be NULL ! */