Browse Source

do not allow assigning Method to Var unless read is AccNormal (closes #3975)

Simon Krajewski 10 years ago
parent
commit
02ffaa21a4

+ 0 - 1
tests/misc/compile.hxml

@@ -1,3 +1,2 @@
 -cp src
 -cp src
--D MISC_TEST_FILTER=Issue4114
 --run Main
 --run Main

+ 6 - 0
tests/misc/projects/Issue3975/Main.hx

@@ -0,0 +1,6 @@
+class Main {
+	static function main() {
+		var a = ["a", "b"];
+		var a2 : { var pop(get,never) : Void -> Void; } = a;
+	}
+}

+ 2 - 0
tests/misc/projects/Issue3975/compile-fail.hxml

@@ -0,0 +1,2 @@
+-main Main
+--interp

+ 2 - 0
tests/misc/projects/Issue3975/compile-fail.hxml.stderr

@@ -0,0 +1,2 @@
+Main.hx:4: characters 2-54 : Array<String> should be { pop : Void -> Void }
+Main.hx:4: characters 2-54 : Field pop is method but should be (get,never)

+ 2 - 2
type.ml

@@ -1322,8 +1322,8 @@ let unify_kind k1 k2 =
 			| MethDynamic -> direct_access v.v_read && direct_access v.v_write
 			| MethDynamic -> direct_access v.v_read && direct_access v.v_write
 			| MethMacro -> false
 			| MethMacro -> false
 			| MethNormal | MethInline ->
 			| MethNormal | MethInline ->
-				match v.v_write with
-				| AccNo | AccNever -> true
+				match v.v_read,v.v_write with
+				| AccNormal,(AccNo | AccNever) -> true
 				| _ -> false)
 				| _ -> false)
 		| Method m1, Method m2 ->
 		| Method m1, Method m2 ->
 			match m1,m2 with
 			match m1,m2 with