[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