SVN commit 636290 by porten: backport from trunk: keywords can't contain escape sequences, keywords can be escaped. test in parse.js. M +6 -3 lexer.cpp M +2 -0 lexer.h --- branches/KDE/3.5/kdelibs/kjs/lexer.cpp #636289:636290 @@ -221,7 +221,7 @@ stringType = current; } else if (isIdentLetter(current)) { record16(current); - state = InIdentifier; + state = InIdentifierOrKeyword; } else if (current == '\\') { state = InIdentifierUnicodeEscapeStart; } else if (current == '0') { @@ -347,13 +347,14 @@ shift(1); } break; + case InIdentifierOrKeyword: case InIdentifier: if (isIdentLetter(current) || isDecimalDigit(current)) record16(current); else if (current == '\\') state = InIdentifierUnicodeEscapeStart; else - setDone(Identifier); + setDone(state == InIdentifierOrKeyword ? IdentifierOrKeyword : Identifier); break; case InNum0: if (current == 'x' || current == 'X') { @@ -508,6 +509,7 @@ printf("(Other)\n"); break; case Identifier: + case IdentifierOrKeyword: printf("(Identifier)/(Keyword)\n"); break; case String: @@ -538,8 +540,9 @@ delimited = true; } break; + case IdentifierOrKeyword: + if ((token = Lookup::find(&mainTable, buffer16, pos16)) < 0) { case Identifier: - if ((token = Lookup::find(&mainTable, buffer16, pos16)) < 0) { // Lookup for keyword failed, means this is an identifier // Apply anonymous-function hack below (eat the identifier) if (convertNextIdentifier) { --- branches/KDE/3.5/kdelibs/kjs/lexer.h #636289:636290 @@ -46,7 +46,9 @@ bool prevTerminator() const { return terminator; } enum State { Start, + IdentifierOrKeyword, Identifier, + InIdentifierOrKeyword, InIdentifier, InIdentifierUnicodeEscapeStart, InIdentifierUnicodeEscape,