misc/vim: inform the user when no results are found
[nit.git] / lib / nitcc_runtime.nit
index bf778cf..923ef18 100644 (file)
@@ -99,7 +99,7 @@ abstract class Parser
 
        # The current state
        # Used by generated parsers
-       var state: LRState
+       var state: LRState is noinit
 
        init
        do
@@ -116,7 +116,7 @@ abstract class Parser
 
        # Should the parser stop
        # Used by generated parsers
-       var stop writable = true
+       var stop = true is writable
 
        # Parse a full sequence of tokens and return a complete syntactic tree
        fun parse: Node
@@ -186,12 +186,14 @@ abstract class Lexer
                                last_state = state
                        end
                        var c
+                       var next
                        if pos >= length then
                                c = '\0'
+                               next = null
                        else
-                               c = text[pos]
+                               c = text.chars[pos]
+                               next = state.trans(c)
                        end
-                       var next = state.trans(c)
                        if next == null then
                                if pos_start < length then
                                        if last_state == null then
@@ -272,9 +274,8 @@ end
 # Print a node (using to_s) on a line and recustively each children indented (with two spaces)
 class TreePrinterVisitor
        super Visitor
-       var writer: OStream
+       var writer: Writer
        private var indent = 0
-       init(writer: OStream) do self.writer = writer
        redef fun visit(n)
        do
                for i in [0..indent[ do writer.write("  ")
@@ -316,12 +317,12 @@ abstract class Node
        end
 
        # The position of the node in the input stream
-       var position: nullable Position writable = null
+       var position: nullable Position = null is writable
 
        # Produce a graphiz file for the syntaxtic tree rooted at `self`.
        fun to_dot(filepath: String)
        do
-               var f = new OFStream.open(filepath)
+               var f = new FileWriter.open(filepath)
                f.write("digraph g \{\n")
                f.write("rankdir=BT;\n")
 
@@ -345,7 +346,7 @@ abstract class Node
                f.close
        end
 
-       private fun to_dot_visitor(f: OStream, a: Array[NToken])
+       private fun to_dot_visitor(f: Writer, a: Array[NToken])
        do
                f.write("n{object_id} [label=\"{node_name}\"];\n")
                for x in children do
@@ -366,17 +367,17 @@ abstract class Node
 end
 
 private class DephCollection
-       super NaiveCollection[Node]
+       super Collection[Node]
        var node: Node
        redef fun iterator do return new DephIterator([node].iterator)
 end
 
 private class DephIterator
        super Iterator[Node]
+
        var stack = new List[Iterator[nullable Node]]
 
-       init(i: Iterator[nullable Node])
-       do
+       init(i: Iterator[nullable Node]) is old_style_init do
                stack.add i
        end
 
@@ -421,7 +422,7 @@ abstract class NToken
        end
 
        # The text associated with the token
-       var text: String writable = ""
+       var text: String = "" is writable
 
        redef fun to_s do
                var res = super
@@ -465,14 +466,15 @@ end
 class NLexerError
        super NError
 
-       redef fun unexpected do return "character '{text.first}'"
+       redef fun unexpected do return "character '{text.chars.first}'"
 end
 
 # A parser error linked to a unexpected token
 class NParserError
        super NError
+
        # The unexpected token
-       var token: nullable NToken
+       var token: nullable NToken = null
 
        redef fun unexpected
        do
@@ -488,7 +490,7 @@ end
 # A hogeneous sequence of node, used to represent unbounded lists (and + modifier)
 class Nodes[T: Node]
        super Node
-       redef var children = new Array[T]
+       redef var children: Array[T] = new Array[T]
 end
 
 # A production with a specific, named and statically typed children
@@ -548,7 +550,7 @@ abstract class TestParser
                var filepath = args.shift
                var text
                if filepath == "-" then
-                       text = stdin.read_all
+                       text = sys.stdin.read_all
                else if filepath == "-e" then
                        if args.is_empty then
                                print "Error: -e need a text"
@@ -556,7 +558,7 @@ abstract class TestParser
                        end
                        text = args.shift
                else
-                       var f = new IFStream.open(filepath)
+                       var f = new FileReader.open(filepath)
                        text = f.read_all
                        f.close
                end
@@ -580,7 +582,7 @@ abstract class TestParser
                var tokout = "{name}.tokens.out"
                print "TOKEN: {tokens.length} tokens (see {tokout})"
 
-               var f = new OFStream.open(tokout)
+               var f = new FileWriter.open(tokout)
                for t in tokens do
                        f.write "{t.to_s}\n"
                end
@@ -592,7 +594,7 @@ abstract class TestParser
                var n = p.parse
 
                var astout = "{name}.ast.out"
-               f = new OFStream.open(astout)
+               f = new FileWriter.open(astout)
                var tpv = new TreePrinterVisitor(f)
                var astdotout = "{name}.ast.dot"
                if n isa NError then