@@ -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