summaryrefslogtreecommitdiff
path: root/src/evalcontext.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/evalcontext.cc')
-rw-r--r--src/evalcontext.cc28
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());
}
}
contact: Jan Huwald // Impressum