[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/KDE/3.5/kdelibs/kjs
From: Harri Porten <porten () kde ! org>
Date: 2007-02-12 21:56:19
Message-ID: 1171317379.910143.30217.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 633009 by porten:
backport trunk fix for my bug report #104478 about
unicode escapes in identifiers
M +22 -4 lexer.cpp
M +2 -0 lexer.h
--- branches/KDE/3.5/kdelibs/kjs/lexer.cpp #633008:633009
@@ -222,6 +222,8 @@
} else if (isIdentLetter(current)) {
record16(current);
state = InIdentifier;
+ } else if (current == '\\') {
+ state = InIdentifierUnicodeEscapeStart;
} else if (current == '0') {
record8(current);
state = InNum0;
@@ -346,11 +348,12 @@
}
break;
case InIdentifier:
- if (isIdentLetter(current) || isDecimalDigit(current)) {
+ if (isIdentLetter(current) || isDecimalDigit(current))
record16(current);
- break;
- }
- setDone(Identifier);
+ else if (current == '\\')
+ state = InIdentifierUnicodeEscapeStart;
+ else
+ setDone(Identifier);
break;
case InNum0:
if (current == 'x' || current == 'X') {
@@ -425,6 +428,21 @@
} else
setDone(Number);
break;
+ case InIdentifierUnicodeEscapeStart:
+ if (current == 'u')
+ state = InIdentifierUnicodeEscape;
+ else
+ setDone(Bad);
+ break;
+ case InIdentifierUnicodeEscape:
+ if (isHexDigit(current) && isHexDigit(next1) && isHexDigit(next2) && isHexDigit(next3)) {
+ record16(convertUnicode(current, next1, next2, next3));
+ shift(3);
+ state = InIdentifier;
+ } else {
+ setDone(Bad);
+ }
+ break;
default:
assert(!"Unhandled state in switch statement");
}
--- branches/KDE/3.5/kdelibs/kjs/lexer.h #633008:633009
@@ -48,6 +48,8 @@
enum State { Start,
Identifier,
InIdentifier,
+ InIdentifierUnicodeEscapeStart,
+ InIdentifierUnicodeEscape,
InSingleLineComment,
InMultiLineComment,
InNum,
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic