2
0
Эх сурвалжийг харах

[java] Now Java uses native java.lang.Class<T> as the representation of Haxe's Class<T>. Fixes Issue #821
Fixed also small issue with CastDetection mapping Dynamic parameters to empty objects

Caue Waneck 13 жил өмнө
parent
commit
2fe77ed05a

+ 56 - 39
gencommon.ml

@@ -4539,13 +4539,6 @@ struct
   (* end of type parameter handling *)
   (* ****************************** *)
   
-  let rec change_dyn_tparams gen t = match gen.gfollow#run_f t with
-    | TInst(cl, p) -> TInst(cl, List.map (change_dyn_tparams gen) p)
-    | TEnum(e, p) -> TEnum(e, List.map (change_dyn_tparams gen) p)
-    | TType(t, p) -> TType(t, List.map (change_dyn_tparams gen) p)
-    | TDynamic _ -> t_empty
-    | _ -> t
-  
   let default_implementation gen maybe_empty_t =
     
     let current_ret_type = ref None in
@@ -4567,7 +4560,7 @@ struct
         | TField(ef, f) ->
           handle_type_parameter gen None e (run ef) f []
         | TArrayDecl el ->
-          let et = change_dyn_tparams gen e.etype in
+          let et = e.etype in
           let base_type = match follow et with
             | TInst({ cl_path = ([], "Array") }, bt :: []) -> bt
             | _ -> assert false
@@ -4585,10 +4578,8 @@ struct
             | _ -> Type.map_expr run e
           )
         | TNew (cl, tparams, [ maybe_empty ]) when is_some maybe_empty_t && type_iseq (get maybe_empty_t) maybe_empty.etype ->
-          let tparams = List.map (change_dyn_tparams gen) tparams in
           { e with eexpr = TNew(cl, tparams, [ maybe_empty ]); etype = TInst(cl, tparams) }
         | TNew (cl, tparams, eparams) ->
-          let tparams = List.map (change_dyn_tparams gen) tparams in
           let get_f t =
             match t with | TFun(p,_) -> List.map (fun (_,_,t) -> t) p | _ -> assert false
           in
@@ -5477,9 +5468,11 @@ struct
     mutable rcf_on_getset_field : texpr->texpr->string->int32 option->texpr option->bool->texpr;
     
     mutable rcf_on_call_field : texpr->texpr->string->int32 option->texpr list->texpr;
+    
+    mutable rcf_handle_statics : bool;
   }
   
-  let new_ctx gen ft object_iface optimize dynamic_getset_field dynamic_call_field hash_function lookup_function =
+  let new_ctx gen ft object_iface optimize dynamic_getset_field dynamic_call_field hash_function lookup_function handle_statics =
     {
       rcf_gen = gen;
       rcf_ft = ft;
@@ -5508,6 +5501,8 @@ struct
       
       rcf_on_getset_field = dynamic_getset_field;
       rcf_on_call_field = dynamic_call_field;
+      
+      rcf_handle_statics = handle_statics;
     }
   
   let priority = solve_deps name []
@@ -6131,11 +6126,18 @@ struct
       cf
     in
     
-    cl.cl_ordered_fields <- cl.cl_ordered_fields @ [create_empty; create];
-    cl.cl_fields <- PMap.add create_empty.cf_name create_empty cl.cl_fields;
-    cl.cl_fields <- PMap.add create.cf_name create cl.cl_fields;
-    if is_override then begin
-      cl.cl_overrides <- create_empty.cf_name :: create.cf_name :: cl.cl_overrides
+    (* if rcf_handle_statics is false, there is no reason to make createEmpty/create not be static *)
+    if ctx.rcf_handle_statics then begin
+      cl.cl_ordered_fields <- cl.cl_ordered_fields @ [create_empty; create];
+      cl.cl_fields <- PMap.add create_empty.cf_name create_empty cl.cl_fields;
+      cl.cl_fields <- PMap.add create.cf_name create cl.cl_fields;
+      if is_override then begin
+        cl.cl_overrides <- create_empty.cf_name :: create.cf_name :: cl.cl_overrides
+      end
+    end else begin
+      cl.cl_ordered_statics <- cl.cl_ordered_statics @ [create_empty; create];
+      cl.cl_statics <- PMap.add create_empty.cf_name create_empty cl.cl_statics;
+      cl.cl_statics <- PMap.add create.cf_name create cl.cl_statics
     end
     
   
@@ -6276,7 +6278,7 @@ struct
         { eexpr = TCall( { eexpr = TField({ eexpr = TConst(TThis); etype = TInst(cl, List.map snd cl.cl_types); epos = pos }, name); etype = fun_t; epos = pos  }, params ); etype = snd (get_args fun_t); epos = pos }
       in
       
-      let tf_args = tf_args @ [is_static, None] in
+      let tf_args = if ctx.rcf_handle_statics then tf_args @ [is_static, None] else tf_args in
       
       let fun_type = ref (TFun([], basic.tvoid)) in
       let fun_name = ctx.rcf_gen.gmk_internal_name "hx" ( (if is_set then "setField" else "getField") ^ (if is_float then "_f" else "") ) in
@@ -6398,7 +6400,11 @@ struct
         { eexpr = TSwitch(local_switch_var, cases, default); etype = basic.tvoid; epos = pos }
       in
       
-      let content = mk_block { eexpr = TIf(is_static_local, mk_switch true, Some(mk_switch false)); etype = basic.tvoid; epos = pos } in
+      let content = if ctx.rcf_handle_statics then 
+        mk_block { eexpr = TIf(is_static_local, mk_switch true, Some(mk_switch false)); etype = basic.tvoid; epos = pos } 
+      else
+        mk_block (mk_switch false)
+      in
       
       let is_override = match cl.cl_super with
         | Some (cl, _) when is_hxgen (TClassDecl cl) -> true
@@ -6439,7 +6445,7 @@ struct
     let tf_args, args = fun_args tf_args, field in
     
     let rett = if is_float then basic.tfloat else t_dynamic in
-    let tf_args, args = tf_args @ [ "isStatic", false, basic.tbool ], args @ [is_static] in
+    let tf_args, args = if ctx.rcf_handle_statics then tf_args @ [ "isStatic", false, basic.tbool ], args @ [is_static] else tf_args, args in
     let tf_args, args = if is_set then tf_args @ [ "setVal", false, rett ], args @ [get set_option] else tf_args, args in
     let tf_args, args = tf_args @ [ "throwErrors",false,basic.tbool ], args @ [throw_errors] in
     let tf_args, args = if is_set || is_float then tf_args, args else tf_args @ [ "isCheck", false, basic.tbool ], args @ [{ eexpr = TConst(TBool false); etype = basic.tbool; epos = pos }] in
@@ -6481,7 +6487,7 @@ struct
     in
     
     (* Type.getClassFields() *)
-    let class_fields =
+    if ctx.rcf_handle_statics then begin
       let name = gen.gmk_internal_name "hx" "classFields" in
       let v_base_arr = alloc_var "baseArr" (basic.tarray basic.tstring) in
       let base_arr = mk_local v_base_arr pos in
@@ -6518,8 +6524,7 @@ struct
       } in
       
       cf.cf_expr <- Some { eexpr = TFunction(fn); etype = t; epos = pos }
-    in
-    ignore class_fields;
+    end;
     
     let fields =
       (*
@@ -6539,7 +6544,7 @@ struct
       let v_base_arr, v_is_inst = alloc_var "baseArr" (basic.tarray basic.tstring), alloc_var "isInstanceFields" basic.tbool in
       let base_arr, is_inst = mk_local v_base_arr pos, mk_local v_is_inst pos in
       
-      let tf_args = [ v_base_arr,None; v_is_inst, None ] in
+      let tf_args = (v_base_arr,None) :: (if ctx.rcf_handle_statics then [v_is_inst, None] else []) in
       let t = TFun(fun_args tf_args, basic.tvoid) in
       let cf = mk_class_field name t false pos (Method MethNormal) [] in
       cl.cl_ordered_fields <- cl.cl_ordered_fields @ [cf];
@@ -6580,7 +6585,7 @@ struct
                   eexpr = TField({ eexpr = TConst(TSuper); etype = TInst(cl, List.map snd cl.cl_types); epos = pos }, name);
                   etype = t; 
                   epos = pos 
-                }, [base_arr; is_inst]);
+                }, base_arr :: (if ctx.rcf_handle_statics then [is_inst] else []));
                 etype = basic.tvoid;
                 epos = pos
               }] 
@@ -6594,19 +6599,24 @@ struct
           None
       in
       
+      let expr_contents = map_fields (collect_fields cl (Some false) (Some false)) in
+      let expr_contents = if ctx.rcf_handle_statics then 
+        expr_contents @
+        [ {
+          eexpr = TIf(is_inst,
+            { eexpr = TBlock( map_fields (collect_fields cl (Some true) (Some false)) ); etype = basic.tvoid; epos = pos },
+            if_not_inst
+          ); 
+          etype = basic.tvoid; 
+          epos = pos 
+        } ]
+      else
+        expr_contents @ (if is_some if_not_inst then [ get if_not_inst ] else [])
+      in
+      
       let expr = 
       {
-        eexpr = TBlock(
-          ( map_fields (collect_fields cl (Some false) (Some false)) ) @
-          [ {
-            eexpr = TIf(is_inst,
-              { eexpr = TBlock( map_fields (collect_fields cl (Some true) (Some false)) ); etype = basic.tvoid; epos = pos },
-              if_not_inst
-            ); 
-            etype = basic.tvoid; 
-            epos = pos 
-          } ]
-        );
+        eexpr = TBlock( expr_contents );
         etype = basic.tvoid;
         epos = pos;
       } in
@@ -6882,7 +6892,7 @@ struct
     
     let is_static = alloc_var "isStatic" basic.tbool in
     let dynamic_arg = alloc_var "dynargs" (basic.tarray t_dynamic) in
-    let all_args = field_args @ [ is_static,None; dynamic_arg,None ] in
+    let all_args = field_args @ (if ctx.rcf_handle_statics then [ is_static,None; dynamic_arg,None ] else [ dynamic_arg, None ] ) in
     let fun_t = TFun(fun_args all_args, t_dynamic) in
     
     let this_t = TInst(cl, List.map snd cl.cl_types) in
@@ -6980,11 +6990,13 @@ struct
       let statics = collect_fields cl (Some true) (Some true) in
       let nonstatics = collect_fields cl (Some true) (Some false) in
       
+      if ctx.rcf_handle_statics then 
       {
         eexpr = TIf(mk_local is_static pos, mk_switch_dyn statics true, Some(mk_switch_dyn nonstatics false));
         etype = basic.tvoid;
         epos = pos;
-      }
+      } else
+        mk_switch_dyn nonstatics false
     in
     
     dyn_fun.cf_expr <- Some 
@@ -7108,7 +7120,12 @@ struct
             etype = TFun([gen.gmk_internal_name "fn" "dynargs", false, basic.tarray t_dynamic], t_dynamic);
             epos = pos
           }, 
-          (List.map (fun (v,_) -> mk_this v.v_name v.v_type) field_args) @ [ { eexpr = TConst(TBool false); etype = basic.tbool; epos = pos }; call_arg ]
+          (List.map (fun (v,_) -> mk_this v.v_name v.v_type) field_args) @ 
+            (if ctx.rcf_handle_statics then 
+              [ { eexpr = TConst(TBool false); etype = basic.tbool; epos = pos }; call_arg ]
+            else
+              [ call_arg ]
+            )
         );
         etype = t_dynamic;
         epos = pos
@@ -7312,7 +7329,7 @@ struct
         (implement_dynamics ctx cl);
         (if not (PMap.mem (gen.gmk_internal_name "hx" "lookupField") cl.cl_fields) then implement_final_lookup ctx cl);
         (if not (PMap.mem (gen.gmk_internal_name "hx" "classFields") cl.cl_fields) then implement_fields ctx cl);
-        (if not (PMap.mem (gen.gmk_internal_name "hx" "getClassStatic") cl.cl_statics) then implement_get_class ctx cl);
+        (if ctx.rcf_handle_statics && not (PMap.mem (gen.gmk_internal_name "hx" "getClassStatic") cl.cl_statics) then implement_get_class ctx cl);
         (if not (PMap.mem (gen.gmk_internal_name "hx" "create") cl.cl_fields) then implement_create_empty ctx cl);
         None
       | _ -> None) 

+ 1 - 1
gencs.ml

@@ -1298,7 +1298,7 @@ let configure gen =
   
   let rcf_ctx = ReflectionCFs.new_ctx gen closure_t object_iface true rcf_on_getset_field rcf_on_call_field (fun hash hash_array ->
     { hash with eexpr = TCall(rcf_static_find, [hash; hash_array]); etype=basic.tint }
-  ) (fun hash -> { hash with eexpr = TCall(rcf_static_lookup, [hash]); etype = gen.gcon.basic.tstring } ) in
+  ) (fun hash -> { hash with eexpr = TCall(rcf_static_lookup, [hash]); etype = gen.gcon.basic.tstring } ) true in
   
   ReflectionCFs.UniversalBaseClass.default_config gen (get_cl (Hashtbl.find gen.gtypes (["haxe";"lang"],"HxObject")) ) object_iface dynamic_object;
   

+ 6 - 28
genjava.ml

@@ -702,15 +702,15 @@ let configure gen =
     | (ns,clname) -> path_s (change_ns ns, change_clname clname)
   in
   
-  let cl_cl = get_cl (Hashtbl.find gen.gtypes (["haxe";"lang"],"Class")) in
+  let cl_cl = get_cl (Hashtbl.find gen.gtypes (["java";"lang"],"Class")) in
   
   let rec real_type t =
     let t = gen.gfollow#run_f t in
     match t with
       | TInst( { cl_path = (["haxe"], "Int32") }, [] ) -> gen.gcon.basic.tint
       | TInst( { cl_path = (["haxe"], "Int64") }, [] ) -> ti64
-      | TInst( { cl_path = ([], "Class") }, _  )
-      | TInst( { cl_path = ([], "Enum") }, _  ) -> TInst(cl_cl,[])
+      | TInst( { cl_path = ([], "Class") }, p  )
+      | TInst( { cl_path = ([], "Enum") }, p  ) -> TInst(cl_cl,p)
       | TEnum _
       | TInst _ -> t
       | TType({ t_path = ([], "Null") }, [t]) when is_java_basic_type t -> t_dynamic
@@ -763,7 +763,7 @@ let configure gen =
       | TInst ({ cl_kind = KTypeParameter; cl_path=p }, []) -> snd p
       | TMono r -> (match !r with | None -> "java.lang.Object" | Some t -> t_s (run_follow gen t))
       | TInst ({ cl_path = [], "String" }, []) -> "java.lang.String"
-      | TInst ({ cl_path = [], "Class" }, _) | TInst ({ cl_path = [], "Enum" }, _) -> "haxe.lang.Class"
+      | TInst ({ cl_path = [], "Class" }, _) | TInst ({ cl_path = [], "Enum" }, _) -> assert false (* should have been converted earlier *)
       | TEnum (({e_path = p;} as e), params) -> (path_param_s (TEnumDecl e) p params)
       | TInst (({cl_path = p;} as cl), params) -> (path_param_s (TClassDecl cl) p params)
       | TType (({t_path = p;} as t), params) -> (path_param_s (TTypeDecl t) p params)
@@ -1484,12 +1484,10 @@ let configure gen =
   
   let rcf_ctx = ReflectionCFs.new_ctx gen closure_t object_iface false rcf_on_getset_field rcf_on_call_field (fun hash hash_array ->
     { hash with eexpr = TCall(rcf_static_find, [hash; hash_array]); etype=basic.tint }
-  ) (fun hash -> hash ) in
+  ) (fun hash -> hash ) false in
   
   ReflectionCFs.UniversalBaseClass.default_config gen (get_cl (Hashtbl.find gen.gtypes (["haxe";"lang"],"HxObject")) ) object_iface dynamic_object;
   
-  ReflectionCFs.implement_class_methods rcf_ctx ( get_cl (Hashtbl.find gen.gtypes (["haxe";"lang"],"Class")) );
-  
   ReflectionCFs.configure_dynamic_field_access rcf_ctx false;
   
   let closure_func = ReflectionCFs.implement_closure_cl rcf_ctx ( get_cl (Hashtbl.find gen.gtypes (["haxe";"lang"],"Closure")) ) in
@@ -1641,31 +1639,11 @@ let configure gen =
       (fun v e -> e)
   );
   
-  let native_class_wrapper = get_cl (get_type gen (["haxe";"lang"], "NativeClassWrapper")) in
-  
   let get_typeof e =
     { e with eexpr = TCall( { eexpr = TLocal( alloc_var "__typeof__" t_dynamic ); etype = t_dynamic; epos = e.epos }, [e] ) }
   in
   
-  ClassInstance.configure gen (ClassInstance.traverse gen (fun e mt ->
-    if is_hxgen mt then begin
-      {
-        eexpr = TCall({
-          eexpr = TField(e, gen.gmk_internal_name "hx" "getClassStatic");
-          etype = TFun([], e.etype);
-          epos = e.epos
-        }, []);
-        etype = e.etype;
-        epos = e.epos;
-      }
-    end else begin
-      {
-        eexpr = TNew(native_class_wrapper, [], [ get_typeof e ]);
-        etype = e.etype;
-        epos = e.epos
-      }
-    end
-  ));
+  ClassInstance.configure gen (ClassInstance.traverse gen (fun e mt -> get_typeof e));
   
   (*let v = alloc_var "$type_param" t_dynamic in*)
   TypeParams.configure gen (fun ecall efield params elist ->

+ 4 - 4
std/java/_std/Reflect.hx

@@ -36,7 +36,7 @@ import java.Boot;
 	**/
 	@:functionBody('
 		if (o instanceof haxe.lang.IHxObject)
-			return ((haxe.lang.IHxObject) o).__hx_getField(field, false, false, true) != haxe.lang.Runtime.undefined;
+			return ((haxe.lang.IHxObject) o).__hx_getField(field, false, true) != haxe.lang.Runtime.undefined;
 		
 		return haxe.lang.Runtime.slowHasField(o, field);
 	')
@@ -50,7 +50,7 @@ import java.Boot;
 	**/
 	@:functionBody('
 		if (o instanceof haxe.lang.IHxObject)
-			return ((haxe.lang.IHxObject) o).__hx_getField(field, false, false, false);
+			return ((haxe.lang.IHxObject) o).__hx_getField(field, false, false);
 		
 		return haxe.lang.Runtime.slowGetField(o, field, false);
 	')
@@ -65,7 +65,7 @@ import java.Boot;
 	**/
 	@:functionBody('
 		if (o instanceof haxe.lang.IHxObject)
-			((haxe.lang.IHxObject) o).__hx_setField(field, false, value);
+			((haxe.lang.IHxObject) o).__hx_setField(field, value);
 		
 		 haxe.lang.Runtime.slowSetField(o, field, value);
 	')
@@ -108,7 +108,7 @@ import java.Boot;
 		if (o instanceof haxe.lang.IHxObject)
 		{
 			Array<String> ret = new Array<String>();
-			((haxe.lang.IHxObject) o).__hx_getFields(ret, false);
+			((haxe.lang.IHxObject) o).__hx_getFields(ret);
 			return ret;
 		} else {
 			Array<String> ret = new Array<String>();

+ 27 - 35
std/java/_std/Type.hx

@@ -38,13 +38,7 @@ enum ValueType {
 @:core_api class Type {
 	
 	@:functionBody('
-		if (o instanceof haxe.lang.IHxObject)
-		{
-			return ((haxe.lang.IHxObject) o).__hx_getClass();
-		} else {
-			//TODO implement slow method
-			return null;
-		}
+		return (java.lang.Class<T>) o.getClass();
 	')
 	public static function getClass<T>( o : T ) : Class<T> untyped 
 	{
@@ -52,13 +46,7 @@ enum ValueType {
 	}
 	
 	@:functionBody('
-		if (o instanceof haxe.lang.IHxObject)
-		{
-			return ((haxe.lang.IHxObject) o).__hx_getClass();
-		} else {
-			//TODO implement slow method
-			return null;
-		}
+		return o.getClass();
 	')
 	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped 
 	{
@@ -71,7 +59,7 @@ enum ValueType {
 	}
 	
 	public static function getClassName( c : Class<Dynamic> ) : String untyped {
-		var name:String = cast(c.nativeType(), java.lang.Class<Dynamic>).getName();
+		var name:String = c.getName();
 		if (name.startsWith("haxe.root."))
 			return name.substr(10);
 			
@@ -86,7 +74,7 @@ enum ValueType {
 	}
 
 	public static function getEnumName( e : Enum<Dynamic> ) : String untyped {
-		return cast(e.nativeType(), java.lang.Class<Dynamic>).getName();
+		return e.getName();
 	}
 
 	public static function resolveClass( name : String ) : Class<Dynamic> untyped 
@@ -102,22 +90,25 @@ enum ValueType {
 
 	public static function createInstance<T>( cl : Class<T>, args : Array<Dynamic> ) : T untyped 
 	{
+		//TODO first see if __hx_create exists
 		return cl.__hx_create(args);
 	}
 
 	public static function createEmptyInstance<T>( cl : Class<T> ) : T untyped 
 	{
+		//TODO first see if __hx_createEmpty exists
 		return cl.__hx_createEmpty();
 	}
 	
 	@:functionBody('
-		if (params == null) {
-			T ret = (T) e.__hx_getField(constr, false, false, false);
+		if (params == null) 
+		{
+			T ret = (T) haxe.lang.Runtime.slowGetField(e, constr, false);
 			if (ret instanceof haxe.lang.Function)
 				throw haxe.lang.HaxeException.wrap("Constructor " + constr + " needs parameters");
 			return ret;
 		} else {
-			return (T)e.__hx_invokeField(constr, false, params);
+			return (T) haxe.lang.Runtime.slowCallField(e, constr, params);
 		}
 	')
 	public static function createEnum<T>( e : Enum<T>, constr : String, ?params : Array<Dynamic> ) : T 
@@ -126,32 +117,33 @@ enum ValueType {
 	}
 	
 	@:functionBody('
-		if (params == null) {
+		/*if (params == null) {
 			T ret = (T) e.__hx_getField(index + "", false, false, false);
 			if (ret instanceof haxe.lang.Function)
 				throw haxe.lang.HaxeException.wrap("Constructor " + index + " needs parameters");
 			return ret;
 		} else {
 			return (T)e.__hx_invokeField(index + "", false, params);
-		}
+		}*/
+		return null; //TODO
 	')
 	public static function createEnumIndex<T>( e : Enum<T>, index : Int, ?params : Array<Dynamic> ) : T {
 		return null;
 	}
-
-	static function describe( t : Dynamic, fact : Bool ) : Array<String> untyped {
-		return null;
-	}
 	
 	@:functionBody('
-		if (c instanceof haxe.lang.IHxObject)
+		Array<String> ret = new Array<String>();
+		for (java.lang.reflect.Field f : c.getDeclaredFields())
 		{
-			Array<String> ret = new Array<String>();
-			((haxe.lang.IHxObject) c).__hx_getFields(ret, true);
-			return ret;
-		} else {
-			return null;
+			ret.push(f.getName());
 		}
+		
+		for (java.lang.reflect.Method m : c.getDeclaredMethods())
+		{
+			ret.push(m.getName());
+		}
+		
+		return ret;
 	')
 	public static function getInstanceFields( c : Class<Dynamic> ) : Array<String> {
 		return null;
@@ -170,8 +162,8 @@ enum ValueType {
 		
 		if (v instanceof haxe.lang.IHxObject) {
 			haxe.lang.IHxObject vobj = (haxe.lang.IHxObject) v;
-			haxe.lang.Class cl = vobj.__hx_getClass();
-			if (cl == null)
+			java.lang.Class cl = vobj.getClass();
+			if (v instanceof haxe.lang.DynamicObject)
 				return ValueType.TObject;
 			else if (v instanceof haxe.lang.Enum)
 				return ValueType.TEnum(cl);
@@ -186,11 +178,11 @@ enum ValueType {
 		} else if (v instanceof haxe.lang.Function) {
 			return ValueType.TFunction;
 		} else if (v instanceof java.lang.Enum) {
-			return ValueType.TEnum(new haxe.lang.NativeClassWrapper(v.getClass()));
+			return ValueType.TEnum(v.getClass());
 		} else if (v instanceof java.lang.Boolean) {
 			return ValueType.TBool;
 		} else {
-			return ValueType.TClass(new haxe.lang.NativeClassWrapper(v.getClass()));
+			return ValueType.TClass(v.getClass());
 		}
 	')
 	public static function typeof( v : Dynamic ) : ValueType untyped 

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
std/java/_std/haxe/lang/HxObject.hx


+ 10 - 10
std/java/_std/haxe/lang/Runtime.hx

@@ -12,28 +12,28 @@ package haxe.lang;
 	public static java.lang.Object getField(haxe.lang.IHxObject obj, java.lang.String field, boolean throwErrors)
 	{
 		if (obj == null && !throwErrors) return null;
-		return obj.__hx_getField(field, false, throwErrors, false);
+		return obj.__hx_getField(field, throwErrors, false);
 	}
 	
 	public static double getField_f(haxe.lang.IHxObject obj, java.lang.String field, boolean throwErrors)
 	{
 		if (obj == null && !throwErrors) return 0.0;
-		return obj.__hx_getField_f(field, false, throwErrors);
+		return obj.__hx_getField_f(field, throwErrors);
 	}
 	
 	public static java.lang.Object setField(haxe.lang.IHxObject obj, java.lang.String field, java.lang.Object value)
 	{
-		return obj.__hx_setField(field, false, value);
+		return obj.__hx_setField(field, value);
 	}
 	
 	public static double setField_f(haxe.lang.IHxObject obj, java.lang.String field, double value)
 	{
-		return obj.__hx_setField_f(field, false, value);
+		return obj.__hx_setField_f(field, value);
 	}
 	
 	public static java.lang.Object callField(haxe.lang.IHxObject obj, java.lang.String field, Array<?> args)
 	{
-		return obj.__hx_invokeField(field, false, args);
+		return obj.__hx_invokeField(field, args);
 	}
 ')
 @:keep private class Runtime 
@@ -432,7 +432,7 @@ package haxe.lang;
 	@:functionBody('
 		if (obj instanceof haxe.lang.IHxObject)
 		{
-			return ((haxe.lang.IHxObject) obj).__hx_invokeField(field, false, args);
+			return ((haxe.lang.IHxObject) obj).__hx_invokeField(field, args);
 		}
 		
 		return slowCallField(obj, field, args);
@@ -445,7 +445,7 @@ package haxe.lang;
 	@:functionBody('
 	
 		if (obj instanceof haxe.lang.IHxObject)
-			return ((haxe.lang.IHxObject) obj).__hx_getField(field, false, throwErrors, false);
+			return ((haxe.lang.IHxObject) obj).__hx_getField(field, throwErrors, false);
 		
 		return slowGetField(obj, field, throwErrors);
 	
@@ -458,7 +458,7 @@ package haxe.lang;
 	@:functionBody('
 	
 		if (obj instanceof haxe.lang.IHxObject)
-			return ((haxe.lang.IHxObject) obj).__hx_getField_f(field, false, throwErrors);
+			return ((haxe.lang.IHxObject) obj).__hx_getField_f(field, throwErrors);
 		
 		return toDouble(slowGetField(obj, field, throwErrors));
 	
@@ -471,7 +471,7 @@ package haxe.lang;
 	@:functionBody('
 	
 		if (obj instanceof haxe.lang.IHxObject)
-			return ((haxe.lang.IHxObject) obj).__hx_setField(field, false, value);
+			return ((haxe.lang.IHxObject) obj).__hx_setField(field, value);
 		
 		return slowSetField(obj, field, value);
 	
@@ -484,7 +484,7 @@ package haxe.lang;
 	@:functionBody('
 	
 		if (obj instanceof haxe.lang.IHxObject)
-			return ((haxe.lang.IHxObject) obj).__hx_setField_f(field, false, value);
+			return ((haxe.lang.IHxObject) obj).__hx_setField_f(field, value);
 		
 		return toDouble(slowSetField(obj, field, value));
 	

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно