summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/builtin.cc18
-rw-r--r--src/modcontext.cc4
-rw-r--r--src/module.cc4
-rw-r--r--src/module.h4
-rw-r--r--src/parser.y13
5 files changed, 20 insertions, 23 deletions
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<std::string> assignments_var;
- typedef boost::unordered_map<std::string, Expression*> AssignmentMap;
- AssignmentMap assignments;
+ AssignmentList assignments;
typedef boost::unordered_map<std::string, class AbstractFunction*> 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<std::string>::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;
contact: Jan Huwald // Impressum