Browse Source

[java] unit tests compiling; fixed captured function vars with type parameters

Cauê Waneck 11 years ago
parent
commit
fe8afbc49c
3 changed files with 13 additions and 8 deletions
  1. 5 2
      gencommon.ml
  2. 2 0
      genjava.ml
  3. 6 6
      tests/unit/unitstd/Std.unit.hx

+ 5 - 2
gencommon.ml

@@ -2766,7 +2766,7 @@ struct
 				| TArray ({ eexpr = TLocal ({ v_extra = Some( _ :: _, _) } as v) }, _) -> (* captured transformation *)
 					(match tparam_anon_acc with
 					| None -> Type.map_expr run e
-					| Some tparam_anon_acc -> tparam_anon_acc v e)
+          | Some tparam_anon_acc -> tparam_anon_acc v e)
         | TCall( { eexpr = TField(_, FEnum _) }, _ ) ->
           Type.map_expr run e
         (* if a TClosure is being call immediately, there's no need to convert it to a TClosure *)
@@ -2878,7 +2878,8 @@ struct
   						check_params v.v_type);
 					Hashtbl.add ignored v.v_id v;
 					ignore(Option.map traverse opt)
-        | TLocal { v_extra = Some(_ :: _,_) } -> ()
+        | TLocal { v_extra = Some( (_ :: _ as tparams),_) } ->
+          ()
         | TLocal(( { v_capture = true } ) as v) ->
           (if not (Hashtbl.mem ignored v.v_id || Hashtbl.mem ret v.v_id) then begin check_params v.v_type; Hashtbl.replace ret v.v_id expr end);
         | _ -> Type.iter traverse expr
@@ -3074,6 +3075,8 @@ struct
 				let original = apply_params types monos vt in
 				unify et original;
 
+        let monos = List.map (fun t -> apply_params types (List.map (fun _ -> t_dynamic) types) t) monos in
+
 				let same_cl t1 t2 = match follow t1, follow t2 with
 					| TInst(c,_), TInst(c2,_) -> c == c2
 					| _ -> false

+ 2 - 0
genjava.ml

@@ -1901,6 +1901,8 @@ let configure gen =
   TArrayTransform.configure gen (TArrayTransform.default_implementation gen (
   fun e ->
     match e.eexpr with
+      | TArray ({ eexpr = TLocal { v_extra = Some( _ :: _, _) } }, _) -> (* captured transformation *)
+        false
       | TArray(e1, e2) ->
         ( match run_follow gen e1.etype with
           | TInst({ cl_path = (["java"], "NativeArray") }, _) -> false

+ 6 - 6
tests/unit/unitstd/Std.unit.hx

@@ -1,7 +1,7 @@
 // is
 var known:String = null;
 Std.is(known, String) == false;
-		
+
 var unknown = null;
 Std.is(unknown, String) == false;
 Std.is(null, String) == false;
@@ -13,7 +13,7 @@ Std.is(1, Int) == true;
 Std.is(1.5, Int) == false;
 Std.is(1.5, Float) == true;
 Std.is([], Array) == true;
-Std.is(unit.MyEnum.A, Array) == false;
+Std.is(cast unit.MyEnum.A, Array) == false;
 
 // instance
 #if !js
@@ -49,7 +49,7 @@ Std.int(-0.7) == 0;
 Std.int(-0.2) == 0;
 Std.int(0.7) == 0;
 Std.int(0.2) == 0;
-	
+
 // parseInt
 Std.parseInt("0") == 0;
 Std.parseInt("   5") == 5;
@@ -69,7 +69,7 @@ Std.parseInt("0XFF") == 255;
 Std.parseInt("0X123") == 291;
 Std.parseInt("0X01") == 1;
 Std.parseInt("0x01") == 1;
-	
+
 // parseFloat
 Std.parseFloat("0") == 0.;
 Std.parseFloat("   5.3") == 5.3;
@@ -84,10 +84,10 @@ Math.isNaN(Std.parseFloat(null)) == true;
 Std.parseFloat("5.3 ") == 5.3;
 Std.parseFloat("0.0") == 0.;
 Std.parseFloat("5.3 1") == 5.3;
-	
+
 // random
 var x = Std.random(2);
 x in [0,1];
 Std.random(1) == 0;
 Std.random(0) == 0;
-Std.random(-100) == 0;
+Std.random(-100) == 0;