201 current_basetypedeclaration = subrangebasetype_bd; |
201 current_basetypedeclaration = subrangebasetype_bd; |
202 symbol->subrange_spec_init->accept(*this); |
202 symbol->subrange_spec_init->accept(*this); |
203 current_basetypedeclaration = none_bd; |
203 current_basetypedeclaration = none_bd; |
204 s4o_incl.print(" "); |
204 s4o_incl.print(" "); |
205 symbol->subrange_type_name->accept(*basedecl); |
205 symbol->subrange_type_name->accept(*basedecl); |
206 s4o_incl.print(";\n\n"); |
206 s4o_incl.print(";\n"); |
207 |
207 |
208 current_type_name = symbol->subrange_type_name; |
208 current_type_name = symbol->subrange_type_name; |
209 |
209 |
210 current_basetypedeclaration = subrangetest_bd; |
210 current_basetypedeclaration = subrangetest_bd; |
211 symbol->subrange_spec_init->accept(*this); |
211 symbol->subrange_spec_init->accept(*this); |
374 s4o.print("\n"); |
374 s4o.print("\n"); |
375 |
375 |
376 return NULL; |
376 return NULL; |
377 } |
377 } |
378 |
378 |
379 /* array_specification [ASSIGN array_initialization} */ |
379 /* array_specification [ASSIGN array_initialization] */ |
380 /* array_initialization may be NULL ! */ |
380 /* array_initialization may be NULL ! */ |
381 void *visit(array_spec_init_c *symbol) { |
381 void *visit(array_spec_init_c *symbol) { |
382 TRACE("array_spec_init_c"); |
382 TRACE("array_spec_init_c"); |
383 current_typedefinition = array_td; |
383 |
384 symbol->array_specification->accept(*this); |
384 identifier_c *array_type_name = dynamic_cast<identifier_c *>(symbol->array_specification); |
385 current_typedefinition = none_td; |
385 |
|
386 if (array_type_name == NULL) { |
|
387 current_typedefinition = array_td; |
|
388 symbol->array_specification->accept(*this); |
|
389 current_typedefinition = none_td; |
|
390 } |
|
391 else |
|
392 symbol->array_specification->accept(*basedecl); |
386 return NULL; |
393 return NULL; |
387 } |
394 } |
388 |
395 |
389 /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ |
396 /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ |
390 void *visit(array_specification_c *symbol) { |
397 void *visit(array_specification_c *symbol) { |
433 } |
440 } |
434 |
441 |
435 /* helper symbol for data_type_declaration */ |
442 /* helper symbol for data_type_declaration */ |
436 void *visit(type_declaration_list_c *symbol) { |
443 void *visit(type_declaration_list_c *symbol) { |
437 TRACE("type_declaration_list_c"); |
444 TRACE("type_declaration_list_c"); |
438 return print_list(symbol, "", "\n"); |
445 return print_list_incl(symbol, "", "\n", "\n"); |
439 } |
446 } |
440 |
447 |
441 /* simple_type_name ':' simple_spec_init */ |
448 /* simple_type_name ':' simple_spec_init */ |
442 void *visit(simple_type_declaration_c *symbol) { |
449 void *visit(simple_type_declaration_c *symbol) { |
443 TRACE("simple_type_declaration_c"); |
450 TRACE("simple_type_declaration_c"); |
529 /* structure_type_name ASSIGN structure_initialization */ |
536 /* structure_type_name ASSIGN structure_initialization */ |
530 /* structure_initialization may be NULL ! */ |
537 /* structure_initialization may be NULL ! */ |
531 //SYM_REF2(initialized_structure_c, structure_type_name, structure_initialization) |
538 //SYM_REF2(initialized_structure_c, structure_type_name, structure_initialization) |
532 void *visit(initialized_structure_c *symbol) { |
539 void *visit(initialized_structure_c *symbol) { |
533 TRACE("initialized_structure_c"); |
540 TRACE("initialized_structure_c"); |
|
541 fprintf(stderr, "initialized_structure_c\n"); |
|
542 |
534 symbol->structure_type_name->accept(*this); |
543 symbol->structure_type_name->accept(*this); |
535 return NULL; |
544 return NULL; |
536 } |
545 } |
537 |
546 |
538 /* helper symbol for structure_declaration */ |
547 /* helper symbol for structure_declaration */ |
539 /* structure_declaration: STRUCT structure_element_declaration_list END_STRUCT */ |
548 /* structure_declaration: STRUCT structure_element_declaration_list END_STRUCT */ |
540 /* structure_element_declaration_list structure_element_declaration ';' */ |
549 /* structure_element_declaration_list structure_element_declaration ';' */ |
541 //SYM_LIST(structure_element_declaration_list_c) |
550 //SYM_LIST(structure_element_declaration_list_c) |
542 void *visit(structure_element_declaration_list_c *symbol) { |
551 void *visit(structure_element_declaration_list_c *symbol) { |
543 TRACE("structure_element_declaration_list_c"); |
552 TRACE("structure_element_declaration_list_c"); |
544 s4o.print("struct {\n"); |
553 s4o_incl.print("struct {\n"); |
545 s4o.indent_right(); |
554 s4o_incl.indent_right(); |
546 s4o.print(s4o.indent_spaces); |
555 s4o_incl.print(s4o_incl.indent_spaces); |
547 |
556 |
548 print_list(symbol); |
557 print_list_incl(symbol, "", s4o_incl.indent_spaces, ""); |
549 |
558 |
550 s4o.indent_left(); |
559 s4o_incl.indent_left(); |
551 s4o.print(s4o.indent_spaces); |
560 s4o_incl.print(s4o_incl.indent_spaces); |
552 s4o.print("}"); |
561 s4o_incl.print("}"); |
553 return NULL; |
562 return NULL; |
554 } |
563 } |
555 |
564 |
556 /* structure_element_name ':' spec_init */ |
565 /* structure_element_name ':' spec_init */ |
557 //SYM_REF2(structure_element_declaration_c, structure_element_name, spec_init) |
566 //SYM_REF2(structure_element_declaration_c, structure_element_name, spec_init) |
558 void *visit(structure_element_declaration_c *symbol) { |
567 void *visit(structure_element_declaration_c *symbol) { |
559 TRACE("structure_element_declaration_c"); |
568 TRACE("structure_element_declaration_c"); |
560 |
569 |
561 symbol->spec_init->accept(*this); |
570 symbol->spec_init->accept(*this); |
562 s4o.print(" "); |
571 s4o_incl.print(" "); |
563 symbol->structure_element_name->accept(*this); |
572 symbol->structure_element_name->accept(*basedecl); |
564 s4o.print(";\n"); |
573 s4o_incl.print(";\n"); |
565 s4o.print(s4o.indent_spaces); |
574 s4o_incl.print(s4o.indent_spaces); |
566 |
575 |
567 return NULL; |
576 return NULL; |
568 } |
577 } |
569 |
578 |
570 /* helper symbol for structure_initialization */ |
579 /* helper symbol for structure_initialization */ |
573 //SYM_LIST(structure_element_initialization_list_c) |
582 //SYM_LIST(structure_element_initialization_list_c) |
574 void *visit(structure_element_initialization_list_c *symbol) { |
583 void *visit(structure_element_initialization_list_c *symbol) { |
575 TRACE("structure_element_initialization_list_c"); |
584 TRACE("structure_element_initialization_list_c"); |
576 |
585 |
577 // TODO ??? |
586 // TODO ??? |
578 ERROR; |
587 //ERROR; |
579 return NULL; |
588 return NULL; |
580 } |
589 } |
581 |
590 |
582 /* structure_element_name ASSIGN value */ |
591 /* structure_element_name ASSIGN value */ |
583 //SYM_REF2(structure_element_initialization_c, structure_element_name, value) |
592 //SYM_REF2(structure_element_initialization_c, structure_element_name, value) |
584 void *visit(structure_element_initialization_c *symbol) { |
593 void *visit(structure_element_initialization_c *symbol) { |
585 TRACE("structure_element_initialization_c"); |
594 TRACE("structure_element_initialization_c"); |
586 |
595 |
587 // TODO ??? |
596 // TODO ??? |
588 ERROR; |
597 //ERROR; |
589 return NULL; |
598 return NULL; |
590 } |
599 } |
591 |
600 |
592 #if 0 |
601 #if 0 |
593 /* string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */ |
602 /* string_type_name ':' elementary_string_type_name string_type_declaration_size string_type_declaration_init */ |