From e96eb43c6b003936faca1a28353274e90117f7dc Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Tue, 20 Aug 2024 12:07:25 +0800 Subject: [PATCH] add `py_resetvm` --- include/pocketpy/pocketpy.h | 2 ++ src/public/internal.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/include/pocketpy/pocketpy.h b/include/pocketpy/pocketpy.h index 0746ed8b..96a277d3 100644 --- a/include/pocketpy/pocketpy.h +++ b/include/pocketpy/pocketpy.h @@ -90,6 +90,8 @@ PK_EXPORT int py_currentvm(); /// Switch to a VM. /// @param index index of the VM ranging from 0 to 16 (exclusive). `0` is the default VM. PK_EXPORT void py_switchvm(int index); +/// Reset a VM. +PK_EXPORT void py_resetvm(int index); /// Set `sys.argv`. Used for storing command-line arguments. PK_EXPORT void py_sys_setargv(int argc, char** argv); /// Setup the callbacks for the current VM. diff --git a/src/public/internal.c b/src/public/internal.c index 6b086d99..be604dd0 100644 --- a/src/public/internal.c +++ b/src/public/internal.c @@ -61,6 +61,14 @@ void py_switchvm(int index) { pk_current_vm = pk_all_vm[index]; } +void py_resetvm(int index){ + if(index < 0 || index >= 16) c11__abort("invalid vm index"); + VM* vm = pk_all_vm[index]; + if(!vm) c11__abort("vm not initialized"); + VM__dtor(vm); + VM__ctor(vm); +} + int py_currentvm() { for(int i = 0; i < 16; i++) { if(pk_all_vm[i] == pk_current_vm) return i;