X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fvisitor.cpp;h=98777ae9b0541f97af5b4156a7725235d9cb24d6;hb=ff8a0248f1a3c0c1f48f670867bc9106c898c55b;hp=58d323ab540fc3be3a02c70a7c0a81dd333977b8;hpb=696a97bd7411d69953c1a9e4b5f3dfb4c1d848f1;p=libs%2Fgl.git diff --git a/source/glsl/visitor.cpp b/source/glsl/visitor.cpp index 58d323ab..98777ae9 100644 --- a/source/glsl/visitor.cpp +++ b/source/glsl/visitor.cpp @@ -114,17 +114,6 @@ void TraversingVisitor::visit(Return &ret) } -StageVisitor::StageVisitor(): - stage(0) -{ } - -void StageVisitor::apply(Stage &s) -{ - SetForScope set(stage, &s); - stage->content.visit(*this); -} - - BlockModifier::BlockModifier(): remove_node(false) { } @@ -157,16 +146,24 @@ void BlockModifier::visit(Block &block) } -NodeRemover::NodeRemover(const set &r): - to_remove(r) +NodeRemover::NodeRemover(): + stage(0), + to_remove(0) { } +void NodeRemover::apply(Stage &s, const set &tr) +{ + stage = &s; + to_remove = &tr; + visit(s.content); +} + void NodeRemover::visit(Block &block) { for(NodeList::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; @@ -175,7 +172,7 @@ void NodeRemover::visit(Block &block) 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); @@ -183,13 +180,13 @@ void NodeRemover::visit(VariableDeclaration &var) 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); }