Skip to content

Commit 01b2542

Browse files
authored
Merge pull request #622 from formal-land/antoine-james@complete-interpreter-instructions
Add ReadRef, WriteRef, [Unpack & UnpackGeneric] (commented because of mutual dependency in impl_values.v) definitions.
2 parents f41e101 + 31a8da9 commit 01b2542

File tree

2 files changed

+393
-24
lines changed

2 files changed

+393
-24
lines changed

CoqOfRust/move_sui/simulations/move_vm_runtime/interpreter.v

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,17 @@ Definition execute_instruction (pc : Z)
10171017
}
10181018
*)
10191019
| Bytecode.Unpack _ =>
1020-
returnS! $ Result.Ok InstrRet.Ok
1020+
(*
1021+
letS!? struct_ := liftS! Interpreter.Lens.lens_state_self (
1022+
liftS! Interpreter.Lens.lens_operand_stack $ Stack.Impl_Stack.pop_as Struct.t) in
1023+
letS!? values := returnS! $ Impl_Struct.unpack struct_ in
1024+
doS!? foldS!? tt values (fun acc value =>
1025+
liftS! Interpreter.Lens.lens_state_self (
1026+
liftS! Interpreter.Lens.lens_operand_stack $ Stack.Impl_Stack.push value
1027+
)
1028+
) in
1029+
*)
1030+
returnS! $ Result.Ok InstrRet.Ok
10211031

10221032
(*
10231033
Bytecode::UnpackGeneric(_si_idx) => {
@@ -1033,7 +1043,18 @@ Definition execute_instruction (pc : Z)
10331043
}
10341044
}
10351045
*)
1036-
| Bytecode.UnpackGeneric _ => returnS! $ Result.Ok InstrRet.Ok
1046+
| Bytecode.UnpackGeneric _ =>
1047+
(*
1048+
letS!? struct_ := liftS! Interpreter.Lens.lens_state_self (
1049+
liftS! Interpreter.Lens.lens_operand_stack $ Stack.Impl_Stack.pop_as Struct.t) in
1050+
letS!? values := returnS! $ Impl_Struct.unpack struct_ in
1051+
doS!? foldS!? tt values (fun acc value =>
1052+
liftS! Interpreter.Lens.lens_state_self (
1053+
liftS! Interpreter.Lens.lens_operand_stack $ Stack.Impl_Stack.push value
1054+
)
1055+
) in
1056+
*)
1057+
returnS! $ Result.Ok InstrRet.Ok
10371058

10381059
(*
10391060
Bytecode::ReadRef => {
@@ -1043,8 +1064,13 @@ Definition execute_instruction (pc : Z)
10431064
interpreter.operand_stack.push(value)?;
10441065
}
10451066
*)
1046-
| Bytecode.ReadRef => returnS! $ Result.Ok InstrRet.Ok
1047-
1067+
| Bytecode.ReadRef =>
1068+
letS!? reference := liftS! Interpreter.Lens.lens_state_self (
1069+
liftS! Interpreter.Lens.lens_operand_stack $ Stack.Impl_Stack.pop_as Reference.t) in
1070+
letS!? value := returnS! $ Impl_ReferenceImpl.read_ref reference in
1071+
letS!? _ := liftS! Interpreter.Lens.lens_state_self (
1072+
liftS! Interpreter.Lens.lens_operand_stack $ Stack.Impl_Stack.push value) in
1073+
returnS! $ Result.Ok InstrRet.Ok
10481074
(*
10491075
Bytecode::WriteRef => {
10501076
let reference = interpreter.operand_stack.pop_as::<Reference>()?;
@@ -1053,7 +1079,13 @@ Definition execute_instruction (pc : Z)
10531079
reference.write_ref(value)?;
10541080
}
10551081
*)
1056-
| Bytecode.WriteRef => returnS! $ Result.Ok InstrRet.Ok
1082+
| Bytecode.WriteRef =>
1083+
letS!? reference := liftS! Interpreter.Lens.lens_state_self (
1084+
liftS! Interpreter.Lens.lens_operand_stack $ Stack.Impl_Stack.pop_as Reference.t) in
1085+
letS!? value := liftS! Interpreter.Lens.lens_state_self (
1086+
liftS! Interpreter.Lens.lens_operand_stack Stack.Impl_Stack.pop) in
1087+
letS!? _ := returnS! $ Impl_ReferenceImpl.write_ref reference value in
1088+
returnS! $ Result.Ok InstrRet.Ok
10571089

10581090
(*
10591091
Bytecode::CastU8 => {

0 commit comments

Comments
 (0)