ソースを参照

[cs] Consider the inferred type rather than the type passed to Lib.as. Closes #3403

Cauê Waneck 11 年 前
コミット
c5fd17341e
2 ファイル変更42 行追加1 行削除
  1. 1 1
      std/cs/Lib.hx
  2. 41 0
      tests/unit/issues/Issue3403.hx

+ 1 - 1
std/cs/Lib.hx

@@ -78,7 +78,7 @@ class Lib
 	**/
 	@:extern public static inline function as<T>(obj:Dynamic, cl:Class<T>):T
 	{
-		return untyped __as__(obj, cl);
+		return untyped __as__(obj);
 	}
 
 	/**

+ 41 - 0
tests/unit/issues/Issue3403.hx

@@ -0,0 +1,41 @@
+package unit.issues;
+
+class Issue3403 extends Test  {
+	function test() {
+		var val = [1,2,3,4];
+		var x = Std.instance(val, Array);
+		eq(val,x);
+
+		var val:Dynamic = val;
+		x = Std.instance(val,Array);
+		eq(val,x);
+		t(val != null);
+		t(x != null);
+
+		var g = new G([1,2,3,4]);
+		var g2:Dynamic = g;
+		var g3:G<Array<Int>> = Std.instance(g2,G);
+		eq(g,g2);
+		eq(g,g3);
+		t(g3 != null);
+		t(g != null);
+
+		g2 = "Incorrect type";
+		g3 = Std.instance(g2,G);
+		eq(g3,null);
+
+		g2 = 10;
+		g3 = Std.instance(g2,G);
+		eq(g3,null);
+	}
+}
+
+
+private class G<T>
+{
+	public var val(default,null):T;
+	public function new(val)
+	{
+		this.val = val;
+	}
+}