X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramcompiler.cpp;h=fd9c50dbbb5c2879e55fb528035f7527aef126ff;hp=1f014f72c654d3e678f706cfff28f9d5173407f4;hb=944deb38084e5e5bc82182faab2db2be156b971c;hpb=aa9873652630db493b5bd9faee4117e9c30ef226 diff --git a/source/programcompiler.cpp b/source/programcompiler.cpp index 1f014f72..fd9c50db 100644 --- a/source/programcompiler.cpp +++ b/source/programcompiler.cpp @@ -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,13 +544,30 @@ 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"; - iter.body.visit(*this); + 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 += ')'; + + if(iter.body.body.empty()) + formatted += " { }"; + else + { + formatted += '\n'; + iter.body.visit(*this); + } } void ProgramCompiler::Formatter::visit(Return &ret) @@ -1650,6 +1665,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 &) {