From 6f438ab68b3b91ea1ef91eb57c3e257d3a924734 Mon Sep 17 00:00:00 2001 From: Alexandre Bique Date: Wed, 11 Mar 2009 20:44:21 +0000 Subject: [PATCH] i know this breaks everything :-) --- src/ast/generator-data.cc | 13 +++++++------ src/ast/simplify-visitor.cc | 28 +++++++++++++++------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/ast/generator-data.cc b/src/ast/generator-data.cc index 123c33e..4ee5bee 100644 --- a/src/ast/generator-data.cc +++ b/src/ast/generator-data.cc @@ -65,6 +65,12 @@ const ag::Node ag::nodes[] = { } }, + {"ReferenceType", "Type", "Represent a reference", { + {"Type *", "type"}, + {"", ""} + } + }, + {"EnumType", "Type", "Represent an enum", { {"Type *", "type"}, {"unsigned", "count"}, @@ -323,11 +329,6 @@ const ag::Node ag::nodes[] = { }, /* 3 address decomposition */ - {"TmpResultExp", "Exp", "A temporary result, used for 3 address", { - {"std::string", "name"} - } - }, - {"LoadVar", "Node", "A temporary result, used for 3 address", { {"std::string", "name"}, {"std::string", "to"}, @@ -337,7 +338,7 @@ const ag::Node ag::nodes[] = { {"StoreVar", "Node", "A temporary result, used for 3 address", { {"std::string", "name"}, - {"Exp *", "value"}, // must be TmpResultExp or NumberExp + {"Exp *", "value"}, // must be IdExp or NumberExp } }, diff --git a/src/ast/simplify-visitor.cc b/src/ast/simplify-visitor.cc index bec64f3..3842353 100644 --- a/src/ast/simplify-visitor.cc +++ b/src/ast/simplify-visitor.cc @@ -176,8 +176,6 @@ namespace ast sv->name = node.dest->name; sv->value = replacement_; simplifications_.push_back(sv); - - delete &node; } void @@ -189,17 +187,21 @@ namespace ast void SimplifyVisitor::visit(IdExp & node) { - LoadVar * lv = new LoadVar(); - lv->name = node.name; - lv->to = nextId(); - lv->type = node.type; - simplifications_.push_back(lv); - - TmpResultExp * tre = new TmpResultExp(); - tre->name = lv->to; - tre->type = node.type; - replacement_ = tre; - delete &node; + if (node.type->nodeType == ReferenceType::nodeTypeId()) + { + LoadVar * lv = new LoadVar(); + lv->name = node.name; + lv->to = nextId(); + lv->type = node.type; + simplifications_.push_back(lv); + + IdExp * tre = new IdExp(); + tre->name = lv->to; + tre->type = reinterpret_cast(node.type)->type; + replacement_ = tre; + } + else + replacement_ = &node; } void -- 2.11.4.GIT