[svn] r7497: nemerle/trunk/ncc/parsing/Lexer.n

divan svnadmin at nemerle.org
Mon Feb 26 22:34:53 CET 2007


Log:
Revert previous commit due to bad performance.

Author: divan
Date: Mon Feb 26 22:34:51 2007
New Revision: 7497

Modified:
   nemerle/trunk/ncc/parsing/Lexer.n

Modified: nemerle/trunk/ncc/parsing/Lexer.n
==============================================================================
--- nemerle/trunk/ncc/parsing/Lexer.n	(original)
+++ nemerle/trunk/ncc/parsing/Lexer.n	Mon Feb 26 22:34:51 2007
@@ -357,25 +357,8 @@
   }
 
   abstract protected read_from_input () : char;
-  abstract protected peek_or_none () : option[char];
-
-  protected peek_or_white () : char
-  {
-    match (peek_or_none ())
-    {
-      | None => ' '
-      | Some (c) => c
-    }
-  }
-
-  protected peek () : char
-  {
-    match (peek_or_none ())
-    {
-      | None => '\0'
-      | Some (c) => c
-    }
-  }
+  abstract protected peek_or_white () : char;
+  abstract protected peek () : char;
 
   public abstract Dispose () : void;
   
@@ -390,16 +373,6 @@
     if (ch == '\0') '\n' else ch
   }
 
-  protected read_not_eol () : char
-  {
-    match (peek_or_none ())
-    {
-      | None => '\n'
-      | Some ('\n') => '\n'
-      | _ => read ()
-    }
-  }
-
   protected read () : char
   {
     mutable ch = read_from_input ();
@@ -1170,16 +1143,16 @@
     def line = StringBuilder (80);
     while (c != '\n') {
       if (c == '/') {
-        c = read_not_eol ();
+        c = read_or_eol ();
         unless (c == '/')
           when (Message.ErrorCount <= 0)
             Message.Warning (1696, "Single-line comment or end-of-line expected");
         while (c != '\n') 
-          c = read_not_eol ();
+          c = read_or_eol ();
       }
       else {
         ignore (line.Append (c));
-        c = read_not_eol ();
+        c = read_or_eol ();
       }
     };
     line.ToString ()
@@ -1192,7 +1165,7 @@
     def eat_spaces () : char {
       mutable c = ' ';
       while (Char.IsWhiteSpace (c) && c != '\n') 
-        c = read_not_eol ();
+        c = read_or_eol ();
       c
     };
     def read_word () : string {
@@ -1558,13 +1531,22 @@
       
   }
     
-  override protected peek_or_none () : option[char]
+  override protected peek () : char
   {
     def inp = reader.Peek ();
     if (inp >= 0)
-      Some (inp :> char)
+      inp :> char
     else
-      None ()
+      '\0'
+  }
+
+  override protected peek_or_white () : char
+  {
+    def inp = reader.Peek ();
+    if (inp >= 0)
+      inp :> char
+    else
+      ' '
   }
   
   override protected read_from_input () : char
@@ -1684,12 +1666,20 @@
 
   public override Dispose () : void { }
   
-  override protected peek_or_none () : option[char]
+  override protected peek () : char
   {
     if (pos < reader.Length)
-      Some (reader[pos])
+      reader[pos]
     else
-      None ()
+      '\0'
+  }
+
+  override protected peek_or_white () : char
+  {
+    if (pos < reader.Length)
+      reader[pos]
+    else
+      ' '
   }
   
   override protected read_from_input () : char



More information about the svn mailing list