]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Make all components of a for loop optional
[libs/gl.git] / source / programcompiler.cpp
index 1f014f72c654d3e678f706cfff28f9d5173407f4..88ec6e59d88054480457be91cd0da9e14f201f02 100644 (file)
@@ -35,8 +35,6 @@ namespace GL {
 
 using namespace ProgramSyntax;
 
-// XXX For some reason global declarations are emitted for otherwise undeclared local variables
-
 ProgramCompiler::ProgramCompiler():
        resources(0),
        module(0)
@@ -546,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);
 }