diff options
author | Marius Kintel <marius@kintel.net> | 2013-05-13 20:27:17 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2013-05-13 20:27:17 (GMT) |
commit | ee6f149dd0d9bcef0cb94cef154ed32f308c23e1 (patch) | |
tree | 28542d1aa602d31ffbced210bd881249242f5c5f /src/modcontext.cc | |
parent | 8c532d525203d6cd0fc8ab200a4dea1dccd03dd6 (diff) |
bugfix: Fixed recursion crash (#346)
Diffstat (limited to 'src/modcontext.cc')
-rw-r--r-- | src/modcontext.cc | 26 |
1 files changed, 0 insertions, 26 deletions
diff --git a/src/modcontext.cc b/src/modcontext.cc index 44c2002..3879811 100644 --- a/src/modcontext.cc +++ b/src/modcontext.cc @@ -27,20 +27,6 @@ void ModuleContext::initializeModule(const class Module &module) } } -class RecursionGuard -{ -public: - RecursionGuard(const ModuleContext &c, const std::string &name) : c(c), name(name) { - c.recursioncount[name]++; - } - ~RecursionGuard() { if (--c.recursioncount[name] == 0) c.recursioncount.erase(name); } - bool recursion_detected() const { return (c.recursioncount[name] > 100); } -private: - const ModuleContext &c; - const std::string &name; -}; - - /*! Only used to initialize builtins for the top-level root context */ @@ -81,12 +67,6 @@ const AbstractModule *ModuleContext::findLocalModule(const std::string &name) co Value ModuleContext::evaluate_function(const std::string &name, const EvalContext *evalctx) const { - RecursionGuard g(*this, name); - if (g.recursion_detected()) { - PRINTB("Recursion detected calling function '%s'", name); - return Value(); - } - const AbstractFunction *foundf = findLocalFunction(name); if (foundf) return foundf->evaluate(this, evalctx); @@ -141,12 +121,6 @@ FileContext::FileContext(const class FileModule &module, const Context *parent) Value FileContext::evaluate_function(const std::string &name, const EvalContext *evalctx) const { - RecursionGuard g(*this, name); - if (g.recursion_detected()) { - PRINTB("Recursion detected calling function '%s'", name); - return Value(); - } - const AbstractFunction *foundf = findLocalFunction(name); if (foundf) return foundf->evaluate(this, evalctx); |