This commit is contained in:
BLUELOVETH 2023-07-14 18:11:24 +08:00
parent e0541ee854
commit 7e66cb1cdd
2 changed files with 19 additions and 5 deletions

View File

@ -305,13 +305,14 @@ bool pkpy_push_null(pkpy_vm* vm_handle) {
// function // function
static PyObject* c_function_wrapper(VM* vm, ArgsView args) { static PyObject* c_function_wrapper(VM* vm, ArgsView args) {
LuaStyleFuncC f = lambda_get_userdata<LuaStyleFuncC>(args.begin()); LuaStyleFuncC f = lambda_get_userdata<LuaStyleFuncC>(args.begin());
PyObject** curr_sp = &vm->s_data.top(); PyObject** curr_sp = vm->s_data._sp;
int retc = f(vm); int retc = f(vm);
// propagate_if_errored // propagate_if_errored
if (vm->_c.error != nullptr){ if (vm->_c.error != nullptr){
Exception e = _py_cast<Exception&>(vm, vm->_c.error); Exception e = _py_cast<Exception&>(vm, vm->_c.error);
vm->_c.error = nullptr; vm->_c.error = nullptr;
vm->_error(e); vm->_error(e);
return nullptr;
} }
PK_ASSERT(retc == vm->s_data._sp-curr_sp); PK_ASSERT(retc == vm->s_data._sp-curr_sp);
if(retc == 0) return vm->None; if(retc == 0) return vm->None;

View File

@ -41,9 +41,17 @@ std::string pkpy_platform_getline(bool* eof){
#endif #endif
// std::string f_input(){ std::string f_input(){
// return pkpy::platform_getline(); bool eof;
// } return pkpy_platform_getline(&eof);
}
static int f_input(pkpy_vm* vm){
bool eof;
std::string output = pkpy_platform_getline(&eof);
pkpy_push_string(vm, output.c_str());
return 1;
}
int main(int argc, char** argv){ int main(int argc, char** argv){
#if _WIN32 #if _WIN32
@ -54,7 +62,12 @@ int main(int argc, char** argv){
dlopen("libpocketpy.dylib", RTLD_NOW | RTLD_GLOBAL); dlopen("libpocketpy.dylib", RTLD_NOW | RTLD_GLOBAL);
#endif #endif
pkpy_vm* vm = pkpy_new_vm(true); pkpy_vm* vm = pkpy_new_vm(true);
// pkpy::_bind(vm, vm->builtins, "input() -> str", &f_input);
pkpy_push_function(vm, "input() -> str", f_input);
pkpy_eval(vm, "__import__('builtins')");
pkpy_store_attr(vm, pkpy_name("input"));
PK_ASSERT(pkpy_stack_size(vm) == 0);
if(argc == 1){ if(argc == 1){
void* repl = pkpy_new_repl(vm); void* repl = pkpy_new_repl(vm);