Fixes crash during the second run of a failing recursive module

master
Marius Kintel 2014-11-24 20:44:39 -05:00
parent f1b29e1db9
commit 3612db6a2f
1 changed files with 1 additions and 21 deletions

View File

@ -42,33 +42,13 @@ std::string LocalScope::dump(const std::string &indent) const
return dump.str();
}
// FIXME: Two parameters here is a hack. Rather have separate types of scopes, or check the type of the first parameter. Note const vs. non-const
std::vector<AbstractNode*> LocalScope::instantiateChildren(const Context *evalctx, FileContext *filectx) const
{
Context *c = filectx;
if (!c) {
c = new Context(evalctx);
// FIXME: If we make c a ModuleContext, child() doesn't work anymore
// c->functions_p = &this->functions;
// c->modules_p = &this->modules;
// Uncommenting the following would allow assignments in local scopes,
// but would cause duplicate evaluation of module scopes
// BOOST_FOREACH (const Assignment &ass, this->assignments) {
// c->set_variable(ass.first, ass.second->evaluate(c));
// }
}
std::vector<AbstractNode*> childnodes;
BOOST_FOREACH (ModuleInstantiation *modinst, this->children) {
AbstractNode *node = modinst->evaluate(c);
AbstractNode *node = modinst->evaluate(filectx ? filectx : evalctx);
if (node) childnodes.push_back(node);
}
if (c != filectx) delete c;
return childnodes;
}