changeset 46:e0dbd4722f74

- Scanning character literals correctly now. - Fix: increment p in scanEscapeSequence().
author aziz
date Tue, 26 Jun 2007 21:06:01 +0000
parents cc84b9ca9d0a
children 8aa37a78937b
files trunk/src/Lexer.d trunk/src/Token.d
diffstat 2 files changed, 19 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Lexer.d	Tue Jun 26 19:43:04 2007 +0000
+++ b/trunk/src/Lexer.d	Tue Jun 26 21:06:01 2007 +0000
@@ -691,32 +691,35 @@
   {
     assert(*p == '\'');
     MID id = MID.UnterminatedCharacterLiteral;
-    uint c = *++p;
-    switch(c)
+    ++p;
+    switch (*p)
     {
     case '\\':
       ++p;
+      t.dchar_ = scanEscapeSequence();
       break;
-    case 0, _Z_, '\n', '\r':
-      goto Lerr;
     case '\'':
+      ++p;
       id = MID.EmptyCharacterLiteral;
+    case '\n', '\r', 0, _Z_:
       goto Lerr;
     default:
+      uint c = *p;
       if (c & 128)
       {
         c = decodeUTF();
         if (c == LSd || c == PSd)
           goto Lerr;
-        t.chr = c;
       }
+      t.dchar_ = c;
+      ++p;
     }
 
-    ++p;
-    if (*p != '\'')
-    Lerr:
+    if (*p == '\'')
+      ++p;
+    else
+  Lerr:
       error(id);
-    ++p;
     t.type = TOK.Character;
     t.end = p;
   }
@@ -868,8 +871,10 @@
   dchar scanEscapeSequence()
   {
     uint c = char2ev(*p);
-    if (c)
+    if (c) {
+      ++p;
       return c;
+    }
     uint digits = 2;
 
     switch (*p)
@@ -930,8 +935,10 @@
         {
           if (isalnum(*++p))
             continue;
-          if (*p == ';')
+          if (*p == ';') {
+            ++p;
             break;
+          }
           else {
             error(MID.UnterminatedHTMLEntity);
             break;
--- a/trunk/src/Token.d	Tue Jun 26 19:43:04 2007 +0000
+++ b/trunk/src/Token.d	Tue Jun 26 21:06:01 2007 +0000
@@ -101,7 +101,7 @@
       string str;
       char pf;
     }
-    dchar chr;
+    dchar dchar_;
     uint _uint;
     float f;
     double d;