summaryrefslogtreecommitdiff
path: root/src/evalcontext.h
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2013-04-19 01:42:33 (GMT)
committerMarius Kintel <marius@kintel.net>2013-04-26 21:42:32 (GMT)
commit64ed1eb9fe00e287d84b18830df86cc0de6b122a (patch)
tree3b5f4a51209b62a14d28abc7c0e01fc5753e162c /src/evalcontext.h
parenta96f3f3c67d496279151cd3fff47589b8684c378 (diff)
Experiment: Lazy evaluation of argument lists in evaluation context. Allows e.g. for loop variables to be dependent on each other
Diffstat (limited to 'src/evalcontext.h')
-rw-r--r--src/evalcontext.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/evalcontext.h b/src/evalcontext.h
index 3d7d222..26a4a68 100644
--- a/src/evalcontext.h
+++ b/src/evalcontext.h
@@ -10,15 +10,28 @@
class EvalContext : public Context
{
public:
- EvalContext(const Context *parent = NULL) : Context(parent) {}
+ typedef std::vector<class ModuleInstantiation *> InstanceList;
+
+ EvalContext(const Context *parent,
+ const AssignmentList &args, const InstanceList *const children = NULL)
+ : Context(parent), eval_arguments(args), children(children) {}
virtual ~EvalContext() {}
- std::vector<std::pair<std::string, Value> > eval_arguments;
- std::vector<class ModuleInstantiation *> children;
+ size_t numArgs() const { return this->eval_arguments.size(); }
+ const std::string &getArgName(size_t i) const;
+ Value getArgValue(size_t i, const Context *ctx = NULL) const;
+
+ size_t numChildren() const { return this->children ? this->children->size() : 0; }
+ ModuleInstantiation *getChild(size_t i) const { return this->children ? (*this->children)[i] : NULL; }
#ifdef DEBUG
virtual void dump(const class AbstractModule *mod, const ModuleInstantiation *inst);
#endif
+
+private:
+ const AssignmentList &eval_arguments;
+ std::vector<std::pair<std::string, Value> > eval_values;
+ const InstanceList *const children;
};
#endif
contact: Jan Huwald // Impressum