Added support for commas in for loop update statement
This commit is contained in:
parent
d04337125e
commit
3979f563aa
12
c-tests/loop-comma.c
Normal file
12
c-tests/loop-comma.c
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
int j = 0;
|
||||||
|
int k = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < 2; i++, j++) {
|
||||||
|
k += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return k - (j * 2);
|
||||||
|
}
|
8
parse.c
8
parse.c
|
@ -509,6 +509,10 @@ void ParseFor(struct ParseState *Parser)
|
||||||
|
|
||||||
ParserCopyPos(&PreIncrement, Parser);
|
ParserCopyPos(&PreIncrement, Parser);
|
||||||
ParseStatementMaybeRun(Parser, false, false);
|
ParseStatementMaybeRun(Parser, false, false);
|
||||||
|
while (LexGetToken(Parser, NULL, false) == TokenComma) {
|
||||||
|
LexGetToken(Parser, NULL, true);
|
||||||
|
ParseStatementMaybeRun(Parser, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (LexGetToken(Parser, NULL, true) != TokenCloseBracket)
|
if (LexGetToken(Parser, NULL, true) != TokenCloseBracket)
|
||||||
ProgramFail(Parser, "')' expected");
|
ProgramFail(Parser, "')' expected");
|
||||||
|
@ -525,6 +529,10 @@ void ParseFor(struct ParseState *Parser)
|
||||||
while (Condition && Parser->Mode == RunModeRun) {
|
while (Condition && Parser->Mode == RunModeRun) {
|
||||||
ParserCopyPos(Parser, &PreIncrement);
|
ParserCopyPos(Parser, &PreIncrement);
|
||||||
ParseStatement(Parser, false);
|
ParseStatement(Parser, false);
|
||||||
|
while (LexGetToken(Parser, NULL, false) == TokenComma) {
|
||||||
|
LexGetToken(Parser, NULL, true);
|
||||||
|
ParseStatement(Parser, false);
|
||||||
|
}
|
||||||
|
|
||||||
ParserCopyPos(Parser, &PreConditional);
|
ParserCopyPos(Parser, &PreConditional);
|
||||||
if (LexGetToken(Parser, NULL, false) == TokenSemicolon)
|
if (LexGetToken(Parser, NULL, false) == TokenSemicolon)
|
||||||
|
|
Loading…
Reference in a new issue