Fixed a problem with do..while() and breack/continue.

git-svn-id: http://picoc.googlecode.com/svn/trunk@510 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
zik.saleeba 2011-02-11 06:32:52 +00:00
parent b4f882354d
commit 4da8196e9d

View file

@ -547,6 +547,7 @@ enum ParseResult ParseStatement(struct ParseState *Parser, int CheckTrailingSemi
case TokenDo:
{
struct ParseState PreStatement;
enum RunMode PreMode = Parser->Mode;
ParserCopyPos(&PreStatement, Parser);
do
{
@ -555,7 +556,7 @@ enum ParseResult ParseStatement(struct ParseState *Parser, int CheckTrailingSemi
ProgramFail(Parser, "statement expected");
if (Parser->Mode == RunModeContinue)
Parser->Mode = RunModeRun;
Parser->Mode = PreMode;
if (LexGetToken(Parser, NULL, TRUE) != TokenWhile)
ProgramFail(Parser, "'while' expected");
@ -570,7 +571,7 @@ enum ParseResult ParseStatement(struct ParseState *Parser, int CheckTrailingSemi
} while (Condition && Parser->Mode == RunModeRun);
if (Parser->Mode == RunModeBreak)
Parser->Mode = RunModeRun;
Parser->Mode = PreMode;
}
break;