From ea68346c56981fd8057cad9d0f313c120b6358ba Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Mon, 22 Jun 2009 14:53:02 -0400 Subject: [PATCH] syntax: local variable assignment always cast example: var a: A a = new B a.only_B_stuff # OK since the casted type of a is now B Signed-off-by: Jean Privat --- src/syntax/typing.nit | 8 ++++---- tests/test_id.nit | 18 +++++++++--------- tests/test_isa.nit | 44 ++++++++++++++++++++++---------------------- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/syntax/typing.nit b/src/syntax/typing.nit index ec0a2f4..5525907 100644 --- a/src/syntax/typing.nit +++ b/src/syntax/typing.nit @@ -587,8 +587,8 @@ redef class AVarAssignExpr var btype = v.base_variable_ctx.stype(variable) if not v.check_conform_expr(n_value, btype) then return - # Bypasse cast if then current type does not match - if not n_value.stype < t then v.variable_ctx.stype(variable) = btype + # Always cast + v.variable_ctx.stype(variable) = n_value.stype _is_typed = true end @@ -634,8 +634,8 @@ redef class AVarReassignExpr var btype = v.base_variable_ctx.stype(variable) if not v.check_conform(n_value, t2, btype) then return - # Bypasse cast if then current type does not match - if not t2 < t then v.variable_ctx.stype(variable) = btype + # Always cast + v.variable_ctx.stype(variable) = t2 _is_typed = true end diff --git a/tests/test_id.nit b/tests/test_id.nit index 5207fc1..3b20c87 100644 --- a/tests/test_id.nit +++ b/tests/test_id.nit @@ -20,7 +20,7 @@ class C init do end end -var an: Object + var c = new C var i = 5 var a = [c] @@ -32,30 +32,30 @@ var id4: Int id1 = c.object_id print(c.object_id == id1) -an = c -print(an.object_id == id1) +var an1: Object = c +print(an1.object_id == id1) print((new C).object_id != id1) printn('\n') id2 = i.object_id print(id1 != id2) print(i.object_id == id2) -an = i -print(an.object_id == id2) +var an2: Object = i +print(an2.object_id == id2) print(5.object_id == id2) printn('\n') id3 = a.object_id print(id1 != id3 and id2 != id3) print(a.object_id == id3) -an = a -print(an.object_id == id3) +var an3: Object = a +print(an3.object_id == id3) print([c].object_id != id3) printn('\n') id4 = s.object_id print(id1 != id4 and id2 != id4 and id3 != id4) print(s.object_id == id4) -an = s -print(an.object_id == id4) +var an4: Object = s +print(an4.object_id == id4) print("Bonjour".object_id != id4) diff --git a/tests/test_isa.nit b/tests/test_isa.nit index 318a945..ab3ba79 100644 --- a/tests/test_isa.nit +++ b/tests/test_isa.nit @@ -14,30 +14,30 @@ # See the License for the specific language governing permissions and # limitations under the License. -var a : Object + print("int:") -a = 5 -print(a isa Int) -print(not a isa String) -print(not a isa AbstractArray[Char]) -print(not a isa Iterator[Int]) -print(a isa Discrete) -print(a isa Object) +var a1: Object = 5 +print(a1 isa Int) +print(not a1 isa String) +print(not a1 isa AbstractArray[Char]) +print(not a1 isa Iterator[Int]) +print(a1 isa Discrete) +print(a1 isa Object) print("string:") -a = "Bonjour" -print(not a isa Int) -print(a isa String) -print(a isa AbstractArrayRead[Char]) -print(not a isa Iterator[Int]) -print(not a isa Discrete) -print(a isa Object) +var a2: Object = "Bonjour" +print(not a2 isa Int) +print(a2 isa String) +print(a2 isa AbstractArrayRead[Char]) +print(not a2 isa Iterator[Int]) +print(not a2 isa Discrete) +print(a2 isa Object) print("null:") -a = null -print(a isa Int) -print(a isa String) -print(a isa AbstractArray[Char]) -print(a isa Iterator[Int]) -print(a isa Discrete) -print(a isa Object) +var a3: Object = null +print(a3 isa Int) +print(a3 isa String) +print(a3 isa AbstractArray[Char]) +print(a3 isa Iterator[Int]) +print(a3 isa Discrete) +print(a3 isa Object) -- 1.7.9.5