|
@@ -571,7 +571,7 @@ let type_assign ctx e1 e2 with_type p =
|
|
dispatcher#accessor_call fa [] [e2]
|
|
dispatcher#accessor_call fa [] [e2]
|
|
| AKAccess(a,tl,c,ebase,ekey) ->
|
|
| AKAccess(a,tl,c,ebase,ekey) ->
|
|
let e2 = type_rhs WithType.value in
|
|
let e2 = type_rhs WithType.value in
|
|
- mk_array_set_call ctx (AbstractCast.find_array_access ctx a tl ekey (Some e2) p) c ebase p
|
|
|
|
|
|
+ mk_array_set_call ctx (AbstractCast.find_array_write_access ctx a tl ekey e2 p) c ebase p
|
|
| AKResolve(sea,name) ->
|
|
| AKResolve(sea,name) ->
|
|
let eparam = sea.se_this in
|
|
let eparam = sea.se_this in
|
|
let e_name = Texpr.Builder.make_string ctx.t name null_pos in
|
|
let e_name = Texpr.Builder.make_string ctx.t name null_pos in
|
|
@@ -677,7 +677,7 @@ let type_assign_op ctx op e1 e2 with_type p =
|
|
let t_lhs,e_rhs = field_rhs op fa.fa_field ef in
|
|
let t_lhs,e_rhs = field_rhs op fa.fa_field ef in
|
|
set vr sea.se_access t_lhs e_rhs [ef]
|
|
set vr sea.se_access t_lhs e_rhs [ef]
|
|
| AKAccess(a,tl,c,ebase,ekey) ->
|
|
| AKAccess(a,tl,c,ebase,ekey) ->
|
|
- let cf_get,tf_get,r_get,ekey,_ = AbstractCast.find_array_access ctx a tl ekey None p in
|
|
|
|
|
|
+ let cf_get,tf_get,r_get,ekey = AbstractCast.find_array_read_access ctx a tl ekey p in
|
|
(* bind complex keys to a variable so they do not make it into the output twice *)
|
|
(* bind complex keys to a variable so they do not make it into the output twice *)
|
|
let save = save_locals ctx in
|
|
let save = save_locals ctx in
|
|
let maybe_bind_to_temp e = match Optimizer.make_constant_expression ctx e with
|
|
let maybe_bind_to_temp e = match Optimizer.make_constant_expression ctx e with
|
|
@@ -689,13 +689,12 @@ let type_assign_op ctx op e1 e2 with_type p =
|
|
in
|
|
in
|
|
let ekey,ekey' = maybe_bind_to_temp ekey in
|
|
let ekey,ekey' = maybe_bind_to_temp ekey in
|
|
let ebase,ebase' = maybe_bind_to_temp ebase in
|
|
let ebase,ebase' = maybe_bind_to_temp ebase in
|
|
- let eget = mk_array_get_call ctx (cf_get,tf_get,r_get,ekey,None) c ebase p in
|
|
|
|
|
|
+ let eget = mk_array_get_call ctx (cf_get,tf_get,r_get,ekey) c ebase p in
|
|
let eget = type_binop2 ctx op eget e2 true WithType.value p in
|
|
let eget = type_binop2 ctx op eget e2 true WithType.value p in
|
|
let vr = new value_reference ctx in
|
|
let vr = new value_reference ctx in
|
|
let eget = BinopResult.to_texpr vr eget (fun e -> e) in
|
|
let eget = BinopResult.to_texpr vr eget (fun e -> e) in
|
|
unify ctx eget.etype r_get p;
|
|
unify ctx eget.etype r_get p;
|
|
- let cf_set,tf_set,r_set,ekey,eget = AbstractCast.find_array_access ctx a tl ekey (Some eget) p in
|
|
|
|
- let eget = match eget with None -> die "" __LOC__ | Some e -> e in
|
|
|
|
|
|
+ let cf_set,tf_set,r_set,ekey,eget = AbstractCast.find_array_write_access ctx a tl ekey eget p in
|
|
let et = type_module_type ctx (TClassDecl c) None p in
|
|
let et = type_module_type ctx (TClassDecl c) None p in
|
|
let e = match cf_set.cf_expr,cf_get.cf_expr with
|
|
let e = match cf_set.cf_expr,cf_get.cf_expr with
|
|
| None,None ->
|
|
| None,None ->
|
|
@@ -883,7 +882,7 @@ let type_unop ctx op flag e with_type p =
|
|
let evar_key = mk (TVar(v_key,Some ekey)) ctx.com.basic.tvoid ekey.epos in
|
|
let evar_key = mk (TVar(v_key,Some ekey)) ctx.com.basic.tvoid ekey.epos in
|
|
let ekey = mk (TLocal v_key) ekey.etype ekey.epos in
|
|
let ekey = mk (TLocal v_key) ekey.etype ekey.epos in
|
|
(* get *)
|
|
(* get *)
|
|
- let e_get = mk_array_get_call ctx (AbstractCast.find_array_access_raise ctx a tl ekey None p) c ebase p in
|
|
|
|
|
|
+ let e_get = mk_array_get_call ctx (AbstractCast.find_array_read_access_raise ctx a tl ekey p) c ebase p in
|
|
let v_get = alloc_var VGenerated "tmp" e_get.etype e_get.epos in
|
|
let v_get = alloc_var VGenerated "tmp" e_get.etype e_get.epos in
|
|
let ev_get = mk (TLocal v_get) v_get.v_type p in
|
|
let ev_get = mk (TLocal v_get) v_get.v_type p in
|
|
let evar_get = mk (TVar(v_get,Some e_get)) ctx.com.basic.tvoid p in
|
|
let evar_get = mk (TVar(v_get,Some e_get)) ctx.com.basic.tvoid p in
|
|
@@ -891,11 +890,11 @@ let type_unop ctx op flag e with_type p =
|
|
let e_one = mk (TConst (TInt (Int32.of_int 1))) ctx.com.basic.tint p in
|
|
let e_one = mk (TConst (TInt (Int32.of_int 1))) ctx.com.basic.tint p in
|
|
let e_op = mk (TBinop((if op = Increment then OpAdd else OpSub),ev_get,e_one)) ev_get.etype p in
|
|
let e_op = mk (TBinop((if op = Increment then OpAdd else OpSub),ev_get,e_one)) ev_get.etype p in
|
|
(* set *)
|
|
(* set *)
|
|
- let e_set = mk_array_set_call ctx (AbstractCast.find_array_access_raise ctx a tl ekey (Some e_op) p) c ebase p in
|
|
|
|
|
|
+ let e_set = mk_array_set_call ctx (AbstractCast.find_array_write_access_raise ctx a tl ekey e_op p) c ebase p in
|
|
let el = evar_key :: evar_get :: e_set :: (if flag = Postfix then [ev_get] else []) in
|
|
let el = evar_key :: evar_get :: e_set :: (if flag = Postfix then [ev_get] else []) in
|
|
mk (TBlock el) e_set.etype p
|
|
mk (TBlock el) e_set.etype p
|
|
with Not_found ->
|
|
with Not_found ->
|
|
- let e = mk_array_get_call ctx (AbstractCast.find_array_access ctx a tl ekey None p) c ebase p in
|
|
|
|
|
|
+ let e = mk_array_get_call ctx (AbstractCast.find_array_read_access ctx a tl ekey p) c ebase p in
|
|
find_overload_or_make e
|
|
find_overload_or_make e
|
|
end
|
|
end
|
|
| AKUsingField _ | AKResolve _ | AKSafeNav _ ->
|
|
| AKUsingField _ | AKResolve _ | AKSafeNav _ ->
|