diff options
Diffstat (limited to 'src/evalcontext.cc')
-rw-r--r-- | src/evalcontext.cc | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/evalcontext.cc b/src/evalcontext.cc index b7566e3..57c206f 100644 --- a/src/evalcontext.cc +++ b/src/evalcontext.cc @@ -4,9 +4,33 @@ #include "function.h" #include "printutils.h" #include "builtin.h" +#include "localscope.h" #include <boost/foreach.hpp> +const std::string &EvalContext::getArgName(size_t i) const +{ + assert(i < this->eval_arguments.size()); + return this->eval_arguments[i].first; +} + +Value EvalContext::getArgValue(size_t i, const Context *ctx) const +{ + assert(i < this->eval_arguments.size()); + const Assignment &arg = this->eval_arguments[i]; + return arg.second ? arg.second->evaluate(ctx ? ctx : this) : Value(); +} + +size_t EvalContext::numChildren() const +{ + return this->scope ? this->scope->children.size() : 0; +} + +ModuleInstantiation *EvalContext::getChild(size_t i) const +{ + return this->scope ? this->scope->children[i] : NULL; +} + #ifdef DEBUG void EvalContext::dump(const AbstractModule *mod, const ModuleInstantiation *inst) { @@ -20,9 +44,9 @@ void EvalContext::dump(const AbstractModule *mod, const ModuleInstantiation *ins for (int i=0;i<this->eval_arguments.size();i++) { PRINTB(" %s = %s", this->eval_arguments[i].first % this->eval_arguments[i].second); } - if (this->children.size() > 0) { + if (this->scope && this->scope->children.size() > 0) { PRINT(" children:"); - BOOST_FOREACH(const ModuleInstantiation *ch, this->children) { + BOOST_FOREACH(const ModuleInstantiation *ch, this->scope->children) { PRINTB(" %s", ch->name()); } } |