mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-24 13:30:18 +00:00
up
This commit is contained in:
parent
4ccb124eec
commit
07ffe75102
@ -1,4 +1,4 @@
|
|||||||
## 0.6.0+1
|
## 0.6.0+2
|
||||||
|
|
||||||
+ Break change
|
+ Break change
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
name: pocketpy
|
name: pocketpy
|
||||||
description: A lightweight Python interpreter for game engines.
|
description: A lightweight Python interpreter for game engines.
|
||||||
version: 0.6.0+1
|
version: 0.6.0+2
|
||||||
homepage: https://pocketpy.dev
|
homepage: https://pocketpy.dev
|
||||||
repository: https://github.com/blueloveth/pocketpy
|
repository: https://github.com/blueloveth/pocketpy
|
||||||
|
|
||||||
|
|||||||
@ -4214,7 +4214,7 @@ protected:
|
|||||||
_error("ImportError", "module '" + name + "' not found");
|
_error("ImportError", "module '" + name + "' not found");
|
||||||
}else{
|
}else{
|
||||||
const _Str& source = it2->second;
|
const _Str& source = it2->second;
|
||||||
_Code code = compile(source.c_str(), name, EXEC_MODE);
|
_Code code = compile(source, name, EXEC_MODE);
|
||||||
PyVar _m = newModule(name);
|
PyVar _m = newModule(name);
|
||||||
_exec(code, _m, {});
|
_exec(code, _m, {});
|
||||||
frame->push(_m);
|
frame->push(_m);
|
||||||
@ -4452,7 +4452,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
// repl mode is only for setting `frame->id` to 0
|
// repl mode is only for setting `frame->id` to 0
|
||||||
virtual PyVarOrNull exec(const char* source, _Str filename, CompileMode mode, PyVar _module=nullptr){
|
virtual PyVarOrNull exec(_Str source, _Str filename, CompileMode mode, PyVar _module=nullptr){
|
||||||
if(_module == nullptr) _module = _main;
|
if(_module == nullptr) _module = _main;
|
||||||
try {
|
try {
|
||||||
_Code code = compile(source, filename, mode);
|
_Code code = compile(source, filename, mode);
|
||||||
@ -4466,7 +4466,7 @@ public:
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void execAsync(const char* source, _Str filename, CompileMode mode) {
|
virtual void execAsync(_Str source, _Str filename, CompileMode mode) {
|
||||||
exec(source, filename, mode);
|
exec(source, filename, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4536,7 +4536,7 @@ public:
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addLazyModule(_Str name, const char* source){
|
void addLazyModule(_Str name, _Str source){
|
||||||
_lazyModules[name] = source;
|
_lazyModules[name] = source;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4857,7 +4857,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_Code compile(const char* source, _Str filename, CompileMode mode);
|
_Code compile(_Str source, _Str filename, CompileMode mode);
|
||||||
};
|
};
|
||||||
|
|
||||||
/***** Pointers' Impl *****/
|
/***** Pointers' Impl *****/
|
||||||
@ -5047,7 +5047,7 @@ public:
|
|||||||
_state = THREAD_RUNNING;
|
_state = THREAD_RUNNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
void execAsync(const char* source, _Str filename, CompileMode mode) override {
|
void execAsync(_Str source, _Str filename, CompileMode mode) override {
|
||||||
if(_state != THREAD_READY) UNREACHABLE();
|
if(_state != THREAD_READY) UNREACHABLE();
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
@ -5064,7 +5064,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PyVarOrNull exec(const char* source, _Str filename, CompileMode mode, PyVar _module=nullptr) override {
|
PyVarOrNull exec(_Str source, _Str filename, CompileMode mode, PyVar _module=nullptr) override {
|
||||||
if(_state == THREAD_READY) return VM::exec(source, filename, mode, _module);
|
if(_state == THREAD_READY) return VM::exec(source, filename, mode, _module);
|
||||||
auto callstackBackup = std::move(callstack);
|
auto callstackBackup = std::move(callstack);
|
||||||
callstack.clear();
|
callstack.clear();
|
||||||
@ -6196,20 +6196,24 @@ __NOT_ENOUGH_LINES:
|
|||||||
}
|
}
|
||||||
|
|
||||||
try{
|
try{
|
||||||
vm->execAsync(line.c_str(), "<stdin>", SINGLE_MODE);
|
// duplicated compile to catch NeedMoreLines
|
||||||
return EXEC_DONE;
|
vm->compile(line, "<stdin>", SINGLE_MODE);
|
||||||
}catch(NeedMoreLines& ne){
|
}catch(NeedMoreLines& ne){
|
||||||
buffer += line;
|
buffer += line;
|
||||||
buffer += '\n';
|
buffer += '\n';
|
||||||
need_more_lines = ne.isClassDef ? 3 : 2;
|
need_more_lines = ne.isClassDef ? 3 : 2;
|
||||||
return NEED_MORE_LINES;
|
return NEED_MORE_LINES;
|
||||||
|
}catch(...){
|
||||||
|
// do nothing
|
||||||
}
|
}
|
||||||
|
vm->execAsync(line, "<stdin>", SINGLE_MODE);
|
||||||
|
return EXEC_DONE;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
_Code VM::compile(const char* source, _Str filename, CompileMode mode) {
|
_Code VM::compile(_Str source, _Str filename, CompileMode mode) {
|
||||||
Compiler compiler(this, source, filename, mode);
|
Compiler compiler(this, source.c_str(), filename, mode);
|
||||||
try{
|
try{
|
||||||
return compiler.__fillCode();
|
return compiler.__fillCode();
|
||||||
}catch(_Error& e){
|
}catch(_Error& e){
|
||||||
@ -6270,7 +6274,7 @@ void __initializeBuiltinFunctions(VM* _vm) {
|
|||||||
_vm->bindBuiltinFunc("eval", [](VM* vm, const pkpy::ArgList& args) {
|
_vm->bindBuiltinFunc("eval", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
vm->__checkArgSize(args, 1);
|
vm->__checkArgSize(args, 1);
|
||||||
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
||||||
_Code code = vm->compile(expr.c_str(), "<eval>", EVAL_MODE);
|
_Code code = vm->compile(expr, "<eval>", EVAL_MODE);
|
||||||
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -6854,7 +6858,7 @@ void __addModuleJson(VM* vm){
|
|||||||
vm->bindFunc(mod, "loads", [](VM* vm, const pkpy::ArgList& args) {
|
vm->bindFunc(mod, "loads", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
vm->__checkArgSize(args, 1);
|
vm->__checkArgSize(args, 1);
|
||||||
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
||||||
_Code code = vm->compile(expr.c_str(), "<json>", JSON_MODE);
|
_Code code = vm->compile(expr, "<json>", JSON_MODE);
|
||||||
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
Subproject commit fb90950aa1d0967579661690fb17048fa93456cf
|
Subproject commit 9766382dcb2bdeace0d209b9bf2813cf62c88fb7
|
||||||
@ -4,8 +4,8 @@
|
|||||||
#include "compiler.h"
|
#include "compiler.h"
|
||||||
#include "repl.h"
|
#include "repl.h"
|
||||||
|
|
||||||
_Code VM::compile(const char* source, _Str filename, CompileMode mode) {
|
_Code VM::compile(_Str source, _Str filename, CompileMode mode) {
|
||||||
Compiler compiler(this, source, filename, mode);
|
Compiler compiler(this, source.c_str(), filename, mode);
|
||||||
try{
|
try{
|
||||||
return compiler.__fillCode();
|
return compiler.__fillCode();
|
||||||
}catch(_Error& e){
|
}catch(_Error& e){
|
||||||
@ -66,7 +66,7 @@ void __initializeBuiltinFunctions(VM* _vm) {
|
|||||||
_vm->bindBuiltinFunc("eval", [](VM* vm, const pkpy::ArgList& args) {
|
_vm->bindBuiltinFunc("eval", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
vm->__checkArgSize(args, 1);
|
vm->__checkArgSize(args, 1);
|
||||||
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
||||||
_Code code = vm->compile(expr.c_str(), "<eval>", EVAL_MODE);
|
_Code code = vm->compile(expr, "<eval>", EVAL_MODE);
|
||||||
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -652,7 +652,7 @@ void __addModuleJson(VM* vm){
|
|||||||
vm->bindFunc(mod, "loads", [](VM* vm, const pkpy::ArgList& args) {
|
vm->bindFunc(mod, "loads", [](VM* vm, const pkpy::ArgList& args) {
|
||||||
vm->__checkArgSize(args, 1);
|
vm->__checkArgSize(args, 1);
|
||||||
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
const _Str& expr = vm->PyStr_AS_C(args[0]);
|
||||||
_Code code = vm->compile(expr.c_str(), "<json>", JSON_MODE);
|
_Code code = vm->compile(expr, "<json>", JSON_MODE);
|
||||||
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
return vm->_exec(code, vm->topFrame()->_module, vm->topFrame()->copy_f_locals());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -54,13 +54,17 @@ __NOT_ENOUGH_LINES:
|
|||||||
}
|
}
|
||||||
|
|
||||||
try{
|
try{
|
||||||
vm->execAsync(line.c_str(), "<stdin>", SINGLE_MODE);
|
// duplicated compile to catch NeedMoreLines
|
||||||
return EXEC_DONE;
|
vm->compile(line, "<stdin>", SINGLE_MODE);
|
||||||
}catch(NeedMoreLines& ne){
|
}catch(NeedMoreLines& ne){
|
||||||
buffer += line;
|
buffer += line;
|
||||||
buffer += '\n';
|
buffer += '\n';
|
||||||
need_more_lines = ne.isClassDef ? 3 : 2;
|
need_more_lines = ne.isClassDef ? 3 : 2;
|
||||||
return NEED_MORE_LINES;
|
return NEED_MORE_LINES;
|
||||||
|
}catch(...){
|
||||||
|
// do nothing
|
||||||
}
|
}
|
||||||
|
vm->execAsync(line, "<stdin>", SINGLE_MODE);
|
||||||
|
return EXEC_DONE;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
14
src/vm.h
14
src/vm.h
@ -314,7 +314,7 @@ protected:
|
|||||||
_error("ImportError", "module '" + name + "' not found");
|
_error("ImportError", "module '" + name + "' not found");
|
||||||
}else{
|
}else{
|
||||||
const _Str& source = it2->second;
|
const _Str& source = it2->second;
|
||||||
_Code code = compile(source.c_str(), name, EXEC_MODE);
|
_Code code = compile(source, name, EXEC_MODE);
|
||||||
PyVar _m = newModule(name);
|
PyVar _m = newModule(name);
|
||||||
_exec(code, _m, {});
|
_exec(code, _m, {});
|
||||||
frame->push(_m);
|
frame->push(_m);
|
||||||
@ -552,7 +552,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
// repl mode is only for setting `frame->id` to 0
|
// repl mode is only for setting `frame->id` to 0
|
||||||
virtual PyVarOrNull exec(const char* source, _Str filename, CompileMode mode, PyVar _module=nullptr){
|
virtual PyVarOrNull exec(_Str source, _Str filename, CompileMode mode, PyVar _module=nullptr){
|
||||||
if(_module == nullptr) _module = _main;
|
if(_module == nullptr) _module = _main;
|
||||||
try {
|
try {
|
||||||
_Code code = compile(source, filename, mode);
|
_Code code = compile(source, filename, mode);
|
||||||
@ -566,7 +566,7 @@ public:
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void execAsync(const char* source, _Str filename, CompileMode mode) {
|
virtual void execAsync(_Str source, _Str filename, CompileMode mode) {
|
||||||
exec(source, filename, mode);
|
exec(source, filename, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,7 +636,7 @@ public:
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addLazyModule(_Str name, const char* source){
|
void addLazyModule(_Str name, _Str source){
|
||||||
_lazyModules[name] = source;
|
_lazyModules[name] = source;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -957,7 +957,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_Code compile(const char* source, _Str filename, CompileMode mode);
|
_Code compile(_Str source, _Str filename, CompileMode mode);
|
||||||
};
|
};
|
||||||
|
|
||||||
/***** Pointers' Impl *****/
|
/***** Pointers' Impl *****/
|
||||||
@ -1147,7 +1147,7 @@ public:
|
|||||||
_state = THREAD_RUNNING;
|
_state = THREAD_RUNNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
void execAsync(const char* source, _Str filename, CompileMode mode) override {
|
void execAsync(_Str source, _Str filename, CompileMode mode) override {
|
||||||
if(_state != THREAD_READY) UNREACHABLE();
|
if(_state != THREAD_READY) UNREACHABLE();
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
@ -1164,7 +1164,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PyVarOrNull exec(const char* source, _Str filename, CompileMode mode, PyVar _module=nullptr) override {
|
PyVarOrNull exec(_Str source, _Str filename, CompileMode mode, PyVar _module=nullptr) override {
|
||||||
if(_state == THREAD_READY) return VM::exec(source, filename, mode, _module);
|
if(_state == THREAD_READY) return VM::exec(source, filename, mode, _module);
|
||||||
auto callstackBackup = std::move(callstack);
|
auto callstackBackup = std::move(callstack);
|
||||||
callstack.clear();
|
callstack.clear();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user