changeset 41:2b7be1d67d4d

- Optimized scanner of block comments.
author aziz
date Tue, 26 Jun 2007 12:03:00 +0000
parents 9d5ceb0f8be9
children c6a9974a6e3c
files trunk/src/Lexer.d
diffstat 1 files changed, 25 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Lexer.d	Tue Jun 26 10:20:00 2007 +0000
+++ b/trunk/src/Lexer.d	Tue Jun 26 12:03:00 2007 +0000
@@ -306,9 +306,9 @@
             }
           }
         case '*':
+          c = *++p;
           while (1)
           {
-            c = *++p;
             switch (c)
             {
             case '\r':
@@ -316,28 +316,35 @@
                 ++p;
             case '\n':
               ++loc;
+              c = *++p;
               continue;
-            case '*':
-              if (p[1] == '/')
-              {
-                p += 2;
-            LreturnBC:
-                t.type = TOK.Comment;
-                t.end = p;
-                return;
-              }
-              break;
-            case LS[0]:
-              if (p[1] == LS[1] && (p[2] == LS[2] || p[2] == PS[2])) {
-                p += 2;
-                ++loc;
-              }
-              break;
             case 0, _Z_:
               error(MID.UnterminatedBlockComment);
               goto LreturnBC;
             default:
             }
+
+            c <<= 8;
+            c |= *++p;
+            switch (c)
+            {
+            case 0x2A2F: // */
+              ++p;
+            LreturnBC:
+              t.type = TOK.Comment;
+              t.end = p;
+              return;
+            case 0xE280: // LS[0..1] || PS[0..1]
+              if (p[1] == LS[2] || p[1] == PS[2])
+              {
+                ++loc;
+                c = *(p += 2);
+                continue;
+              }
+            default:
+              c &= char.max;
+              continue;
+            }
           }
           assert(0);
         case '/':
@@ -968,4 +975,4 @@
 
   foreach (i, t; tokens)
     assert(t.span == toks[i], std.string.format("Lexed '%s' but expected '%s'", t.span, toks[i]));
-}
\ No newline at end of file
+}