X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramparser.cpp;h=c02adb325c25eaba6d4df7f31d9b8963506a5cd4;hp=b607e1cfb8f063abfec2127b7c57247809677a81;hb=48453f59ec93d9b8f70a17d3034e5ca3e4780ecd;hpb=944deb38084e5e5bc82182faab2db2be156b971c diff --git a/source/programparser.cpp b/source/programparser.cpp index b607e1cf..c02adb32 100644 --- a/source/programparser.cpp +++ b/source/programparser.cpp @@ -484,7 +484,9 @@ RefPtr ProgramParser::parse_statement() if(token=="if") return parse_conditional(); else if(token=="for") - return parse_iteration(); + return parse_for(); + else if(token=="while") + return parse_while(); else if(token=="passthrough") return parse_passthrough(); else if(token=="return") @@ -843,7 +845,7 @@ RefPtr ProgramParser::parse_conditional() return cond; } -RefPtr ProgramParser::parse_iteration() +RefPtr ProgramParser::parse_for() { expect("for"); expect("("); @@ -873,6 +875,19 @@ RefPtr ProgramParser::parse_iteration() return loop; } +RefPtr ProgramParser::parse_while() +{ + expect("while"); + expect("("); + RefPtr loop = new Iteration; + loop->condition = parse_expression(); + expect(")"); + + parse_block(loop->body, false); + + return loop; +} + RefPtr ProgramParser::parse_passthrough() { expect("passthrough");