diff options
author | Marius Kintel <marius@kintel.net> | 2012-09-02 17:17:14 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2012-09-02 17:17:14 (GMT) |
commit | 502ecbb6caa900520409bf85ad3ed1754248492d (patch) | |
tree | e58bf1ad80a20567cc8433fe4ad956e3d40559a0 /src | |
parent | aab3c36f90977c6a20253b1742b741eb22b8fd1c (diff) |
Block recursion on circular or recursive inclusions. Fixes #187
Diffstat (limited to 'src')
-rw-r--r-- | src/module.cc | 5 | ||||
-rw-r--r-- | src/module.h | 3 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/module.cc b/src/module.cc index fc849ff..cfd73cc 100644 --- a/src/module.cc +++ b/src/module.cc @@ -218,6 +218,9 @@ void Module::registerInclude(const std::string &filename) */ bool Module::handleDependencies() { + if (this->is_handling_dependencies) return false; + this->is_handling_dependencies = true; + bool changed = false; // Iterating manually since we want to modify the container while iterating Module::ModuleContainer::iterator iter = this->usedlibs.begin(); @@ -236,5 +239,7 @@ bool Module::handleDependencies() this->usedlibs.erase(curr); } } + + this->is_handling_dependencies = false; return changed; } diff --git a/src/module.h b/src/module.h index cd25287..879d249 100644 --- a/src/module.h +++ b/src/module.h @@ -59,7 +59,7 @@ public: class Module : public AbstractModule { public: - Module() { } + Module() : is_handling_dependencies(false) { } virtual ~Module(); virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; virtual std::string dump(const std::string &indent, const std::string &name) const; @@ -71,6 +71,7 @@ public: void registerInclude(const std::string &filename); typedef boost::unordered_map<std::string, time_t> IncludeContainer; IncludeContainer includes; + bool is_handling_dependencies; bool handleDependencies(); std::vector<std::string> assignments_var; |