diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/gcc/elna-generic.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/gcc/elna-generic.cc b/gcc/gcc/elna-generic.cc index bf4784b..57c8c22 100644 --- a/gcc/gcc/elna-generic.cc +++ b/gcc/gcc/elna-generic.cc @@ -454,6 +454,16 @@ namespace elna::gcc } } + void generic_visitor::visit(boot::constant_declaration *declaration) + { + const std::string& name = declaration->identifier.name(); + const std::shared_ptr<boot::info> symbol = this->bag.lookup(name); + const std::shared_ptr<boot::constant_info> constant_symbol = symbol->is_constant(); + tree type = get_inner_alias(constant_symbol->symbol, this->symbols); + tree constant_tree = constant_to_tree(constant_symbol->value, this->symbols, type); + this->symbols->enter(name, constant_tree); + } + void generic_visitor::visit(boot::procedure_declaration *declaration) { tree fndecl = this->symbols->lookup(declaration->identifier.name()); @@ -470,6 +480,7 @@ namespace elna::gcc { this->symbols->enter(IDENTIFIER_POINTER(DECL_NAME(argument_chain)), argument_chain); } + visit_all(this, declaration->body.value().constants); visit_all(this, declaration->body.value().variables); visit_statements(declaration->body.value().statements); @@ -1134,6 +1145,7 @@ namespace elna::gcc void generic_visitor::visit_block(boot::block& body) { this->bag.enter(body.symbols); + visit_all(this, body.constants); visit_all(this, body.variables); visit_statements(body.statements); this->bag.leave(); |
