diff --git a/src/pocketpy_c.cpp b/src/pocketpy_c.cpp index 2580c916..20ad4218 100644 --- a/src/pocketpy_c.cpp +++ b/src/pocketpy_c.cpp @@ -305,13 +305,14 @@ bool pkpy_push_null(pkpy_vm* vm_handle) { // function static PyObject* c_function_wrapper(VM* vm, ArgsView args) { LuaStyleFuncC f = lambda_get_userdata(args.begin()); - PyObject** curr_sp = &vm->s_data.top(); + PyObject** curr_sp = vm->s_data._sp; int retc = f(vm); // propagate_if_errored if (vm->_c.error != nullptr){ Exception e = _py_cast(vm, vm->_c.error); vm->_c.error = nullptr; vm->_error(e); + return nullptr; } PK_ASSERT(retc == vm->s_data._sp-curr_sp); if(retc == 0) return vm->None; diff --git a/src2/main.cpp b/src2/main.cpp index f809472e..dd02c0d3 100644 --- a/src2/main.cpp +++ b/src2/main.cpp @@ -41,9 +41,17 @@ std::string pkpy_platform_getline(bool* eof){ #endif -// std::string f_input(){ -// return pkpy::platform_getline(); -// } +std::string f_input(){ + 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){ #if _WIN32 @@ -54,7 +62,12 @@ int main(int argc, char** argv){ dlopen("libpocketpy.dylib", RTLD_NOW | RTLD_GLOBAL); #endif 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){ void* repl = pkpy_new_repl(vm);