BLUELOVETH 2 лет назад
Родитель
Сommit
7e66cb1cdd
2 измененных файлов с 19 добавлено и 5 удалено
  1. 2 1
      src/pocketpy_c.cpp
  2. 17 4
      src2/main.cpp

+ 2 - 1
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<LuaStyleFuncC>(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<Exception&>(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;

+ 17 - 4
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);