From 4241a612bc895928cebea59f0ab3d1b9c8518d84 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Wed, 19 Aug 2009 22:13:10 -0400 Subject: [PATCH] syntax: assign variable even if there is no base type Signed-off-by: Jean Privat --- src/syntax/typing.nit | 7 ++-- tests/sav/error_expr_not_ok_alt2.sav | 60 ++++++++++++++++++++++++++++++++++ tests/sav/error_expr_not_ok_alt3.sav | 60 ++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 3 deletions(-) diff --git a/src/syntax/typing.nit b/src/syntax/typing.nit index 0201f2d..fb4c838 100644 --- a/src/syntax/typing.nit +++ b/src/syntax/typing.nit @@ -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 diff --git a/tests/sav/error_expr_not_ok_alt2.sav b/tests/sav/error_expr_not_ok_alt2.sav index 29648ab..c375f01 100644 --- a/tests/sav/error_expr_not_ok_alt2.sav +++ b/tests/sav/error_expr_not_ok_alt2.sav @@ -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 diff --git a/tests/sav/error_expr_not_ok_alt3.sav b/tests/sav/error_expr_not_ok_alt3.sav index 6c229c3..748fba5 100644 --- a/tests/sav/error_expr_not_ok_alt3.sav +++ b/tests/sav/error_expr_not_ok_alt3.sav @@ -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 -- 1.7.9.5