From kde-commits Mon Feb 12 21:56:19 2007 From: Harri Porten Date: Mon, 12 Feb 2007 21:56:19 +0000 To: kde-commits Subject: branches/KDE/3.5/kdelibs/kjs Message-Id: <1171317379.910143.30217.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=117131739719263 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,