Browse Source

do not try to be too smart about inlining constructors (see #3967)

Simon Krajewski 10 years ago
parent
commit
4806487d56
2 changed files with 26 additions and 1 deletions
  1. 1 1
      optimizer.ml
  2. 25 0
      tests/unit/src/unit/issues/Issue3967.hx

+ 1 - 1
optimizer.ml

@@ -1300,7 +1300,7 @@ let inline_constructors ctx e =
 	in
 	in
 	let rec skip_to_var e = match e.eexpr with
 	let rec skip_to_var e = match e.eexpr with
 		| TLocal v when v.v_id < 0 -> Some v
 		| TLocal v when v.v_id < 0 -> Some v
-		| TCast(e1,None) | TMeta(_,e1) | TParenthesis(e1) -> skip_to_var e1
+		(* | TCast(e1,None) | TMeta(_,e1) | TParenthesis(e1) -> skip_to_var e1 *)
 		| _ -> None
 		| _ -> None
 	in
 	in
 	let rec find_locals e =
 	let rec find_locals e =

+ 25 - 0
tests/unit/src/unit/issues/Issue3967.hx

@@ -0,0 +1,25 @@
+package unit.issues;
+
+private class A {
+	public var a:String;
+	public inline function new(a:String) {
+		this.a = a;
+	}
+
+	public function test() { return a; }
+}
+
+class Issue3967 extends Test {
+	function testAndy() {
+        var a = ["a", "b"];
+        var b = a.copy();
+		eq("a", b[0]);
+		eq("b", b[1]);
+		f(a == b);
+	}
+
+	//function testNicolas() {
+		//var x:{ var test(default,never) : Void -> String; } = new A("foo");
+		//eq("foo", x.test());
+	//}
+}