parser: include obra and cbra in range nodes
authorJean Privat <jean@pryen.org>
Fri, 24 Feb 2012 16:02:59 +0000 (11:02 -0500)
committerJean Privat <jean@pryen.org>
Fri, 24 Feb 2012 16:02:59 +0000 (11:02 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

src/parser/nit.sablecc3xx
src/parser/parser.nit
src/parser/parser_abs.nit
src/parser/parser_nodes.nit
src/parser/parser_prod.nit
tests/sav/error_expr_not_ok_alt2.sav
tests/sav/error_expr_not_ok_alt3.sav
tests/sav/error_expr_not_ok_alt4.sav
tests/sav/error_expr_not_ok_alt5.sav
tests/sav/error_expr_not_ok_alt6.sav
tests/sav/test_parser_args1.sav

index caba4aa..651bd4f 100644 (file)
@@ -519,8 +519,8 @@ expr_atom~nopar~nobra {-> expr}
 !nobra | {bra} expr_atom~nopar braargs {-> New expr.bra(expr_atom~nopar.expr, [braargs.expr], [])}
        | {new} kwnew no type~nobra dot [n2]:no id args {-> New expr.new(kwnew, type~nobra.type, id, [args.expr])}
 // !nopar to unambiguise 'foo[5].bar' between '(foo[5]).bar' and 'foo([5].bar),
-!nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra {-> New expr.crange(expr, expr2.expr)}
-!nobra!nopar   | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra  {-> New expr.orange(expr, expr2.expr)}
+!nobra!nopar   | {range} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no cbra {-> New expr.crange(obra, expr, expr2.expr, cbra)}
+!nobra!nopar   | {orange} obra no expr [n2]:no dotdot [n3]:no [expr2]:expr_nobra [n4]:no [cbra]:obra  {-> New expr.orange(obra, expr, expr2.expr, cbra)}
 !nobra!nopar   | {array} braargs {-> New expr.array([braargs.expr])}
        | {self} kwself {-> New expr.self(kwself)}
        | {true} kwtrue {-> New expr.true(kwtrue)}
@@ -728,8 +728,8 @@ expr        = {block} expr* kwend?
        | {var_assign} id assign [value]:expr 
        | {var_reassign} id assign_op [value]:expr 
        | {range} expr [expr2]:expr 
-       | {crange} expr [expr2]:expr 
-       | {orange} expr [expr2]:expr 
+       | {crange} obra expr [expr2]:expr cbra
+       | {orange} obra expr [expr2]:expr [cbra]:obra
        | {array} [exprs]:expr*
        | {self} kwself 
        | {implicit_self} 
index f6f229e..c30d894 100644 (file)
@@ -11109,13 +11109,19 @@ private class ReduceAction380
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pexprnode2 = nodearraylist3
-                                       assert pexprnode2 isa nullable AExpr
-                                       var pexprnode3 = nodearraylist7
+                                       var tobranode2 = nodearraylist1
+                                       assert tobranode2 isa nullable TObra
+                                       var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
+                                       var pexprnode4 = nodearraylist7
+                                       assert pexprnode4 isa nullable AExpr
+                                       var tcbranode5 = nodearraylist9
+                                       assert tcbranode5 isa nullable TCbra
                                        var pexprnode1: nullable ACrangeExpr = new ACrangeExpr.init_acrangeexpr(
-                                               pexprnode2,
-                                               pexprnode3
+                                               tobranode2,
+                                               pexprnode3,
+                                               pexprnode4,
+                                               tcbranode5
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
@@ -11135,13 +11141,19 @@ private class ReduceAction381
                                        var nodearraylist3 = p.pop
                                        var nodearraylist2 = p.pop
                                        var nodearraylist1 = p.pop
-                                       var pexprnode2 = nodearraylist3
-                                       assert pexprnode2 isa nullable AExpr
-                                       var pexprnode3 = nodearraylist7
+                                       var tobranode2 = nodearraylist1
+                                       assert tobranode2 isa nullable TObra
+                                       var pexprnode3 = nodearraylist3
                                        assert pexprnode3 isa nullable AExpr
+                                       var pexprnode4 = nodearraylist7
+                                       assert pexprnode4 isa nullable AExpr
+                                       var tobranode5 = nodearraylist9
+                                       assert tobranode5 isa nullable TObra
                                        var pexprnode1: nullable AOrangeExpr = new AOrangeExpr.init_aorangeexpr(
-                                               pexprnode2,
-                                               pexprnode3
+                                               tobranode2,
+                                               pexprnode3,
+                                               pexprnode4,
+                                               tobranode5
                                        )
                                        node_list = pexprnode1
                                        p.push(p.go_to(_goto), node_list)
index 0df601a..e097386 100644 (file)
@@ -950,13 +950,17 @@ class ARangeExpr
 end
 class ACrangeExpr
        super AExpr
+    readable var _n_obra: TObra
     readable var _n_expr: AExpr
     readable var _n_expr2: AExpr
+    readable var _n_cbra: TCbra
 end
 class AOrangeExpr
        super AExpr
+    readable var _n_obra: TObra
     readable var _n_expr: AExpr
     readable var _n_expr2: AExpr
+    readable var _n_cbra: TObra
 end
 class AArrayExpr
        super AExpr
index 5745d00..17a8aad 100644 (file)
@@ -1015,9 +1015,13 @@ class ARangeExpr
 end
 class ACrangeExpr
        super ARangeExpr
+       readable var _n_obra: TObra
+       readable var _n_cbra: TCbra
 end
 class AOrangeExpr
        super ARangeExpr
+       readable var _n_obra: TObra
+       readable var _n_cbra: TObra
 end
 class AArrayExpr
        super AExpr
index 8a2ef72..163d14a 100644 (file)
@@ -6512,19 +6512,35 @@ redef class ACrangeExpr
     private init empty_init do end
 
     init init_acrangeexpr (
+            n_obra: nullable TObra,
             n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+            n_expr2: nullable AExpr,
+            n_cbra: nullable TCbra
     )
     do
         empty_init
+        _n_obra = n_obra.as(not null)
+       n_obra.parent = self
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
         _n_expr2 = n_expr2.as(not null)
        n_expr2.parent = self
+        _n_cbra = n_cbra.as(not null)
+       n_cbra.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
+        if _n_obra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TObra
+                _n_obra = new_child
+           else
+               abort
+            end
+            return
+       end
         if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -6545,31 +6561,59 @@ redef class ACrangeExpr
             end
             return
        end
+        if _n_cbra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCbra
+                _n_cbra = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
+        v.enter_visit(_n_obra)
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
+        v.enter_visit(_n_cbra)
     end
 end
 redef class AOrangeExpr
     private init empty_init do end
 
     init init_aorangeexpr (
+            n_obra: nullable TObra,
             n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+            n_expr2: nullable AExpr,
+            n_cbra: nullable TObra
     )
     do
         empty_init
+        _n_obra = n_obra.as(not null)
+       n_obra.parent = self
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
         _n_expr2 = n_expr2.as(not null)
        n_expr2.parent = self
+        _n_cbra = n_cbra.as(not null)
+       n_cbra.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
+        if _n_obra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TObra
+                _n_obra = new_child
+           else
+               abort
+            end
+            return
+       end
         if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -6590,12 +6634,24 @@ redef class AOrangeExpr
             end
             return
        end
+        if _n_cbra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TObra
+                _n_cbra = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
+        v.enter_visit(_n_obra)
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
+        v.enter_visit(_n_cbra)
     end
 end
 redef class AArrayExpr
index 118c7cf..d8bf036 100644 (file)
@@ -88,12 +88,12 @@ alt/error_expr_not_ok_alt2.nit:134,7--12: Error: Method '[]' doesn't exists in I
 alt/error_expr_not_ok_alt2.nit:135,1--11: Error: Method '[]=' doesn't exists in Int.
 alt/error_expr_not_ok_alt2.nit:136,1--12: Error: Method '[]' doesn't exists in Int.
 alt/error_expr_not_ok_alt2.nit:137,1--17: Error: Method '[]=' doesn't exists in Int.
-alt/error_expr_not_ok_alt2.nit:139,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt2.nit:140,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt2.nit:141,8--17: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt2.nit:142,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt2.nit:143,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt2.nit:144,8--17: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt2.nit:139,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt2.nit:140,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt2.nit:141,7--18: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt2.nit:142,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt2.nit:143,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt2.nit:144,7--18: Type error: expected A, got Range[Int]
 alt/error_expr_not_ok_alt2.nit:145,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt2.nit:146,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt2.nit:147,8--17: Type error: expected A, got Array[Int]
index a460834..7d5e669 100644 (file)
@@ -87,12 +87,12 @@ alt/error_expr_not_ok_alt3.nit:134,7--12: Error: Method '[]' doesn't exists in I
 alt/error_expr_not_ok_alt3.nit:135,1--11: Error: Method '[]=' doesn't exists in Int.
 alt/error_expr_not_ok_alt3.nit:136,1--12: Error: Method '[]' doesn't exists in Int.
 alt/error_expr_not_ok_alt3.nit:137,1--17: Error: Method '[]=' doesn't exists in Int.
-alt/error_expr_not_ok_alt3.nit:139,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt3.nit:140,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt3.nit:141,8--17: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt3.nit:142,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt3.nit:143,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt3.nit:144,8--17: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt3.nit:139,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt3.nit:140,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt3.nit:141,7--18: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt3.nit:142,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt3.nit:143,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt3.nit:144,7--18: Type error: expected A, got Range[Int]
 alt/error_expr_not_ok_alt3.nit:145,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt3.nit:146,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt3.nit:147,8--17: Type error: expected A, got Array[Int]
index 5978eb1..09da141 100644 (file)
@@ -91,12 +91,12 @@ alt/error_expr_not_ok_alt4.nit:134,7--12: Error: Method '[]' doesn't exists in I
 alt/error_expr_not_ok_alt4.nit:135,1--11: Error: Method '[]=' doesn't exists in Int.
 alt/error_expr_not_ok_alt4.nit:136,1--12: Error: Method '[]' doesn't exists in Int.
 alt/error_expr_not_ok_alt4.nit:137,1--17: Error: Method '[]=' doesn't exists in Int.
-alt/error_expr_not_ok_alt4.nit:139,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt4.nit:140,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt4.nit:141,8--17: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt4.nit:142,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt4.nit:143,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt4.nit:144,8--17: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt4.nit:139,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt4.nit:140,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt4.nit:141,7--18: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt4.nit:142,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt4.nit:143,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt4.nit:144,7--18: Type error: expected A, got Range[Int]
 alt/error_expr_not_ok_alt4.nit:145,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt4.nit:146,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt4.nit:147,8--17: Type error: expected A, got Array[Int]
index 4ebaba9..07d2cf6 100644 (file)
@@ -92,12 +92,12 @@ alt/error_expr_not_ok_alt5.nit:134,7--12: Error: Method '[]' doesn't exists in I
 alt/error_expr_not_ok_alt5.nit:135,1--11: Error: Method '[]=' doesn't exists in Int.
 alt/error_expr_not_ok_alt5.nit:136,1--12: Error: Method '[]' doesn't exists in Int.
 alt/error_expr_not_ok_alt5.nit:137,1--17: Error: Method '[]=' doesn't exists in Int.
-alt/error_expr_not_ok_alt5.nit:139,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt5.nit:140,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt5.nit:141,8--17: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt5.nit:142,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt5.nit:143,8--14: Type error: expected A, got Range[Int]
-alt/error_expr_not_ok_alt5.nit:144,8--17: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt5.nit:139,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt5.nit:140,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt5.nit:141,7--18: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt5.nit:142,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt5.nit:143,7--15: Type error: expected A, got Range[Int]
+alt/error_expr_not_ok_alt5.nit:144,7--18: Type error: expected A, got Range[Int]
 alt/error_expr_not_ok_alt5.nit:145,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt5.nit:146,8--14: Type error: expected A, got Array[Int]
 alt/error_expr_not_ok_alt5.nit:147,8--17: Type error: expected A, got Array[Int]
index e7dec16..b20329d 100644 (file)
@@ -109,11 +109,11 @@ alt/error_expr_not_ok_alt6.nit:134,7--12: Error: Method '[]' call on 'null'.
 alt/error_expr_not_ok_alt6.nit:135,1--11: Error: Method '[]=' call on 'null'.
 alt/error_expr_not_ok_alt6.nit:136,1--12: Error: Method '[]' call on 'null'.
 alt/error_expr_not_ok_alt6.nit:137,1--17: Error: Method '[]=' call on 'null'.
-alt/error_expr_not_ok_alt6.nit:139,8--14: Type error: Int incompatible with null.
-alt/error_expr_not_ok_alt6.nit:140,8--14: Type error: null incompatible with Int.
+alt/error_expr_not_ok_alt6.nit:139,7--15: Type error: Int incompatible with null.
+alt/error_expr_not_ok_alt6.nit:140,7--15: Type error: null incompatible with Int.
 alt/error_expr_not_ok_alt6.nit:141,8--11: Type error: expected Discrete, got null
-alt/error_expr_not_ok_alt6.nit:142,8--14: Type error: Int incompatible with null.
-alt/error_expr_not_ok_alt6.nit:143,8--14: Type error: null incompatible with Int.
+alt/error_expr_not_ok_alt6.nit:142,7--15: Type error: Int incompatible with null.
+alt/error_expr_not_ok_alt6.nit:143,7--15: Type error: null incompatible with Int.
 alt/error_expr_not_ok_alt6.nit:144,8--11: Type error: expected Discrete, got null
 alt/error_expr_not_ok_alt6.nit:145,8--14: Type error: expected A, got Array[nullable Int]
 alt/error_expr_not_ok_alt6.nit:146,8--14: Type error: expected A, got Array[nullable Int]
index a563022..e25dc74 100644 (file)
           ../src/syntax/typing.nit:756,3--758,5
             keyword 'for' ... ../src/syntax/typing.nit:756,3--5
             identifier 'i' ... ../src/syntax/typing.nit:756,7
-            ../src/syntax/typing.nit:756,13--25
+            ../src/syntax/typing.nit:756,12--26
+              '[' ... ../src/syntax/typing.nit:756,12
               ../src/syntax/typing.nit:756,13
                 literal value '0' ... ../src/syntax/typing.nit:756,13
               ../src/syntax/typing.nit:756,16--25
                   ../src/syntax/typing.nit:756,16
                   identifier 'vas' ... ../src/syntax/typing.nit:756,16--18
                 identifier 'length' ... ../src/syntax/typing.nit:756,20--25
+              '[' ... ../src/syntax/typing.nit:756,26
             keyword 'do' ... ../src/syntax/typing.nit:756,28--29
             ../src/syntax/typing.nit:757,4--758,5
               ../src/syntax/typing.nit:757,4--24
           ../src/syntax/typing.nit:1437,3--1451,5
             keyword 'for' ... ../src/syntax/typing.nit:1437,3--5
             identifier 'par_idx' ... ../src/syntax/typing.nit:1437,7--13
-            ../src/syntax/typing.nit:1437,19--30
+            ../src/syntax/typing.nit:1437,18--31
+              '[' ... ../src/syntax/typing.nit:1437,18
               ../src/syntax/typing.nit:1437,19
                 literal value '0' ... ../src/syntax/typing.nit:1437,19
               ../src/syntax/typing.nit:1437,22--30
                 ../src/syntax/typing.nit:1437,22
                 identifier 'par_arity' ... ../src/syntax/typing.nit:1437,22--30
+              '[' ... ../src/syntax/typing.nit:1437,31
             keyword 'do' ... ../src/syntax/typing.nit:1437,33--34
             ../src/syntax/typing.nit:1438,4--1451,5
               ../src/syntax/typing.nit:1438,4--15
                   ../src/syntax/typing.nit:1441,5--1445,7
                     keyword 'for' ... ../src/syntax/typing.nit:1441,5--7
                     identifier 'i' ... ../src/syntax/typing.nit:1441,9
-                    ../src/syntax/typing.nit:1441,15--38
+                    ../src/syntax/typing.nit:1441,14--39
+                      '[' ... ../src/syntax/typing.nit:1441,14
                       ../src/syntax/typing.nit:1441,15
                         literal value '0' ... ../src/syntax/typing.nit:1441,15
                       ../src/syntax/typing.nit:1441,18--38
                             ../src/syntax/typing.nit:1441,29
                             identifier 'par_arity' ... ../src/syntax/typing.nit:1441,29--37
                         ')' ... ../src/syntax/typing.nit:1441,38
+                      ']' ... ../src/syntax/typing.nit:1441,39
                     keyword 'do' ... ../src/syntax/typing.nit:1441,41--42
                     ../src/syntax/typing.nit:1442,6--1445,7
                       ../src/syntax/typing.nit:1442,6--25
                     ../src/syntax/typing.nit:1480,5--1498,7
                       keyword 'for' ... ../src/syntax/typing.nit:1480,5--7
                       identifier 'i' ... ../src/syntax/typing.nit:1480,9
-                      ../src/syntax/typing.nit:1480,15--22
+                      ../src/syntax/typing.nit:1480,14--23
+                        '[' ... ../src/syntax/typing.nit:1480,14
                         ../src/syntax/typing.nit:1480,15
                           literal value '0' ... ../src/syntax/typing.nit:1480,15
                         ../src/syntax/typing.nit:1480,18--22
                           ../src/syntax/typing.nit:1480,18
                           identifier 'arity' ... ../src/syntax/typing.nit:1480,18--22
+                        '[' ... ../src/syntax/typing.nit:1480,23
                       keyword 'do' ... ../src/syntax/typing.nit:1480,25--26
                       ../src/syntax/typing.nit:1481,6--1498,7
                         ../src/syntax/typing.nit:1481,6--19
           ../src/syntax/typing.nit:2000,3--2005,5
             keyword 'for' ... ../src/syntax/typing.nit:2000,3--5
             identifier 'i' ... ../src/syntax/typing.nit:2000,7
-            ../src/syntax/typing.nit:2000,13--27
+            ../src/syntax/typing.nit:2000,12--28
+              '[' ... ../src/syntax/typing.nit:2000,12
               ../src/syntax/typing.nit:2000,13
                 literal value '0' ... ../src/syntax/typing.nit:2000,13
               ../src/syntax/typing.nit:2000,16--27
                   ../src/syntax/typing.nit:2000,16
                   identifier 'n_ids' ... ../src/syntax/typing.nit:2000,16--20
                 identifier 'length' ... ../src/syntax/typing.nit:2000,22--27
+              '[' ... ../src/syntax/typing.nit:2000,28
             keyword 'do' ... ../src/syntax/typing.nit:2000,30--31
             ../src/syntax/typing.nit:2001,4--2005,5
               ../src/syntax/typing.nit:2001,4--56