diff -r 55ffcf693d6d -r d0cdf1d00b74 stage4/generate_c/search_base_type.cc --- a/stage4/generate_c/search_base_type.cc Sat Nov 17 10:08:38 2007 +0100 +++ b/stage4/generate_c/search_base_type.cc Thu Dec 06 18:01:58 2007 +0100 @@ -38,9 +38,11 @@ class search_base_type_c: public null_visitor_c { private: symbol_c *current_type_name; + bool is_subrange; public: search_base_type_c(void) {current_type_name = NULL;} + bool base_is_subrange() {return this->is_subrange;} public: void *visit(identifier_c *type_name) { @@ -53,6 +55,11 @@ return type_decl->accept(*this); } + + void *explore_type(symbol_c* type_decl) { + this->is_subrange = false; + return type_decl->accept(*this); + } /***********************************/ /* B 1.3.1 - Elementary Data Types */ @@ -100,6 +107,7 @@ /* subrange_specification ASSIGN signed_integer */ void *visit(subrange_spec_init_c *symbol) { + this->is_subrange = true; return symbol->subrange_specification->accept(*this); } @@ -148,7 +156,7 @@ /* ARRAY '[' array_subrange_list ']' OF non_generic_type_name */ void *visit(array_specification_c *symbol) { if (NULL == this->current_type_name) ERROR; - return (void *)this->current_type_name; + return symbol->non_generic_type_name->accept(*this); } /* helper symbol for array_specification */