Procházet zdrojové kódy

always type array access on `Array<Dynamic>` as `Dynamic` (closes #3799)

Simon Krajewski před 10 roky
rodič
revize
ad20cff732
2 změnil soubory, kde provedl 13 přidání a 0 odebrání
  1. 11 0
      tests/unit/src/unit/issues/Issue3799.hx
  2. 2 0
      typer.ml

+ 11 - 0
tests/unit/src/unit/issues/Issue3799.hx

@@ -0,0 +1,11 @@
+package unit.issues;
+
+class Issue3799 extends Test {
+
+	static var arr:Array<Dynamic> = [0, "Hello", " World", 0.4];
+
+	function test() {
+		var d:Dynamic = arr[1] + arr[2];
+		eq("Hello World", d);
+	}
+}

+ 2 - 0
typer.ml

@@ -2634,6 +2634,8 @@ and type_access ctx e p mode =
 				apply_params pl tl (loop (TInst (c,stl)))
 				apply_params pl tl (loop (TInst (c,stl)))
 			| TInst ({ cl_path = [],"ArrayAccess" },[t]) ->
 			| TInst ({ cl_path = [],"ArrayAccess" },[t]) ->
 				t
 				t
+			| TInst ({ cl_path = [],"Array"},[t]) when t == t_dynamic ->
+				t_dynamic
 			| TAbstract(a,tl) when Meta.has Meta.ArrayAccess a.a_meta ->
 			| TAbstract(a,tl) when Meta.has Meta.ArrayAccess a.a_meta ->
 				loop (apply_params a.a_params tl a.a_this)
 				loop (apply_params a.a_params tl a.a_this)
 			| _ ->
 			| _ ->