]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Upgrade NodePtr to RefPtr
[libs/gl.git] / source / programcompiler.cpp
index a68c8b96d7c9c40dc94a3bde6211f867652cd2db..86ea8da93d7e6866590a563c150555393903cafe 100644 (file)
@@ -184,8 +184,8 @@ bool ProgramCompiler::optimize(Stage &stage)
 
 void ProgramCompiler::inject_block(Block &target, const Block &source)
 {
-       list<NodePtr<Node> >::iterator insert_point = target.body.begin();
-       for(list<NodePtr<Node> >::const_iterator i=source.body.begin(); i!=source.body.end(); ++i)
+       list<RefPtr<Node> >::iterator insert_point = target.body.begin();
+       for(list<RefPtr<Node> >::const_iterator i=source.body.begin(); i!=source.body.end(); ++i)
                target.body.insert(insert_point, (*i)->clone());
 }
 
@@ -281,7 +281,7 @@ void ProgramCompiler::Formatter::visit(Assignment &assign)
 void ProgramCompiler::Formatter::visit(FunctionCall &call)
 {
        formatted += format("%s(", call.name);
-       for(vector<NodePtr<Expression> >::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
+       for(vector<RefPtr<Expression> >::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
        {
                if(i!=call.arguments.begin())
                        formatted += ", ";
@@ -308,7 +308,7 @@ void ProgramCompiler::Formatter::visit(Block &block)
 
        SetForScope<unsigned> set(indent, indent+(indent>0 || use_braces));
        string spaces(indent*2, ' ');
-       for(list<NodePtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
+       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
        {
                if(i!=block.body.begin())
                        formatted += '\n';
@@ -394,7 +394,7 @@ void ProgramCompiler::Formatter::visit(InterfaceBlock &iface)
 void ProgramCompiler::Formatter::visit(FunctionDeclaration &func)
 {
        formatted += format("%s %s(", func.return_type, func.name);
-       for(vector<NodePtr<VariableDeclaration> >::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
+       for(vector<RefPtr<VariableDeclaration> >::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
        {
                if(i!=func.parameters.begin())
                        formatted += ", ";
@@ -462,7 +462,7 @@ void ProgramCompiler::DeclarationCombiner::visit(Block &block)
                return;
 
        SetForScope<bool> set(toplevel, false);
-       for(list<NodePtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                remove_node = false;
                (*i)->visit(*this);
@@ -676,15 +676,13 @@ ProgramCompiler::BlockModifier::BlockModifier():
 
 void ProgramCompiler::BlockModifier::flatten_block(Block &block)
 {
-       for(list<NodePtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); ++i)
-               insert_nodes.push_back((*i)->clone());
+       insert_nodes.insert(insert_nodes.end(), block.body.begin(), block.body.end());
        remove_node = true;
 }
 
-void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<NodePtr<Node> >::iterator &i)
+void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<RefPtr<Node> >::iterator &i)
 {
-       for(list<Node *>::iterator j=insert_nodes.begin(); j!=insert_nodes.end(); ++j)
-               block.body.insert(i, *j);
+       block.body.insert(i, insert_nodes.begin(), insert_nodes.end());
        insert_nodes.clear();
 
        if(remove_node)
@@ -696,7 +694,7 @@ void ProgramCompiler::BlockModifier::apply_and_increment(Block &block, list<Node
 
 void ProgramCompiler::BlockModifier::visit(Block &block)
 {
-       for(list<NodePtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                (*i)->visit(*this);
                apply_and_increment(block, i);
@@ -730,15 +728,15 @@ void ProgramCompiler::InterfaceGenerator::apply(Stage &s)
 void ProgramCompiler::InterfaceGenerator::visit(Block &block)
 {
        SetForScope<unsigned> set(scope_level, scope_level+1);
-       for(list<NodePtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                (*i)->visit(*this);
 
                if(scope_level==1)
                {
-                       for(map<string, VariableDeclaration *>::iterator j=iface_declarations.begin(); j!=iface_declarations.end(); ++j)
+                       for(map<string, RefPtr<VariableDeclaration> >::iterator j=iface_declarations.begin(); j!=iface_declarations.end(); ++j)
                        {
-                               list<NodePtr<Node> >::iterator k = block.body.insert(i, j->second);
+                               list<RefPtr<Node> >::iterator k = block.body.insert(i, j->second);
                                (*k)->visit(*this);
                        }
                        iface_declarations.clear();
@@ -847,9 +845,9 @@ void ProgramCompiler::InterfaceGenerator::visit(Passthrough &pass)
 
        for(map<string, VariableDeclaration *>::const_iterator i=stage->in_variables.begin(); i!=stage->in_variables.end(); ++i)
                pass_vars.push_back(i->second);
-       for(map<string, VariableDeclaration *>::const_iterator i=iface_declarations.begin(); i!=iface_declarations.end(); ++i)
+       for(map<string, RefPtr<VariableDeclaration> >::const_iterator i=iface_declarations.begin(); i!=iface_declarations.end(); ++i)
                if(i->second->interface=="in")
-                       pass_vars.push_back(i->second);
+                       pass_vars.push_back(i->second.get());
 
        if(stage->previous)
        {
@@ -1032,7 +1030,7 @@ void ProgramCompiler::ConstantConditionEliminator::visit(Assignment &assign)
 void ProgramCompiler::ConstantConditionEliminator::visit(VariableDeclaration &var)
 {
        if(var.constant || scope_level>1)
-               variable_values[&var] = &*var.init_expression;
+               variable_values[&var] = var.init_expression.get();
 }
 
 void ProgramCompiler::ConstantConditionEliminator::visit(Conditional &cond)
@@ -1180,7 +1178,7 @@ void ProgramCompiler::UnusedVariableLocator::visit(FunctionDeclaration &func)
 {
        assignments.push_back(BlockAssignmentMap());
 
-       for(vector<NodePtr<VariableDeclaration> >::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
+       for(vector<RefPtr<VariableDeclaration> >::iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
                (*i)->visit(*this);
        func.body.visit(*this);
 
@@ -1286,10 +1284,10 @@ ProgramCompiler::NodeRemover::NodeRemover(const set<Node *> &r):
 
 void ProgramCompiler::NodeRemover::visit(Block &block)
 {
-       for(list<NodePtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
+       for(list<RefPtr<Node> >::iterator i=block.body.begin(); i!=block.body.end(); )
        {
                (*i)->visit(*this);
-               if(to_remove.count(&**i))
+               if(to_remove.count(i->get()))
                        block.body.erase(i++);
                else
                        ++i;
@@ -1306,7 +1304,7 @@ void ProgramCompiler::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))
+       else if(var.init_expression && to_remove.count(var.init_expression.get()))
                var.init_expression = 0;
 }
 
@@ -1347,7 +1345,7 @@ void ProgramCompiler::LegacyConverter::visit(FunctionCall &call)
 {
        if(call.name=="texture" && !call.declaration && !check_version(Version(1, 30)))
        {
-               vector<NodePtr<Expression> >::iterator i = call.arguments.begin();
+               vector<RefPtr<Expression> >::iterator i = call.arguments.begin();
                if(i!=call.arguments.end())
                {
                        (*i)->visit(*this);