BLUELOVETH 2 년 전
부모
커밋
d0a26c5a09
3개의 변경된 파일12개의 추가작업 그리고 4개의 파일을 삭제
  1. 2 1
      include/pocketpy/pocketpy_c.h
  2. 9 2
      src/pocketpy_c.cpp
  3. 1 1
      src2/main.cpp

+ 2 - 1
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);
 

+ 9 - 2
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;
 }

+ 1 - 1
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;
 }