stage4/generate_c/generate_c_base.cc
changeset 860 7669a8d43c11
parent 854 13d0b67de111
child 877 c25346eac788
equal deleted inserted replaced
859:41d11bacfc9b 860:7669a8d43c11
   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");