浏览代码

[java] Make sure `cast null` will generate correct code. Added test / closes #3400

Cauê Waneck 10 年之前
父节点
当前提交
6412bec3f7
共有 2 个文件被更改,包括 25 次插入0 次删除
  1. 2 0
      gencommon.ml
  2. 23 0
      tests/unit/src/unit/issues/Issue3400.hx

+ 2 - 0
gencommon.ml

@@ -6569,6 +6569,8 @@ struct
 						| _ -> assert false
 					in
 					handle e t real_t
+				| TCast( { eexpr = TConst TNull }, _ ) ->
+					{ e with eexpr = TConst TNull }
 				| TCast( { eexpr = TCall( { eexpr = TLocal { v_name = "__delegate__" } } as local, [del] ) } as e2, _) ->
 					{ e with eexpr = TCast({ e2 with eexpr = TCall(local, [Type.map_expr run del]) }, None) }
 

+ 23 - 0
tests/unit/src/unit/issues/Issue3400.hx

@@ -0,0 +1,23 @@
+package unit.issues;
+
+class Issue3400 extends Test
+{
+#if java
+	public function test()
+	{
+		var a:AbstractList<haxe.Int64> = AbstractList.empty();
+	}
+#end
+}
+
+#if java
+private abstract AbstractList<T>(java.util.ArrayList<T>)
+{
+    function new(a:T)
+    {
+        this = new java.util.ArrayList<T>();
+        this.add(a);
+    }
+    public static inline function empty<T>() return new AbstractList<T>((cast null:T));
+}
+#end