parser: do not crash on tokens without location
[nit.git] / src / parser / parser_work.nit
index 03d82b1..5652cf5 100644 (file)
@@ -153,6 +153,8 @@ class Parser
                                (new ComputeProdLocationVisitor).enter_visit(node)
                                return node
                        else if action_type == 3 then # ERROR
+                               # skip injected tokens
+                               while token._location == null do token = lexer.next
                                var node2 = new AParserError.init_parser_error("Syntax error: unexpected {token}.", token.location, token)
                                var node = new Start(null, node2)
                                return node
@@ -186,7 +188,8 @@ private class ComputeProdLocationVisitor
        redef fun visit(n: ANode)
        do
                if n isa Token then
-                       var loc = n.location
+                       var loc = n._location
+                       if loc == null then return
                        _last_location = loc
 
                        # Add a first token to productions that need one