diff options
author | Marius Kintel <marius@kintel.net> | 2013-04-18 22:34:14 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2013-04-18 22:34:14 (GMT) |
commit | 58bd9c9e3f4454d055bf51d63463a9965a9dcbd7 (patch) | |
tree | 732cd423858685365a4115d44a52f85ae90866a1 /src/context.cc | |
parent | 73c2a45af6afca253159d2cf9c1ecf5747f0217e (diff) |
Cleaned up argument list handling, related to #116
Diffstat (limited to 'src/context.cc')
-rw-r--r-- | src/context.cc | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/context.cc b/src/context.cc index 6189205..706407c 100644 --- a/src/context.cc +++ b/src/context.cc @@ -57,13 +57,11 @@ Context::~Context() Initialize context from a module argument list and a evaluation context which may pass variables which will be preferred over default values. */ -void Context::setVariables(const std::vector<std::string> &argnames, - const std::vector<Expression*> &argexpr, +void Context::setVariables(const AssignmentList &args, const EvalContext *evalctx) { - for (size_t i=0; i<argnames.size(); i++) { - set_variable(argnames[i], i < argexpr.size() && argexpr[i] ? - argexpr[i]->evaluate(this->parent) : Value()); + BOOST_FOREACH(const Assignment &arg, args) { + set_variable(arg.first, arg.second ? arg.second->evaluate(this->parent) : Value()); } if (evalctx) { @@ -72,7 +70,7 @@ void Context::setVariables(const std::vector<std::string> &argnames, const std::string &name = evalctx->eval_arguments[i].first; const Value &val = evalctx->eval_arguments[i].second; if (name.empty()) { - if (posarg < argnames.size()) this->set_variable(argnames[posarg++], val); + if (posarg < args.size()) this->set_variable(args[posarg++].first, val); } else { this->set_variable(name, val); } @@ -158,8 +156,8 @@ void Context::dump(const AbstractModule *mod, const ModuleInstantiation *inst) const Module *m = dynamic_cast<const Module*>(mod); if (m) { PRINT(" module args:"); - BOOST_FOREACH(const std::string &arg, m->argnames) { - PRINTB(" %s = %s", arg % variables[arg]); + BOOST_FOREACH(const Assignment &arg, m->definition_arguments) { + PRINTB(" %s = %s", arg.first % variables[arg.first]); } } } |