|
@@ -714,12 +714,6 @@ let emit_neg exec p env = match exec env with
|
|
|
|
|
|
(* Function *)
|
|
(* Function *)
|
|
|
|
|
|
-type env_creation = {
|
|
|
|
- ec_info : env_info;
|
|
|
|
- ec_num_locals : int;
|
|
|
|
- ec_num_captures : int;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
let execute_set_local i env v =
|
|
let execute_set_local i env v =
|
|
env.env_locals.(i) <- v
|
|
env.env_locals.(i) <- v
|
|
|
|
|
|
@@ -743,21 +737,21 @@ let process_arguments fl vl env =
|
|
[@@inline]
|
|
[@@inline]
|
|
|
|
|
|
let create_function_noret ctx eci exec fl vl =
|
|
let create_function_noret ctx eci exec fl vl =
|
|
- let env = push_environment ctx eci.ec_info eci.ec_num_locals eci.ec_num_captures in
|
|
|
|
|
|
+ let env = push_environment ctx eci in
|
|
process_arguments fl vl env;
|
|
process_arguments fl vl env;
|
|
let v = exec env in
|
|
let v = exec env in
|
|
pop_environment ctx env;
|
|
pop_environment ctx env;
|
|
v
|
|
v
|
|
|
|
|
|
let create_function ctx eci exec fl vl =
|
|
let create_function ctx eci exec fl vl =
|
|
- let env = push_environment ctx eci.ec_info eci.ec_num_locals eci.ec_num_captures in
|
|
|
|
|
|
+ let env = push_environment ctx eci in
|
|
process_arguments fl vl env;
|
|
process_arguments fl vl env;
|
|
let v = try exec env with Return v -> v in
|
|
let v = try exec env with Return v -> v in
|
|
pop_environment ctx env;
|
|
pop_environment ctx env;
|
|
v
|
|
v
|
|
|
|
|
|
let create_closure_noret ctx eci refs exec fl vl =
|
|
let create_closure_noret ctx eci refs exec fl vl =
|
|
- let env = push_environment ctx eci.ec_info eci.ec_num_locals eci.ec_num_captures in
|
|
|
|
|
|
+ let env = push_environment ctx eci in
|
|
Array.iter (fun (i,vr) -> env.env_captures.(i) <- vr) refs;
|
|
Array.iter (fun (i,vr) -> env.env_captures.(i) <- vr) refs;
|
|
process_arguments fl vl env;
|
|
process_arguments fl vl env;
|
|
let v = exec env in
|
|
let v = exec env in
|
|
@@ -765,7 +759,7 @@ let create_closure_noret ctx eci refs exec fl vl =
|
|
v
|
|
v
|
|
|
|
|
|
let create_closure refs ctx eci exec fl vl =
|
|
let create_closure refs ctx eci exec fl vl =
|
|
- let env = push_environment ctx eci.ec_info eci.ec_num_locals eci.ec_num_captures in
|
|
|
|
|
|
+ let env = push_environment ctx eci in
|
|
Array.iter (fun (i,vr) -> env.env_captures.(i) <- vr) refs;
|
|
Array.iter (fun (i,vr) -> env.env_captures.(i) <- vr) refs;
|
|
process_arguments fl vl env;
|
|
process_arguments fl vl env;
|
|
let v = try exec env with Return v -> v in
|
|
let v = try exec env with Return v -> v in
|
|
@@ -774,7 +768,7 @@ let create_closure refs ctx eci exec fl vl =
|
|
|
|
|
|
let emit_closure ctx mapping eci hasret exec fl env =
|
|
let emit_closure ctx mapping eci hasret exec fl env =
|
|
let refs = Array.map (fun (i,slot) -> i,emit_capture_read slot env) mapping in
|
|
let refs = Array.map (fun (i,slot) -> i,emit_capture_read slot env) mapping in
|
|
- let create = match hasret,eci.ec_num_captures with
|
|
|
|
|
|
+ let create = match hasret,eci.num_captures with
|
|
| true,0 -> create_function
|
|
| true,0 -> create_function
|
|
| false,0 -> create_function_noret
|
|
| false,0 -> create_function_noret
|
|
| _ -> create_closure refs
|
|
| _ -> create_closure refs
|