581 /********************************/ |
581 /********************************/ |
582 /* B 1.3.3 - Derived data types */ |
582 /* B 1.3.3 - Derived data types */ |
583 /********************************/ |
583 /********************************/ |
584 /* leave for derived classes... */ |
584 /* leave for derived classes... */ |
585 |
585 |
|
586 |
|
587 /* enumerated_type_name '#' identifier */ |
|
588 void *visit(enumerated_value_c *symbol) { |
|
589 if (NULL == symbol->datatype) { |
|
590 debug_c::print(symbol); |
|
591 ERROR; |
|
592 } |
|
593 |
|
594 symbol_c *type_name = get_datatype_info_c::get_id(symbol->datatype); |
|
595 if (NULL == type_name) { |
|
596 ERROR_MSG("C code generator does not currently support anonymous enumerated data types."); |
|
597 } |
|
598 |
|
599 type_name->accept(*this); |
|
600 s4o.print("__"); |
|
601 symbol->value->accept(*this); |
|
602 return NULL; |
|
603 } |
|
604 |
|
605 |
|
606 |
|
607 /* NOTE: visit(subrange_spec_init_c *) |
|
608 * and visit(subrange_specification_c *) |
|
609 * together simply print out the integer datatype |
|
610 * on which the subrange is based. |
|
611 * |
|
612 * Future code clean-ups should delete these two |
|
613 * visit mehotds, and make sure whoever calls them |
|
614 * uses symbol->datatype instead! |
|
615 */ |
|
616 /* subrange_specification ASSIGN signed_integer */ |
|
617 void *visit(subrange_spec_init_c *symbol) { |
|
618 TRACE("subrange_spec_init_c"); |
|
619 symbol->subrange_specification->accept(*this); |
|
620 return NULL; |
|
621 } |
|
622 |
|
623 /* integer_type_name '(' subrange')' */ |
|
624 void *visit(subrange_specification_c *symbol) { |
|
625 TRACE("subrange_specification_c"); |
|
626 symbol->integer_type_name->accept(*this); |
|
627 return NULL; |
|
628 } |
|
629 |
|
630 |
|
631 /* helper symbol for array_specification */ |
|
632 /* array_subrange_list ',' subrange */ |
|
633 void *visit(array_subrange_list_c *symbol) { |
|
634 TRACE("array_subrange_list_c"); |
|
635 print_list(symbol); |
|
636 return NULL; |
|
637 } |
|
638 |
|
639 |
586 /*********************/ |
640 /*********************/ |
587 /* B 1.4 - Variables */ |
641 /* B 1.4 - Variables */ |
588 /*********************/ |
642 /*********************/ |
589 void *visit(symbolic_variable_c *symbol) { |
643 void *visit(symbolic_variable_c *symbol) { |
590 TRACE("symbolic_variable_c"); |
644 TRACE("symbolic_variable_c"); |