]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Allow removing the initialization statement of a for loop
[libs/gl.git] / source / programcompiler.cpp
index a3691b112fd4fc22d8121f04c4d37024037f8470..2bf57c6ad8fe4788ad9417b0f73123eb2351a0b2 100644 (file)
@@ -544,12 +544,22 @@ void ProgramCompiler::Formatter::visit(Conditional &cond)
 void ProgramCompiler::Formatter::visit(Iteration &iter)
 {
        formatted += "for(";
-       iter.init_statement->visit(*this);
-       formatted += ' ';
-       iter.condition->visit(*this);
-       formatted += "; ";
-       iter.loop_expression->visit(*this);
-       formatted += ")\n";
+       if(iter.init_statement)
+               iter.init_statement->visit(*this);
+       else
+               formatted += ';';
+       if(iter.condition)
+       {
+               formatted += ' ';
+               iter.condition->visit(*this);
+       }
+       formatted += ';';
+       if(iter.loop_expression)
+       {
+               formatted += ' ';
+               iter.loop_expression->visit(*this);
+       }
+       formatted += ')';
        iter.body.visit(*this);
 }
 
@@ -1648,6 +1658,12 @@ void ProgramCompiler::NodeRemover::visit(VariableDeclaration &var)
                var.init_expression = 0;
 }
 
+void ProgramCompiler::NodeRemover::visit(Iteration &iter)
+{
+       if(to_remove.count(iter.init_statement.get()))
+               iter.init_statement = 0;
+}
+
 
 void ProgramCompiler::PrecisionRemover::visit(Precision &)
 {