diff options
Diffstat (limited to 'src/module.h')
-rw-r--r-- | src/module.h | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/src/module.h b/src/module.h index cc82f81..ace3c1b 100644 --- a/src/module.h +++ b/src/module.h @@ -6,35 +6,37 @@ #include <list> #include <boost/unordered_map.hpp> #include "value.h" +#include "typedefs.h" class ModuleInstantiation { public: - ModuleInstantiation(const std::string &name = "") - : ctx(NULL), - tag_root(false), tag_highlight(false), tag_background(false), modname(name) { } + ModuleInstantiation(const std::string &name = "") + : tag_root(false), tag_highlight(false), tag_background(false), modname(name) { } virtual ~ModuleInstantiation(); std::string dump(const std::string &indent) const; - class AbstractNode *evaluate(const class Context *ctx) const; - std::vector<AbstractNode*> evaluateChildren(const Context *ctx = NULL) const; + class AbstractNode *evaluate_instance(const class Context *ctx) const; + std::vector<AbstractNode*> evaluateChildren(const Context *evalctx) const; + + void setPath(const std::string &path) { this->modpath = path; } + const std::string &path() const { return this->modpath; } + std::string getAbsolutePath(const std::string &filename) const; const std::string &name() const { return this->modname; } bool isBackground() const { return this->tag_background; } bool isHighlight() const { return this->tag_highlight; } bool isRoot() const { return this->tag_root; } - std::vector<std::string> argnames; - std::vector<Value> argvalues; - std::vector<class Expression*> argexpr; + AssignmentList arguments; std::vector<ModuleInstantiation*> children; - const Context *ctx; bool tag_root; bool tag_highlight; bool tag_background; protected: std::string modname; + std::string modpath; friend class Module; }; @@ -43,7 +45,7 @@ class IfElseModuleInstantiation : public ModuleInstantiation { public: IfElseModuleInstantiation() : ModuleInstantiation("if") { } virtual ~IfElseModuleInstantiation(); - std::vector<AbstractNode*> evaluateElseChildren(const Context *ctx = NULL) const; + std::vector<AbstractNode*> evaluateElseChildren(const Context *evalctx) const; std::vector<ModuleInstantiation*> else_children; }; @@ -52,7 +54,7 @@ class AbstractModule { public: virtual ~AbstractModule(); - virtual class AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; + virtual class AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst, const class EvalContext *evalctx = NULL) const; virtual std::string dump(const std::string &indent, const std::string &name) const; }; @@ -61,7 +63,11 @@ class Module : public AbstractModule public: Module() : is_handling_dependencies(false) { } virtual ~Module(); - virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; + + void setModulePath(const std::string &path) { this->path = path; } + const std::string &modulePath() const { return this->path; } + + virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const; virtual std::string dump(const std::string &indent, const std::string &name) const; void addChild(ModuleInstantiation *ch) { this->children.push_back(ch); } @@ -75,8 +81,8 @@ public: bool handleDependencies(); std::list<std::string> assignments_var; - typedef boost::unordered_map<std::string, Expression*> AssignmentContainer; - AssignmentContainer assignments; + typedef boost::unordered_map<std::string, Expression*> AssignmentMap; + AssignmentMap assignments; typedef boost::unordered_map<std::string, class AbstractFunction*> FunctionContainer; FunctionContainer functions; @@ -85,12 +91,12 @@ public: std::vector<ModuleInstantiation*> children; - std::vector<std::string> argnames; - std::vector<Expression*> argexpr; + std::vector<Assignment> definition_arguments; protected: private: + std::string path; }; #endif |