[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