diff options
author | Marius Kintel <marius@kintel.net> | 2013-04-19 01:42:33 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2013-04-26 21:42:32 (GMT) |
commit | 64ed1eb9fe00e287d84b18830df86cc0de6b122a (patch) | |
tree | 3b5f4a51209b62a14d28abc7c0e01fc5753e162c /src/evalcontext.h | |
parent | a96f3f3c67d496279151cd3fff47589b8684c378 (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.h | 19 |
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 |