From b4568a09df8be0f212ba1c4fd1660459900e3cf0 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 19 Apr 2013 13:56:27 -0400 Subject: Refactored assignments and assignments_var into one component diff --git a/src/builtin.cc b/src/builtin.cc index bdd2d3b..37abde6 100644 --- a/src/builtin.cc +++ b/src/builtin.cc @@ -80,24 +80,18 @@ std::string Builtins::isDeprecated(const std::string &name) Builtins::Builtins() { - this->rootmodule.assignments_var.push_back("$fn"); - this->rootmodule.assignments["$fn"] = new Expression(Value(0.0)); - this->rootmodule.assignments_var.push_back("$fs"); - this->rootmodule.assignments["$fs"] = new Expression(Value(2.0)); - this->rootmodule.assignments_var.push_back("$fa"); - this->rootmodule.assignments["$fa"] = new Expression(Value(12.0)); - this->rootmodule.assignments_var.push_back("$t"); - this->rootmodule.assignments["$t"] = new Expression(Value(0.0)); + this->rootmodule.assignments.push_back(Assignment("$fn", new Expression(Value(0.0)))); + this->rootmodule.assignments.push_back(Assignment("$fs", new Expression(Value(2.0)))); + this->rootmodule.assignments.push_back(Assignment("$fa", new Expression(Value(12.0)))); + this->rootmodule.assignments.push_back(Assignment("$t", new Expression(Value(0.0)))); Value::VectorType zero3; zero3.push_back(Value(0.0)); zero3.push_back(Value(0.0)); zero3.push_back(Value(0.0)); Value zero3val(zero3); - this->rootmodule.assignments_var.push_back("$vpt"); - this->rootmodule.assignments["$vpt"] = new Expression(zero3val); - this->rootmodule.assignments_var.push_back("$vpr"); - this->rootmodule.assignments["$vpr"] = new Expression(zero3val); + this->rootmodule.assignments.push_back(Assignment("$vpt", new Expression(zero3val))); + this->rootmodule.assignments.push_back(Assignment("$vpr", new Expression(zero3val))); } Builtins::~Builtins() diff --git a/src/modcontext.cc b/src/modcontext.cc index 7d123b8..83ad7c2 100644 --- a/src/modcontext.cc +++ b/src/modcontext.cc @@ -33,8 +33,8 @@ void ModuleContext::setModule(const Module &module, const EvalContext *evalctx) this->functions_p = &module.functions; this->modules_p = &module.modules; this->usedlibs_p = &module.usedlibs; - BOOST_FOREACH(const std::string &var, module.assignments_var) { - this->set_variable(var, module.assignments.at(var)->evaluate(this)); + BOOST_FOREACH(const Assignment &ass, module.assignments) { + this->set_variable(ass.first, ass.second->evaluate(this)); } if (!module.modulePath().empty()) this->document_path = module.modulePath(); diff --git a/src/module.cc b/src/module.cc index 3f6dd22..3b1ec0a 100644 --- a/src/module.cc +++ b/src/module.cc @@ -190,8 +190,8 @@ std::string Module::dump(const std::string &indent, const std::string &name) con BOOST_FOREACH(const AbstractModuleContainer::value_type &m, modules) { dump << m.second->dump(indent + tab, m.first); } - BOOST_FOREACH(const std::string &var, assignments_var) { - dump << indent << tab << var << " = " << *assignments.at(var) << ";\n"; + BOOST_FOREACH(const Assignment &ass, assignments) { + dump << indent << tab << ass.first << " = " << *ass.second << ";\n"; } for (size_t i = 0; i < children.size(); i++) { dump << children[i]->dump(indent + tab); diff --git a/src/module.h b/src/module.h index ace3c1b..94de25e 100644 --- a/src/module.h +++ b/src/module.h @@ -80,9 +80,7 @@ public: bool is_handling_dependencies; bool handleDependencies(); - std::list assignments_var; - typedef boost::unordered_map AssignmentMap; - AssignmentMap assignments; + AssignmentList assignments; typedef boost::unordered_map FunctionContainer; FunctionContainer functions; diff --git a/src/parser.y b/src/parser.y index fd6b164..096bb89 100644 --- a/src/parser.y +++ b/src/parser.y @@ -148,10 +148,15 @@ module_instantiation { } } | TOK_ID '=' expr ';' { - std::list::iterator found = std::find(currmodule->assignments_var.begin(), currmodule->assignments_var.end(),$1); - if (found != currmodule->assignments_var.end()) currmodule->assignments_var.erase(found); - currmodule->assignments_var.push_back($1); - currmodule->assignments[$1] = $3; + for (AssignmentList::iterator iter = currmodule->assignments.begin(); + iter != currmodule->assignments.end(); + iter++) { + if (iter->first == $1) { + currmodule->assignments.erase(iter); + break; + } + } + currmodule->assignments.push_back(Assignment($1, $3)); } | TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')' { Module *p = currmodule; -- cgit v0.10.1