Fixed a parser bug with token checking
git-svn-id: http://picoc.googlecode.com/svn/trunk@83 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
parent
fdad9f8d30
commit
2f5523f400
16
parse.c
16
parse.c
|
@ -590,12 +590,12 @@ int ParseStatement(struct ParseState *Parser)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TokenIf:
|
case TokenIf:
|
||||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenOpenBracket)
|
if (LexGetToken(Parser, NULL, TRUE) != TokenOpenBracket)
|
||||||
ProgramFail(Parser, "'(' expected");
|
ProgramFail(Parser, "'(' expected");
|
||||||
|
|
||||||
Condition = ParseIntExpression(Parser);
|
Condition = ParseIntExpression(Parser);
|
||||||
|
|
||||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenCloseBracket)
|
if (LexGetToken(Parser, NULL, TRUE) != TokenCloseBracket)
|
||||||
ProgramFail(Parser, "')' expected");
|
ProgramFail(Parser, "')' expected");
|
||||||
|
|
||||||
if (!ParseStatementMaybeRun(Parser, Condition))
|
if (!ParseStatementMaybeRun(Parser, Condition))
|
||||||
|
@ -685,18 +685,18 @@ int ParseStatement(struct ParseState *Parser)
|
||||||
}
|
}
|
||||||
|
|
||||||
case TokenSwitch:
|
case TokenSwitch:
|
||||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenOpenBracket)
|
if (LexGetToken(Parser, NULL, TRUE) != TokenOpenBracket)
|
||||||
ProgramFail(Parser, "'(' expected");
|
ProgramFail(Parser, "'(' expected");
|
||||||
|
|
||||||
Condition = ParseIntExpression(Parser);
|
Condition = ParseIntExpression(Parser);
|
||||||
|
|
||||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenCloseBracket)
|
if (LexGetToken(Parser, NULL, TRUE) != TokenCloseBracket)
|
||||||
ProgramFail(Parser, "')' expected");
|
ProgramFail(Parser, "')' expected");
|
||||||
|
|
||||||
if (!LexGetToken(Parser, NULL, FALSE) != TokenLeftBrace)
|
if (LexGetToken(Parser, NULL, FALSE) != TokenLeftBrace)
|
||||||
ProgramFail(Parser, "'{' expected");
|
ProgramFail(Parser, "'{' expected");
|
||||||
|
|
||||||
{
|
{ /* new block so we can store parser state */
|
||||||
enum RunMode OldMode = Parser->Mode;
|
enum RunMode OldMode = Parser->Mode;
|
||||||
int OldSearchLabel = Parser->SearchLabel;
|
int OldSearchLabel = Parser->SearchLabel;
|
||||||
Parser->Mode = RunModeCaseSearch;
|
Parser->Mode = RunModeCaseSearch;
|
||||||
|
@ -712,7 +712,7 @@ int ParseStatement(struct ParseState *Parser)
|
||||||
|
|
||||||
case TokenCase:
|
case TokenCase:
|
||||||
Condition = ParseIntExpression(Parser);
|
Condition = ParseIntExpression(Parser);
|
||||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenColon)
|
if (LexGetToken(Parser, NULL, TRUE) != TokenColon)
|
||||||
ProgramFail(Parser, "':' expected");
|
ProgramFail(Parser, "':' expected");
|
||||||
|
|
||||||
if (Parser->Mode == RunModeCaseSearch && Condition == Parser->SearchLabel)
|
if (Parser->Mode == RunModeCaseSearch && Condition == Parser->SearchLabel)
|
||||||
|
@ -720,7 +720,7 @@ int ParseStatement(struct ParseState *Parser)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TokenDefault:
|
case TokenDefault:
|
||||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenColon)
|
if (LexGetToken(Parser, NULL, TRUE) != TokenColon)
|
||||||
ProgramFail(Parser, "':' expected");
|
ProgramFail(Parser, "':' expected");
|
||||||
|
|
||||||
if (Parser->Mode == RunModeCaseSearch)
|
if (Parser->Mode == RunModeCaseSearch)
|
||||||
|
|
Loading…
Reference in a new issue