stdlib/strings: Abstracted functions common to all Text representations.
[nit.git] / src / parser / xss / lexer.xss
index 3fe41f0..7784714 100644 (file)
@@ -53,13 +53,27 @@ $ end foreach
                _file = file
        end
 
+       # The last peeked token to chain them
+       private var last_token: nullable Token = null
+
        # Give the next token (but do not consume it)
        fun peek: Token
        do
-               while _token == null do
-                       _token = get_token
+               var t = _token
+               if t != null then return t
+
+               t = get_token
+               while t == null do t = get_token
+
+               var l = last_token
+               if l != null then
+                       l.next_token = t
+                       t.prev_token = l
                end
-               return _token.as(not null)
+
+               last_token = t
+               _token = t
+               return t
        end
 
        # Give and consume the next token
@@ -93,7 +107,7 @@ $ end foreach
                        if sp >= string_len then
                                dfa_state = -1
                        else
-                               var c = string[sp].ascii
+                               var c = string.chars[sp].ascii
                                sp += 1
 
                                var cr = _cr