]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Derive ProgramCompiler::DeclarationCombiner from BlockModifier
[libs/gl.git] / source / programcompiler.cpp
index c54a33d6b6fbf0147fe21dd069db9f391d42cc16..c35fa275c2b1bbadbcfbfb8f113cf68d165d4a8a 100644 (file)
@@ -230,6 +230,38 @@ void ProgramCompiler::Visitor::apply(Stage &s)
 }
 
 
+ProgramCompiler::BlockModifier::BlockModifier():
+       remove_node(false)
+{ }
+
+void ProgramCompiler::BlockModifier::flatten_block(Block &block)
+{
+       insert_nodes.insert(insert_nodes.end(), block.body.begin(), block.body.end());
+       remove_node = true;
+}
+
+void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<RefPtr<Node> >::iterator &i)
+{
+       block.body.insert(i, insert_nodes.begin(), insert_nodes.end());
+       insert_nodes.clear();
+
+       if(remove_node)
+               block.body.erase(i++);
+       else
+               ++i;
+       remove_node = false;
+}
+
+void ProgramCompiler::BlockModifier::visit(Block &block)
+{
+       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       {
+               (*i)->visit(*this);
+               apply_and_increment(block, i);
+       }
+}
+
+
 ProgramCompiler::Formatter::Formatter():
        indent(0),
        parameter_list(false),
@@ -496,8 +528,7 @@ void ProgramCompiler::Formatter::visit(Jump &jump)
 
 
 ProgramCompiler::DeclarationCombiner::DeclarationCombiner():
-       toplevel(true),
-       remove_node(false)
+       toplevel(true)
 { }
 
 void ProgramCompiler::DeclarationCombiner::visit(Block &block)
@@ -506,15 +537,7 @@ void ProgramCompiler::DeclarationCombiner::visit(Block &block)
                return;
 
        SetForScope<bool> set(toplevel, false);
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
-       {
-               remove_node = false;
-               (*i)->visit(*this);
-               if(remove_node)
-                       block.body.erase(i++);
-               else
-                       ++i;
-       }
+       BlockModifier::visit(block);
 }
 
 void ProgramCompiler::DeclarationCombiner::visit(FunctionDeclaration &func)
@@ -714,38 +737,6 @@ void ProgramCompiler::FunctionResolver::visit(FunctionDeclaration &func)
 }
 
 
-ProgramCompiler::BlockModifier::BlockModifier():
-       remove_node(false)
-{ }
-
-void ProgramCompiler::BlockModifier::flatten_block(Block &block)
-{
-       insert_nodes.insert(insert_nodes.end(), block.body.begin(), block.body.end());
-       remove_node = true;
-}
-
-void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<RefPtr<Node> >::iterator &i)
-{
-       block.body.insert(i, insert_nodes.begin(), insert_nodes.end());
-       insert_nodes.clear();
-
-       if(remove_node)
-               block.body.erase(i++);
-       else
-               ++i;
-       remove_node = false;
-}
-
-void ProgramCompiler::BlockModifier::visit(Block &block)
-{
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
-       {
-               (*i)->visit(*this);
-               apply_and_increment(block, i);
-       }
-}
-
-
 ProgramCompiler::InterfaceGenerator::InterfaceGenerator():
        scope_level(0)
 { }