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) |