This commit is contained in:
blueloveTH 2023-05-26 20:31:13 +08:00
parent f4e3bc2308
commit 8d7635f158
4 changed files with 9 additions and 22 deletions

View File

@ -52,7 +52,7 @@ if "web" in sys.argv:
os.system(r''' os.system(r'''
rm -rf web/lib/ rm -rf web/lib/
mkdir -p web/lib/ mkdir -p web/lib/
em++ src/main.cpp -fno-rtti -fexceptions -O3 -sEXPORTED_FUNCTIONS=_pkpy_delete,_pkpy_new_repl,_pkpy_repl_input,_pkpy_new_vm,_pkpy_vm_add_module,_pkpy_vm_eval,_pkpy_vm_exec,_pkpy_vm_get_global -sEXPORTED_RUNTIME_METHODS=ccall -o web/lib/pocketpy.js em++ src/main.cpp -fno-rtti -fexceptions -O3 -sEXPORTED_FUNCTIONS=_pkpy_new_repl,_pkpy_repl_input,_pkpy_new_vm -sEXPORTED_RUNTIME_METHODS=ccall -o web/lib/pocketpy.js
''') ''')
DONE() DONE()

View File

@ -27,13 +27,6 @@ If there is any error, return `nullptr`.
Run a given source on a virtual machine. Run a given source on a virtual machine.
#### `char* pkpy_vm_get_global(VM* vm, const char* name)`
Get a global variable of a virtual machine.
Return `__repr__` of the result.
If the variable is not found, return `nullptr`.
#### `void pkpy_delete(void* p)` #### `void pkpy_delete(void* p)`
Delete a pointer allocated by `pkpy_xxx_xxx`. Delete a pointer allocated by `pkpy_xxx_xxx`.

View File

@ -19,8 +19,8 @@ enum CompileMode {
EXEC_MODE, EXEC_MODE,
EVAL_MODE, EVAL_MODE,
REPL_MODE, REPL_MODE,
CELL_MODE,
JSON_MODE, JSON_MODE,
CELL_MODE
}; };
struct SourceData { struct SourceData {

View File

@ -1355,20 +1355,14 @@ extern "C" {
} }
PK_LEGACY_EXPORT PK_LEGACY_EXPORT
void pkpy_vm_exec_cell(pkpy::VM* vm, const char* source){ void pkpy_vm_exec_2(pkpy::VM* vm, const char* source, const char* filename, int mode, const char* module){
vm->exec(source, "<cell>", pkpy::CELL_MODE); pkpy::PyObject* mod;
} if(module == nullptr) mod = vm->_main;
else{
PK_LEGACY_EXPORT mod = vm->_modules.try_get(module);
char* pkpy_vm_get_global(pkpy::VM* vm, const char* name){ if(mod == nullptr) return;
pkpy::PyObject* val = vm->_main->attr().try_get(name);
if(val == nullptr) return nullptr;
try{
pkpy::Str repr = pkpy::CAST(pkpy::Str&, vm->py_repr(val));
return repr.c_str_dup();
}catch(...){
return nullptr;
} }
vm->exec(source, filename, (pkpy::CompileMode)mode, mod);
} }
PK_LEGACY_EXPORT PK_LEGACY_EXPORT