Fixed fallthrough problem in lexer

git-svn-id: http://picoc.googlecode.com/svn/trunk@56 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
zik.saleeba 2009-02-02 23:45:34 +00:00
parent 0547bcaff0
commit 44117cde04

48
lex.c
View file

@ -243,30 +243,30 @@ enum LexToken LexScanGetToken(struct LexState *Lexer, struct Value **Value)
Lexer->Pos++; Lexer->Pos++;
switch (ThisChar) switch (ThisChar)
{ {
case '"': GotToken = LexGetStringConstant(Lexer, *Value); case '"': GotToken = LexGetStringConstant(Lexer, *Value); break;
case '\'': GotToken = LexGetCharacterConstant(Lexer, *Value); case '\'': GotToken = LexGetCharacterConstant(Lexer, *Value); break;
case '(': GotToken = TokenOpenBracket; case '(': GotToken = TokenOpenBracket; break;
case ')': GotToken = TokenCloseBracket; case ')': GotToken = TokenCloseBracket; break;
case '=': NEXTIS('=', TokenEquality, TokenAssign); case '=': NEXTIS('=', TokenEquality, TokenAssign); break;
case '+': NEXTIS3('=', TokenAddAssign, '+', TokenIncrement, TokenPlus); case '+': NEXTIS3('=', TokenAddAssign, '+', TokenIncrement, TokenPlus); break;
case '-': NEXTIS4('=', TokenSubtractAssign, '>', TokenArrow, '-', TokenDecrement, TokenMinus); case '-': NEXTIS4('=', TokenSubtractAssign, '>', TokenArrow, '-', TokenDecrement, TokenMinus); break;
case '*': GotToken = TokenAsterisk; case '*': GotToken = TokenAsterisk; break;
case '/': if (NextChar == '/' || NextChar == '*') LexSkipComment(Lexer, NextChar); else GotToken = TokenSlash; case '/': if (NextChar == '/' || NextChar == '*') LexSkipComment(Lexer, NextChar); else GotToken = TokenSlash; break;
case '<': NEXTIS('=', TokenLessEqual, TokenLessThan); case '<': NEXTIS('=', TokenLessEqual, TokenLessThan); break;
case '>': NEXTIS('=', TokenGreaterEqual, TokenGreaterThan); case '>': NEXTIS('=', TokenGreaterEqual, TokenGreaterThan); break;
case ';': GotToken = TokenSemicolon; case ';': GotToken = TokenSemicolon; break;
case '&': NEXTIS('&', TokenLogicalAnd, TokenAmpersand); case '&': NEXTIS('&', TokenLogicalAnd, TokenAmpersand); break;
case '|': NEXTIS('|', TokenLogicalOr, TokenArithmeticOr); case '|': NEXTIS('|', TokenLogicalOr, TokenArithmeticOr); break;
case '{': GotToken = TokenLeftBrace; case '{': GotToken = TokenLeftBrace; break;
case '}': GotToken = TokenRightBrace; case '}': GotToken = TokenRightBrace; break;
case '[': GotToken = TokenLeftSquareBracket; case '[': GotToken = TokenLeftSquareBracket; break;
case ']': GotToken = TokenRightSquareBracket; case ']': GotToken = TokenRightSquareBracket; break;
case '!': GotToken = TokenUnaryNot; case '!': GotToken = TokenUnaryNot; break;
case '^': GotToken = TokenArithmeticExor; case '^': GotToken = TokenArithmeticExor; break;
case '~': GotToken = TokenUnaryExor; case '~': GotToken = TokenUnaryExor; break;
case ',': GotToken = TokenComma; case ',': GotToken = TokenComma; break;
case '.': GotToken = TokenDot; case '.': GotToken = TokenDot; break;
default: LexFail(Lexer, "illegal character '%c'", ThisChar); default: LexFail(Lexer, "illegal character '%c'", ThisChar); break;
} }
} while (GotToken == TokenNone); } while (GotToken == TokenNone);