}
-NodeRemover::NodeRemover(const set<Node *> &r):
+NodeRemover::NodeRemover():
stage(0),
- to_remove(r)
+ to_remove(0)
{ }
-void NodeRemover::apply(Stage &s)
+void NodeRemover::apply(Stage &s, const set<Node *> &tr)
{
stage = &s;
+ to_remove = &tr;
visit(s.content);
}
for(NodeList<Statement>::iterator i=block.body.begin(); i!=block.body.end(); )
{
(*i)->visit(*this);
- if(to_remove.count(i->get()))
+ if(to_remove->count(i->get()))
block.body.erase(i++);
else
++i;
void NodeRemover::visit(VariableDeclaration &var)
{
- if(to_remove.count(&var))
+ if(to_remove->count(&var))
{
stage->in_variables.erase(var.name);
stage->out_variables.erase(var.name);
if(var.linked_declaration)
var.linked_declaration->linked_declaration = 0;
}
- else if(var.init_expression && to_remove.count(var.init_expression.get()))
+ else if(var.init_expression && to_remove->count(var.init_expression.get()))
var.init_expression = 0;
}
void NodeRemover::visit(Iteration &iter)
{
- if(to_remove.count(iter.init_statement.get()))
+ if(to_remove->count(iter.init_statement.get()))
iter.init_statement = 0;
TraversingVisitor::visit(iter);
}