Skip to content

Commit

Permalink
fix the IR-interpreter
Browse files Browse the repository at this point in the history
  • Loading branch information
ggreif committed Oct 1, 2024
1 parent cfe59f0 commit d8b1c69
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 24 deletions.
22 changes: 17 additions & 5 deletions src/ir_interpreter/interpret_ir.ml
Original file line number Diff line number Diff line change
Expand Up @@ -572,14 +572,15 @@ and interpret_exp_mut env exp (k : V.value V.cont) =

and interpret_actor env ds fs k =
let self = V.fresh_id () in
let self' = V.Blob self in
let env0 = {env with self} in
let ve = declare_decs ds V.Env.empty in
let env' = adjoin_vals env0 ve in
interpret_decs env' ds (fun _ ->
let increments env =
env.actor_env := V.Env.add self (defined_fields env fs) !(env.actor_env) in
interpret_decs env' ~increments ds (fun _ ->
let obj = interpret_fields env' fs in
env.actor_env := V.Env.add self obj !(env.actor_env);
k self'
k (V.Blob self)
)

and interpret_lexp env lexp (k : (V.value ref) V.cont) =
Expand All @@ -605,6 +606,17 @@ and interpret_lexp env lexp (k : (V.value ref) V.cont) =
)
)

and defined_fields env fs =
let ve =
List.fold_left
(fun ve (f : field) ->
match V.Env.find_opt f.it.var env.vals with
| Some binding when Lib.Promise.is_fulfilled binding
-> V.Env.disjoint_add f.it.name (Lib.Promise.value binding) ve
| _ -> ve
) V.Env.empty fs in
V.Obj ve

and interpret_fields env fs =
let ve =
List.fold_left
Expand Down Expand Up @@ -801,10 +813,10 @@ and interpret_dec env dec k =
k ()
)

and interpret_decs env decs (k : unit V.cont) =
and interpret_decs env ?(increments=ignore) decs (k : unit V.cont) =
match decs with
| [] -> k ()
| d::ds -> interpret_dec env d (fun () -> interpret_decs env ds k)
| d::ds -> interpret_dec env d (fun () -> increments env; interpret_decs env ds k)

and interpret_func env at sort x args f c v (k : V.value V.cont) =
if env.flags.trace then trace "%s%s" x (string_of_arg env v);
Expand Down
8 changes: 0 additions & 8 deletions test/run-drun/ok/pass-self.diff-ir.ok

This file was deleted.

8 changes: 0 additions & 8 deletions test/run-drun/ok/pass-self.diff-low.ok

This file was deleted.

4 changes: 3 additions & 1 deletion test/run-drun/ok/pass-self.run-ir.ok
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
BEFORE!
pass-self.mo:9.12-9.23: execution error, Unknown actor "ID:1"
ys6dh-5cjiq-5dc
So far so good!
pass-self.mo:14.12-14.19: execution error, accessing identifier before its definition
4 changes: 3 additions & 1 deletion test/run-drun/ok/pass-self.run-low.ok
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
BEFORE!
pass-self.mo:9.12-9.23: execution error, Unknown actor "ID:1"
ys6dh-5cjiq-5dc
So far so good!
pass-self.mo:14.12-14.19: execution error, accessing identifier before its definition
2 changes: 1 addition & 1 deletion test/run-drun/pass-self.mo
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ actor /*class () =*/ Self {

debugPrint "BEFORE!";
ignore principalOfActor Self;
caller(Self.method);
//caller(Self.method);
caller(method);
debugPrint (debug_show(principalOfActor Self));
debugPrint "So far so good!";
Expand Down

0 comments on commit d8b1c69

Please sign in to comment.