syntax: assign variable even if there is no base type
authorJean Privat <jean@pryen.org>
Thu, 20 Aug 2009 02:13:10 +0000 (22:13 -0400)
committerJean Privat <jean@pryen.org>
Thu, 20 Aug 2009 02:13:10 +0000 (22:13 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/syntax/typing.nit
tests/sav/error_expr_not_ok_alt2.sav
tests/sav/error_expr_not_ok_alt3.sav

index 0201f2d..fb4c838 100644 (file)
@@ -659,11 +659,11 @@ redef class AVarAssignExpr
        redef fun after_typing(v)
        do
                v.variable_ctx.mark_is_set(variable)
-               var t = v.variable_ctx.stype(variable)
 
                # Check the base type
                var btype = v.base_variable_ctx.stype(variable)
-               if not v.check_conform_expr(n_value, btype) then return
+               if not v.check_expr(n_value) then return
+               if btype != null and not v.check_conform_expr(n_value, btype) then return
 
                # Always cast
                v.variable_ctx.stype(variable) = n_value.stype
@@ -710,7 +710,8 @@ redef class AVarReassignExpr
 
                # Check the base type
                var btype = v.base_variable_ctx.stype(variable)
-               if not v.check_conform(n_value, t2, btype) then return
+               if not v.check_expr(n_value) then return
+               if btype != null and not v.check_conform(n_value, t2, btype) then return
 
                # Always cast
                v.variable_ctx.stype(variable) = t2
index 29648ab..c375f01 100644 (file)
@@ -8,35 +8,95 @@ alt/error_expr_not_ok_alt2.nit:33,22--25: Type error: class Fail not found in mo
 alt/error_expr_not_ok_alt2.nit:40,1--7: Error: Method 'fail' doesn't exists in Int.
 alt/error_expr_not_ok_alt2.nit:42,7--9: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:43,1--8: Error: Method 'fail' doesn't exists in Int.
+alt/error_expr_not_ok_alt2.nit:60,4--7: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:60,20: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:62,10--13: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:62,7--27: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:63,7--30: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:64,7--33: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:66,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:66,21: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:69,10--13: Type error: expected Collection[nullable Object], got Int
+alt/error_expr_not_ok_alt2.nit:71,8--11: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt2.nit:72,7--15: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:73,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:73,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:74,15--18: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:74,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:75,7--10: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt2.nit:75,15--18: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:75,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:76,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:76,7--19: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:77,7--10: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt2.nit:77,16--19: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:77,7--19: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:78,7--10: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt2.nit:78,16--19: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:78,7--19: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:79,11--14: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt2.nit:79,7--14: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:80,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:81,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:82,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:83,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:84,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:85,7--18: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:86,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:87,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:88,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:89,7--14: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:90,7--14: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:91,7--17: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:92,7--14: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:93,7--14: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:94,7--17: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:95,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:96,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:97,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:98,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt2.nit:99,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:100,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt2.nit:101,7--16: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:102,7--16: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:103,7--19: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:104,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:105,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:106,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:107,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:108,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:109,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:110,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:111,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:112,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:113,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:114,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:115,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:116,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:117,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:118,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:119,7--11: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:122,7--15: Error: Attribute _fail doesn't exists in String.
 alt/error_expr_not_ok_alt2.nit:123,1--13: Error: Attribute _fail doesn't exists in String.
 alt/error_expr_not_ok_alt2.nit:124,1--14: Error: Attribute _fail doesn't exists in String.
+alt/error_expr_not_ok_alt2.nit:126,7--13: Error: Attribute _x doesn't exists in Int.
+alt/error_expr_not_ok_alt2.nit:127,1--11: Error: Attribute _x doesn't exists in Int.
+alt/error_expr_not_ok_alt2.nit:128,1--12: Error: Attribute _x doesn't exists in Int.
 alt/error_expr_not_ok_alt2.nit:131,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:134,7--12: Error: Method '[]' doesn't exists in Int.
+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: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]
 alt/error_expr_not_ok_alt2.nit:149,7--24: Type error: expected A, got String
 alt/error_expr_not_ok_alt2.nit:150,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt2.nit:151,7--22: Type error: expected A, got Int
 alt/error_expr_not_ok_alt2.nit:152,7--18: Type error: expected A, got Bool
index 6c229c3..748fba5 100644 (file)
@@ -7,35 +7,95 @@ alt/error_expr_not_ok_alt3.nit:34,12--17: Error: Method or variable 'fail' unkno
 alt/error_expr_not_ok_alt3.nit:40,1--7: Error: Method 'fail' doesn't exists in Int.
 alt/error_expr_not_ok_alt3.nit:42,7--9: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:43,1--8: Error: Method 'fail' doesn't exists in Int.
+alt/error_expr_not_ok_alt3.nit:60,4--7: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:60,20: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:62,10--13: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:62,7--27: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:63,7--30: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:64,7--33: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:66,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:66,21: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:69,10--13: Type error: expected Collection[nullable Object], got Int
+alt/error_expr_not_ok_alt3.nit:71,8--11: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt3.nit:72,7--15: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:73,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:73,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:74,15--18: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:74,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:75,7--10: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt3.nit:75,15--18: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:75,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:76,7--10: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:76,7--19: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:77,7--10: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt3.nit:77,16--19: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:77,7--19: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:78,7--10: Type error: expected Bool, got Int
+alt/error_expr_not_ok_alt3.nit:78,16--19: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:78,7--19: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:79,11--14: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt3.nit:79,7--14: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:80,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:81,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:82,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:83,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:84,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:85,7--18: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:86,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:87,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:88,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:89,7--14: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:90,7--14: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:91,7--17: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:92,7--14: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:93,7--14: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:94,7--17: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:95,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:96,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:97,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:98,7--15: Type error: expected A, got Bool
 alt/error_expr_not_ok_alt3.nit:99,7--15: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:100,7--18: Type error: expected A, got Bool
+alt/error_expr_not_ok_alt3.nit:101,7--16: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:102,7--16: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:103,7--19: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:104,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:105,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:106,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:107,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:108,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:109,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:110,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:111,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:112,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:113,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:114,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:115,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:116,7--14: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:117,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:118,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:119,7--11: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:122,7--15: Error: Attribute _fail doesn't exists in String.
 alt/error_expr_not_ok_alt3.nit:123,1--13: Error: Attribute _fail doesn't exists in String.
 alt/error_expr_not_ok_alt3.nit:124,1--14: Error: Attribute _fail doesn't exists in String.
+alt/error_expr_not_ok_alt3.nit:126,7--13: Error: Attribute _x doesn't exists in Int.
+alt/error_expr_not_ok_alt3.nit:127,1--11: Error: Attribute _x doesn't exists in Int.
+alt/error_expr_not_ok_alt3.nit:128,1--12: Error: Attribute _x doesn't exists in Int.
 alt/error_expr_not_ok_alt3.nit:131,7--14: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:134,7--12: Error: Method '[]' doesn't exists in Int.
+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: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]
 alt/error_expr_not_ok_alt3.nit:149,7--24: Type error: expected A, got String
 alt/error_expr_not_ok_alt3.nit:150,7--17: Type error: expected A, got Int
+alt/error_expr_not_ok_alt3.nit:151,7--22: Type error: expected A, got Int
 alt/error_expr_not_ok_alt3.nit:152,7--18: Type error: expected A, got Bool