diff --git a/include/pocketpy/pocketpy_c.h b/include/pocketpy/pocketpy_c.h index 3ba4ca62..dffde873 100644 --- a/include/pocketpy/pocketpy_c.h +++ b/include/pocketpy/pocketpy_c.h @@ -49,7 +49,7 @@ PK_EXPORT bool pkpy_is_bool(pkpy_vm*, int i); PK_EXPORT bool pkpy_to_bool(pkpy_vm*, int i, bool* out); // string -PK_EXPORT bool pkpy_push_string(pkpy_vm*, const char*); +PK_EXPORT bool pkpy_push_string(pkpy_vm*, pkpy_CString); PK_EXPORT bool pkpy_is_string(pkpy_vm*, int i); PK_EXPORT bool pkpy_to_string(pkpy_vm*, int i, pkpy_CString* out); @@ -88,6 +88,7 @@ PK_EXPORT bool pkpy_vectorcall(pkpy_vm*, int argc); /* Special APIs */ PK_EXPORT void pkpy_free(void* p); +PK_EXPORT pkpy_CString pkpy_string(const char*); PK_EXPORT pkpy_CName pkpy_name(const char*); PK_EXPORT void pkpy_compile_to_string(pkpy_vm*, const char* source, const char* filename, int mode, bool* ok, char** out); diff --git a/src/pocketpy_c.cpp b/src/pocketpy_c.cpp index a177ebfb..e6776f39 100644 --- a/src/pocketpy_c.cpp +++ b/src/pocketpy_c.cpp @@ -216,10 +216,10 @@ bool pkpy_to_bool(pkpy_vm* vm_handle, int i, bool* out){ } // string -bool pkpy_push_string(pkpy_vm* vm_handle, const char* value) { +bool pkpy_push_string(pkpy_vm* vm_handle, pkpy_CString value) { VM* vm = (VM*) vm_handle; PK_ASSERT_NO_ERROR() - PyObject* res = py_var(vm, value); + PyObject* res = py_var(vm, std::string_view(value.data, value.size)); vm->s_data.push(res); return true; } @@ -483,6 +483,13 @@ void pkpy_free(void* p){ free(p); } +pkpy_CString pkpy_string(const char* value){ + pkpy_CString s; + s.data = value; + s.size = strlen(value); + return s; +} + pkpy_CName pkpy_name(const char* name){ return StrName(name).index; } diff --git a/src2/main.cpp b/src2/main.cpp index 1405c34b..d2ed5bd5 100644 --- a/src2/main.cpp +++ b/src2/main.cpp @@ -49,7 +49,7 @@ std::string f_input(){ static int f_input(pkpy_vm* vm){ bool eof; std::string output = pkpy_platform_getline(&eof); - pkpy_push_string(vm, output.c_str()); + pkpy_push_string(vm, pkpy_string(output.c_str())); return 1; }