|
@@ -750,9 +750,34 @@ let generate con =
|
|
|
ns
|
|
|
in
|
|
|
|
|
|
+ let change_class_field cl name =
|
|
|
+ let change_ctor name = if name = "new" then snd cl.cl_path else name in
|
|
|
+ let rec gen name =
|
|
|
+ let name = name ^ "_" ^ name in
|
|
|
+ if PMap.mem name cl.cl_fields || PMap.mem name cl.cl_statics then gen name
|
|
|
+ else name
|
|
|
+ in
|
|
|
+ change_id (if name = snd cl.cl_path then gen name else (change_ctor name))
|
|
|
+ in
|
|
|
+ let change_enum_field enum name =
|
|
|
+ let rec gen name =
|
|
|
+ let name = name ^ "_" ^ name in
|
|
|
+ if PMap.mem name enum.e_constrs then gen name
|
|
|
+ else name
|
|
|
+ in
|
|
|
+ change_id (if name = snd enum.e_path then gen name else name)
|
|
|
+ in
|
|
|
let change_field = change_id in
|
|
|
let write_id w name = write w (change_id name) in
|
|
|
+ let write_class_field cl w name = write w (change_class_field cl name) in
|
|
|
+ let write_enum_field enum w name = write w (change_enum_field enum name) in
|
|
|
let write_field w name = write w (change_field name) in
|
|
|
+ let get_write_field field_access =
|
|
|
+ match field_access with
|
|
|
+ | FInstance (cl,_,f) | FStatic (cl,f) | FClosure (Some (cl,_),f) -> write_class_field cl
|
|
|
+ | FEnum (enum,f) -> write_enum_field enum
|
|
|
+ | _ -> write_field
|
|
|
+ in
|
|
|
|
|
|
let ptr =
|
|
|
if Common.defined gen.gcon Define.Unsafe then
|
|
@@ -1221,7 +1246,7 @@ let generate con =
|
|
|
if is_event (gen.greal_type ef.etype) propname then begin
|
|
|
expr_s w ef;
|
|
|
write w ".";
|
|
|
- write_field w propname;
|
|
|
+ (get_write_field f) w propname;
|
|
|
write w " += ";
|
|
|
expr_s w ev
|
|
|
end else
|
|
@@ -1232,7 +1257,7 @@ let generate con =
|
|
|
if is_event (gen.greal_type ef.etype) propname then begin
|
|
|
expr_s w ef;
|
|
|
write w ".";
|
|
|
- write_field w propname;
|
|
|
+ (get_write_field f) w propname;
|
|
|
write w " -= ";
|
|
|
expr_s w ev
|
|
|
end else
|
|
@@ -1246,7 +1271,7 @@ let generate con =
|
|
|
else begin
|
|
|
expr_s w ef;
|
|
|
write w ".";
|
|
|
- write_field w propname
|
|
|
+ (get_write_field f) w propname
|
|
|
end
|
|
|
else
|
|
|
do_call w e []
|
|
@@ -1256,17 +1281,17 @@ let generate con =
|
|
|
if is_extern_prop (gen.greal_type ef.etype) propname then begin
|
|
|
expr_s w ef;
|
|
|
write w ".";
|
|
|
- write_field w propname;
|
|
|
+ (get_write_field f) w propname;
|
|
|
write w " = ";
|
|
|
expr_s w v
|
|
|
end else
|
|
|
do_call w e [v]
|
|
|
- | TField (e, (FStatic(_, cf) | FInstance(_, _, cf))) when Meta.has Meta.Native cf.cf_meta ->
|
|
|
+ | TField (e, ((FStatic(_, cf) | FInstance(_, _, cf)) as f)) when Meta.has Meta.Native cf.cf_meta ->
|
|
|
let rec loop meta = match meta with
|
|
|
| (Meta.Native, [EConst (String s), _],_) :: _ ->
|
|
|
- expr_s w e; write w "."; write_field w s
|
|
|
+ expr_s w e; write w "."; (get_write_field f) w s
|
|
|
| _ :: tl -> loop tl
|
|
|
- | [] -> expr_s w e; write w "."; write_field w (cf.cf_name)
|
|
|
+ | [] -> expr_s w e; write w "."; (get_write_field f) w (cf.cf_name)
|
|
|
in
|
|
|
loop cf.cf_meta
|
|
|
| TConst c ->
|
|
@@ -1309,9 +1334,9 @@ let generate con =
|
|
|
| TIdent "__sizeof__" -> write w "sizeof"
|
|
|
| TLocal var ->
|
|
|
write_id w var.v_name
|
|
|
- | TField (_, FEnum(e, ef)) ->
|
|
|
+ | TField (_, (FEnum(e, ef) as f)) ->
|
|
|
let s = ef.ef_name in
|
|
|
- print w "%s." ("global::" ^ module_s (TEnumDecl e)); write_field w s
|
|
|
+ print w "%s." ("global::" ^ module_s (TEnumDecl e)); (get_write_field f) w s
|
|
|
| TArray (e1, e2) ->
|
|
|
expr_s w e1; write w "["; expr_s w e2; write w "]"
|
|
|
| TBinop ((Ast.OpAssign as op), e1, e2)
|
|
@@ -1337,7 +1362,7 @@ let generate con =
|
|
|
| TAbstractDecl a -> write w (t_s (TAbstract(a, List.map (fun _ -> t_empty) a.a_params)))
|
|
|
);
|
|
|
write w ".";
|
|
|
- write_field w (field_name s)
|
|
|
+ (get_write_field s) w (field_name s)
|
|
|
| TField (e, s) when is_pointer gen e.etype ->
|
|
|
(* take off the extra cast if possible *)
|
|
|
let e = match e.eexpr with
|
|
@@ -1345,9 +1370,9 @@ let generate con =
|
|
|
e1
|
|
|
| _ -> e
|
|
|
in
|
|
|
- expr_s w e; write w "->"; write_field w (field_name s)
|
|
|
+ expr_s w e; write w "->"; (get_write_field s) w (field_name s)
|
|
|
| TField (e, s) ->
|
|
|
- expr_s w e; write w "."; write_field w (field_name s)
|
|
|
+ expr_s w e; write w "."; (get_write_field s) w (field_name s)
|
|
|
| TTypeExpr mt ->
|
|
|
(match change_md mt with
|
|
|
| TClassDecl { cl_path = (["haxe"], "Int64") } -> write w ("global::" ^ module_s mt)
|
|
@@ -1946,7 +1971,7 @@ let generate con =
|
|
|
let visibility = if is_interface then "" else "public" in
|
|
|
let visibility, modifiers = get_fun_modifiers event.cf_meta visibility ["event"] in
|
|
|
let v_n = if is_static then "static" else "" in
|
|
|
- gen_field_decl w visibility v_n modifiers (t_s (run_follow gen t)) (change_field event.cf_name);
|
|
|
+ gen_field_decl w visibility v_n modifiers (t_s (run_follow gen t)) (change_class_field cl event.cf_name);
|
|
|
if custom && not is_interface then begin
|
|
|
write w " ";
|
|
|
begin_block w;
|
|
@@ -1982,7 +2007,7 @@ let generate con =
|
|
|
let v_n = if is_static then "static" else if is_override && not is_interface then "override" else if is_virtual then "virtual" else "" in
|
|
|
gen_nocompletion w prop.cf_meta;
|
|
|
|
|
|
- gen_field_decl w visibility v_n modifiers (t_s (run_follow gen t)) (change_field prop.cf_name);
|
|
|
+ gen_field_decl w visibility v_n modifiers (t_s (run_follow gen t)) (change_class_field cl prop.cf_name);
|
|
|
|
|
|
let check cf = match cf with
|
|
|
| Some ({ cf_overloads = o :: _ } as cf) ->
|
|
@@ -2053,7 +2078,7 @@ let generate con =
|
|
|
gen_attributes w cf.cf_meta;
|
|
|
let is_interface = cl.cl_interface in
|
|
|
let name, is_new, is_explicit_iface = match cf.cf_name with
|
|
|
- | "new" -> snd cl.cl_path, true, false
|
|
|
+ | "new" -> cf.cf_name, true, false
|
|
|
| name when String.contains name '.' ->
|
|
|
let fn_name, path = parse_explicit_iface name in
|
|
|
(s_type_path path) ^ "." ^ fn_name, false, true
|
|
@@ -2094,7 +2119,7 @@ let generate con =
|
|
|
let access, modifiers = get_fun_modifiers cf.cf_meta "public" [] in
|
|
|
let modifiers = modifiers @ modf in
|
|
|
gen_nocompletion w cf.cf_meta;
|
|
|
- gen_field_decl w access (if is_static then "static" else "") modifiers (t_s (run_follow gen cf.cf_type)) (change_field name);
|
|
|
+ gen_field_decl w access (if is_static then "static" else "") modifiers (t_s (run_follow gen cf.cf_type)) (change_class_field cl name);
|
|
|
(match cf.cf_expr with
|
|
|
| Some e ->
|
|
|
write w " = ";
|
|
@@ -2157,7 +2182,7 @@ let generate con =
|
|
|
gen_nocompletion w cf.cf_meta;
|
|
|
|
|
|
(* public static void funcName *)
|
|
|
- gen_field_decl w visibility v_n modifiers (if not is_new then (rett_s (run_follow gen ret_type)) else "") (change_field name);
|
|
|
+ gen_field_decl w visibility v_n modifiers (if not is_new then (rett_s (run_follow gen ret_type)) else "") (change_class_field cl name);
|
|
|
|
|
|
let params, params_ext = get_string_params cl cf.cf_params in
|
|
|
(* <T>(string arg1, object arg2) with T : object *)
|