]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Add an intermediate node type for statements
[libs/gl.git] / source / programcompiler.cpp
index 9a3986a12b21e094824175bf0dc7b052dd2af776..ca3913cde1358656d307dc85cbcb170121b246be 100644 (file)
@@ -168,7 +168,7 @@ void ProgramCompiler::append_stage(Stage &stage)
                target = &*i;
        }
 
-       for(NodeList<Node>::iterator i=stage.content.body.begin(); i!=stage.content.body.end(); ++i)
+       for(NodeList<Statement>::iterator i=stage.content.body.begin(); i!=stage.content.body.end(); ++i)
                target->content.body.push_back(*i);
        apply<DeclarationCombiner>(*target);
 }
@@ -241,8 +241,8 @@ void ProgramCompiler::finalize(Stage &stage)
 
 void ProgramCompiler::inject_block(Block &target, const Block &source)
 {
-       list<RefPtr<Node> >::iterator insert_point = target.body.begin();
-       for(list<RefPtr<Node> >::const_iterator i=source.body.begin(); i!=source.body.end(); ++i)
+       list<RefPtr<Statement> >::iterator insert_point = target.body.begin();
+       for(list<RefPtr<Statement> >::const_iterator i=source.body.begin(); i!=source.body.end(); ++i)
                target.body.insert(insert_point, (*i)->clone());
 }
 
@@ -284,7 +284,7 @@ void ProgramCompiler::BlockModifier::flatten_block(Block &block)
        remove_node = true;
 }
 
-void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<RefPtr<Node> >::iterator &i)
+void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<RefPtr<Statement> >::iterator &i)
 {
        block.body.insert(i, insert_nodes.begin(), insert_nodes.end());
        insert_nodes.clear();
@@ -298,7 +298,7 @@ void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<RefP
 
 void ProgramCompiler::BlockModifier::visit(Block &block)
 {
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Statement> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                (*i)->visit(*this);
                apply_and_increment(block, i);
@@ -410,7 +410,7 @@ void ProgramCompiler::Formatter::visit(Block &block)
 
        SetForScope<unsigned> set(indent, indent+(indent>0 || use_braces));
        string spaces(indent*2, ' ');
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
+       for(list<RefPtr<Statement> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
        {
                if(i!=block.body.begin())
                        formatted += '\n';
@@ -865,7 +865,7 @@ void ProgramCompiler::InterfaceGenerator::apply(Stage &s)
 void ProgramCompiler::InterfaceGenerator::visit(Block &block)
 {
        SetForScope<unsigned> set(scope_level, scope_level+1);
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Statement> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                (*i)->visit(*this);
 
@@ -873,7 +873,7 @@ void ProgramCompiler::InterfaceGenerator::visit(Block &block)
                {
                        for(map<string, RefPtr<VariableDeclaration> >::iterator j=iface_declarations.begin(); j!=iface_declarations.end(); ++j)
                        {
-                               list<RefPtr<Node> >::iterator k = block.body.insert(i, j->second);
+                               list<RefPtr<Statement> >::iterator k = block.body.insert(i, j->second);
                                (*k)->visit(*this);
                        }
                        iface_declarations.clear();
@@ -1069,13 +1069,13 @@ void ProgramCompiler::DeclarationReorderer::visit(Block &block)
        if(scope_level>1)
                return Visitor::visit(block);
 
-       list<RefPtr<Node> >::iterator struct_insert_point = block.body.end();
-       list<RefPtr<Node> >::iterator variable_insert_point = block.body.end();
-       list<RefPtr<Node> >::iterator function_insert_point = block.body.end();
+       list<RefPtr<Statement> >::iterator struct_insert_point = block.body.end();
+       list<RefPtr<Statement> >::iterator variable_insert_point = block.body.end();
+       list<RefPtr<Statement> >::iterator function_insert_point = block.body.end();
        unsigned unordered_func_count = 0;
        bool ordered_any_funcs = false;
 
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Statement> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                kind = NO_DECLARATION;
                (*i)->visit(*this);
@@ -1210,7 +1210,7 @@ void ProgramCompiler::FunctionInliner::visit(Block &block)
        if(extract_result)
                --extract_result;
 
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
+       for(list<RefPtr<Statement> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
        {
                (*i)->visit(*this);
                if(extract_result)
@@ -1693,7 +1693,7 @@ ProgramCompiler::NodeRemover::NodeRemover(const set<Node *> &r):
 
 void ProgramCompiler::NodeRemover::visit(Block &block)
 {
-       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Statement> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                (*i)->visit(*this);
                if(to_remove.count(i->get()))