diff --git a/c-tests/loop-comma.c b/c-tests/loop-comma.c index 8c089e6..591149c 100644 --- a/c-tests/loop-comma.c +++ b/c-tests/loop-comma.c @@ -1,10 +1,10 @@ int main(void) { - int i = 0; - int j = 0; + int i = 123; + int j = 456; int k = 0; - for (i = 0; i < 2; i++, j++) { + for (i = 0, j = 0; i < 2; i++, j++) { k += 2; } diff --git a/parse.c b/parse.c index c2cb0bf..ca35830 100644 --- a/parse.c +++ b/parse.c @@ -495,8 +495,18 @@ void ParseFor(struct ParseState *Parser) if (LexGetToken(Parser, NULL, true) != TokenOpenBracket) ProgramFail(Parser, "'(' expected"); - if (ParseStatement(Parser, true) != ParseResultOk) - ProgramFail(Parser, "statement expected"); + if (LexGetToken(Parser, NULL, false) != TokenSemicolon) { + if (ParseStatement(Parser, false) != ParseResultOk) + ProgramFail(Parser, "statement expected"); + while (LexGetToken(Parser, NULL, false) == TokenComma) { + LexGetToken(Parser, NULL, true); + if (ParseStatement(Parser, false) != ParseResultOk) + ProgramFail(Parser, "statement expected"); + } + } + + if (LexGetToken(Parser, NULL, true) != TokenSemicolon) + ProgramFail(Parser, "';' expected"); ParserCopyPos(&PreConditional, Parser); if (LexGetToken(Parser, NULL, false) == TokenSemicolon)