Răsfoiți Sursa

support `dir()` builtin, fix str disp in list...

pikastech 3 ani în urmă
părinte
comite
e0eee73209

+ 12 - 0
package/PikaStdLib/PikaStdData_Dict.c

@@ -100,7 +100,13 @@ char* PikaStdData_dict_keys___str__(PikaObj* self) {
             str_arg = arg_strAppend(str_arg, ", ");
             str_arg = arg_strAppend(str_arg, ", ");
         }
         }
         char* item_str = PikaStdLib_SysObj_str(self, item);
         char* item_str = PikaStdLib_SysObj_str(self, item);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, item_str);
         str_arg = arg_strAppend(str_arg, item_str);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 
@@ -133,7 +139,13 @@ char* PikaStdData_Dict___str__(PikaObj* self) {
         str_arg = arg_strAppend(str_arg, ": ");
         str_arg = arg_strAppend(str_arg, ": ");
 
 
         char* val_str = PikaStdLib_SysObj_str(self, item_val);
         char* val_str = PikaStdLib_SysObj_str(self, item_val);
+        if (arg_getType(item_val) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, val_str);
         str_arg = arg_strAppend(str_arg, val_str);
+        if (arg_getType(item_val) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 

+ 6 - 0
package/PikaStdLib/PikaStdData_List.c

@@ -40,7 +40,13 @@ char* PikaStdData_List___str__(PikaObj* self) {
             str_arg = arg_strAppend(str_arg, ", ");
             str_arg = arg_strAppend(str_arg, ", ");
         }
         }
         char* item_str = PikaStdLib_SysObj_str(self, item);
         char* item_str = PikaStdLib_SysObj_str(self, item);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, item_str);
         str_arg = arg_strAppend(str_arg, item_str);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 

+ 6 - 0
package/PikaStdLib/PikaStdData_Tuple.c

@@ -55,7 +55,13 @@ char* PikaStdData_Tuple___str__(PikaObj* self) {
             str_arg = arg_strAppend(str_arg, ", ");
             str_arg = arg_strAppend(str_arg, ", ");
         }
         }
         char* item_str = PikaStdLib_SysObj_str(self, item);
         char* item_str = PikaStdLib_SysObj_str(self, item);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, item_str);
         str_arg = arg_strAppend(str_arg, item_str);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 

+ 27 - 0
package/PikaStdLib/PikaStdLib.pyi

@@ -1,3 +1,6 @@
+from typing import List
+
+
 class MemChecker:
 class MemChecker:
     def max(self): ...
     def max(self): ...
     def now(self): ...
     def now(self): ...
@@ -9,49 +12,73 @@ class MemChecker:
 class SysObj:
 class SysObj:
     @staticmethod
     @staticmethod
     def type(arg: any) -> any: ...
     def type(arg: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def remove(argPath: str): ...
     def remove(argPath: str): ...
+
     @staticmethod
     @staticmethod
     def int(arg: any) -> int: ...
     def int(arg: any) -> int: ...
+
     @staticmethod
     @staticmethod
     def float(arg: any) -> float: ...
     def float(arg: any) -> float: ...
+
     @staticmethod
     @staticmethod
     def str(arg: any) -> str: ...
     def str(arg: any) -> str: ...
+
     @staticmethod
     @staticmethod
     def iter(arg: any) -> any: ...
     def iter(arg: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def range(a1: int, a2: int) -> any: ...
     def range(a1: int, a2: int) -> any: ...
+
     @staticmethod
     @staticmethod
     def print(*val): ...
     def print(*val): ...
+
     @staticmethod
     @staticmethod
     def printNoEnd(val: any): ...
     def printNoEnd(val: any): ...
+
     @staticmethod
     @staticmethod
     def __setitem__(obj: any, key: any, val: any) -> any: ...
     def __setitem__(obj: any, key: any, val: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def __getitem__(obj: any, key: any) -> any: ...
     def __getitem__(obj: any, key: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def __slice__(obj: any, start: any, end: any, step: int) -> any: ...
     def __slice__(obj: any, start: any, end: any, step: int) -> any: ...
+
     @staticmethod
     @staticmethod
     def len(arg: any) -> int: ...
     def len(arg: any) -> int: ...
+
     @staticmethod
     @staticmethod
     def list() -> any: ...
     def list() -> any: ...
+
     @staticmethod
     @staticmethod
     def dict() -> any: ...
     def dict() -> any: ...
+
     @staticmethod
     @staticmethod
     def hex(val: int) -> str: ...
     def hex(val: int) -> str: ...
+
     @staticmethod
     @staticmethod
     def ord(val: str) -> int: ...
     def ord(val: str) -> int: ...
+
     @staticmethod
     @staticmethod
     def chr(val: int) -> str: ...
     def chr(val: int) -> str: ...
+
     @staticmethod
     @staticmethod
     def bytes(val: any) -> bytes: ...
     def bytes(val: any) -> bytes: ...
+
     @staticmethod
     @staticmethod
     def cformat(fmt: str, *var) -> str: ...
     def cformat(fmt: str, *var) -> str: ...
+
     @staticmethod
     @staticmethod
     def id(obj: any) -> int: ...
     def id(obj: any) -> int: ...
+
     @staticmethod
     @staticmethod
     def open(path: str, mode: str) -> object: ...
     def open(path: str, mode: str) -> object: ...
 
 
+    @staticmethod
+    def dir(obj: object) -> list: ...
+
 
 
 class RangeObj:
 class RangeObj:
     def __next__(self) -> any: ...
     def __next__(self) -> any: ...

+ 25 - 0
package/PikaStdLib/PikaStdLib_SysObj.c

@@ -474,3 +474,28 @@ PikaObj* PikaStdLib_SysObj_open(PikaObj* self, char* path, char* mode) {
     return NULL;
     return NULL;
 #endif
 #endif
 }
 }
+
+/* __dir_each */
+int32_t __dir_each(Arg* argEach, Args* context) {
+    PikaObj* list = args_getPtr(context, "list");
+    if (argType_isCallable(arg_getType(argEach))) {
+        char name_buff[PIKA_LINE_BUFF_SIZE / 2] = {0};
+        char* method_name =
+            methodArg_getName(argEach, name_buff, sizeof(name_buff));
+        Arg* arg_str = arg_newStr(method_name);
+        __vm_List_append(list, arg_str);
+        arg_deinit(arg_str);
+    }
+    return 0;
+}
+
+PikaObj* PikaStdLib_SysObj_dir(PikaObj* self, PikaObj* obj) {
+    PikaObj* New_PikaStdData_List(Args * args);
+    PikaObj* list = newNormalObj(New_PikaStdData_List);
+    __vm_List___init__(list);
+    Args* context = New_args(NULL);
+    args_setPtr(context, "list", list);
+    args_foreach(obj->list, __dir_each, context);
+    args_deinit(context);
+    return list;
+}

+ 1 - 1
port/linux/.vscode/launch.json

@@ -11,7 +11,7 @@
             "program": "${workspaceFolder}/build/test/pikascript_test",
             "program": "${workspaceFolder}/build/test/pikascript_test",
             // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
             // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
             "args": [
             "args": [
-                "--gtest_filter=parser.unittest"
+                // "--gtest_filter=parser.unittest"
             ],
             ],
             "stopAtEntry": false,
             "stopAtEntry": false,
             "cwd": "${workspaceFolder}",
             "cwd": "${workspaceFolder}",

+ 27 - 0
port/linux/package/pikascript/PikaStdLib.pyi

@@ -1,3 +1,6 @@
+from typing import List
+
+
 class MemChecker:
 class MemChecker:
     def max(self): ...
     def max(self): ...
     def now(self): ...
     def now(self): ...
@@ -9,49 +12,73 @@ class MemChecker:
 class SysObj:
 class SysObj:
     @staticmethod
     @staticmethod
     def type(arg: any) -> any: ...
     def type(arg: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def remove(argPath: str): ...
     def remove(argPath: str): ...
+
     @staticmethod
     @staticmethod
     def int(arg: any) -> int: ...
     def int(arg: any) -> int: ...
+
     @staticmethod
     @staticmethod
     def float(arg: any) -> float: ...
     def float(arg: any) -> float: ...
+
     @staticmethod
     @staticmethod
     def str(arg: any) -> str: ...
     def str(arg: any) -> str: ...
+
     @staticmethod
     @staticmethod
     def iter(arg: any) -> any: ...
     def iter(arg: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def range(a1: int, a2: int) -> any: ...
     def range(a1: int, a2: int) -> any: ...
+
     @staticmethod
     @staticmethod
     def print(*val): ...
     def print(*val): ...
+
     @staticmethod
     @staticmethod
     def printNoEnd(val: any): ...
     def printNoEnd(val: any): ...
+
     @staticmethod
     @staticmethod
     def __setitem__(obj: any, key: any, val: any) -> any: ...
     def __setitem__(obj: any, key: any, val: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def __getitem__(obj: any, key: any) -> any: ...
     def __getitem__(obj: any, key: any) -> any: ...
+
     @staticmethod
     @staticmethod
     def __slice__(obj: any, start: any, end: any, step: int) -> any: ...
     def __slice__(obj: any, start: any, end: any, step: int) -> any: ...
+
     @staticmethod
     @staticmethod
     def len(arg: any) -> int: ...
     def len(arg: any) -> int: ...
+
     @staticmethod
     @staticmethod
     def list() -> any: ...
     def list() -> any: ...
+
     @staticmethod
     @staticmethod
     def dict() -> any: ...
     def dict() -> any: ...
+
     @staticmethod
     @staticmethod
     def hex(val: int) -> str: ...
     def hex(val: int) -> str: ...
+
     @staticmethod
     @staticmethod
     def ord(val: str) -> int: ...
     def ord(val: str) -> int: ...
+
     @staticmethod
     @staticmethod
     def chr(val: int) -> str: ...
     def chr(val: int) -> str: ...
+
     @staticmethod
     @staticmethod
     def bytes(val: any) -> bytes: ...
     def bytes(val: any) -> bytes: ...
+
     @staticmethod
     @staticmethod
     def cformat(fmt: str, *var) -> str: ...
     def cformat(fmt: str, *var) -> str: ...
+
     @staticmethod
     @staticmethod
     def id(obj: any) -> int: ...
     def id(obj: any) -> int: ...
+
     @staticmethod
     @staticmethod
     def open(path: str, mode: str) -> object: ...
     def open(path: str, mode: str) -> object: ...
 
 
+    @staticmethod
+    def dir(obj: object) -> list: ...
+
 
 
 class RangeObj:
 class RangeObj:
     def __next__(self) -> any: ...
     def __next__(self) -> any: ...

+ 12 - 0
port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_Dict.c

@@ -100,7 +100,13 @@ char* PikaStdData_dict_keys___str__(PikaObj* self) {
             str_arg = arg_strAppend(str_arg, ", ");
             str_arg = arg_strAppend(str_arg, ", ");
         }
         }
         char* item_str = PikaStdLib_SysObj_str(self, item);
         char* item_str = PikaStdLib_SysObj_str(self, item);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, item_str);
         str_arg = arg_strAppend(str_arg, item_str);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 
@@ -133,7 +139,13 @@ char* PikaStdData_Dict___str__(PikaObj* self) {
         str_arg = arg_strAppend(str_arg, ": ");
         str_arg = arg_strAppend(str_arg, ": ");
 
 
         char* val_str = PikaStdLib_SysObj_str(self, item_val);
         char* val_str = PikaStdLib_SysObj_str(self, item_val);
+        if (arg_getType(item_val) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, val_str);
         str_arg = arg_strAppend(str_arg, val_str);
+        if (arg_getType(item_val) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 

+ 6 - 0
port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_List.c

@@ -40,7 +40,13 @@ char* PikaStdData_List___str__(PikaObj* self) {
             str_arg = arg_strAppend(str_arg, ", ");
             str_arg = arg_strAppend(str_arg, ", ");
         }
         }
         char* item_str = PikaStdLib_SysObj_str(self, item);
         char* item_str = PikaStdLib_SysObj_str(self, item);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, item_str);
         str_arg = arg_strAppend(str_arg, item_str);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 

+ 6 - 0
port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdData_Tuple.c

@@ -55,7 +55,13 @@ char* PikaStdData_Tuple___str__(PikaObj* self) {
             str_arg = arg_strAppend(str_arg, ", ");
             str_arg = arg_strAppend(str_arg, ", ");
         }
         }
         char* item_str = PikaStdLib_SysObj_str(self, item);
         char* item_str = PikaStdLib_SysObj_str(self, item);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         str_arg = arg_strAppend(str_arg, item_str);
         str_arg = arg_strAppend(str_arg, item_str);
+        if (arg_getType(item) == ARG_TYPE_STRING) {
+            str_arg = arg_strAppend(str_arg, "'");
+        }
         i++;
         i++;
     }
     }
 
 

+ 25 - 0
port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c

@@ -474,3 +474,28 @@ PikaObj* PikaStdLib_SysObj_open(PikaObj* self, char* path, char* mode) {
     return NULL;
     return NULL;
 #endif
 #endif
 }
 }
+
+/* __dir_each */
+int32_t __dir_each(Arg* argEach, Args* context) {
+    PikaObj* list = args_getPtr(context, "list");
+    if (argType_isCallable(arg_getType(argEach))) {
+        char name_buff[PIKA_LINE_BUFF_SIZE / 2] = {0};
+        char* method_name =
+            methodArg_getName(argEach, name_buff, sizeof(name_buff));
+        Arg* arg_str = arg_newStr(method_name);
+        __vm_List_append(list, arg_str);
+        arg_deinit(arg_str);
+    }
+    return 0;
+}
+
+PikaObj* PikaStdLib_SysObj_dir(PikaObj* self, PikaObj* obj) {
+    PikaObj* New_PikaStdData_List(Args * args);
+    PikaObj* list = newNormalObj(New_PikaStdData_List);
+    __vm_List___init__(list);
+    Args* context = New_args(NULL);
+    args_setPtr(context, "list", list);
+    args_foreach(obj->list, __dir_each, context);
+    args_deinit(context);
+    return list;
+}

+ 2 - 1
port/linux/test/PikaCV-test.cpp

@@ -1,6 +1,7 @@
 #include "test_common.h"
 #include "test_common.h"
 
 
-#if (PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL) && (!PIKA_POOL_ENABLE)
+#if (PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL) && (!PIKA_POOL_ENABLE) && \
+    (PIKA_STACK_BUFF_SIZE > 0x1000)
 TEST(PikaCV, test1) {
 TEST(PikaCV, test1) {
     /* init */
     /* init */
     pikaMemInfo.heapUsedMax = 0;
     pikaMemInfo.heapUsedMax = 0;

+ 4 - 2
port/linux/test/builtin-test.cpp

@@ -54,7 +54,8 @@ TEST(builtin, seek) {
 }
 }
 #endif
 #endif
 
 
-#if PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL
+#if (PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL) && \
+    (PIKA_STACK_BUFF_SIZE >= 0x1000)
 TEST(builtin, file2) {
 TEST(builtin, file2) {
     /* init */
     /* init */
     pikaMemInfo.heapUsedMax = 0;
     pikaMemInfo.heapUsedMax = 0;
@@ -88,7 +89,8 @@ TEST(builtin, file3) {
 }
 }
 #endif
 #endif
 
 
-#if (PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL) && !PIKA_POOL_ENABLE
+#if (PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL) && !PIKA_POOL_ENABLE && \
+    (PIKA_STACK_BUFF_SIZE >= 0x1000)
 TEST(builtin, bigfile) {
 TEST(builtin, bigfile) {
     /* init */
     /* init */
     pikaMemInfo.heapUsedMax = 0;
     pikaMemInfo.heapUsedMax = 0;

+ 30 - 27
port/linux/test/cJSON-test.cpp

@@ -1,5 +1,6 @@
 #include "test_common.h"
 #include "test_common.h"
 
 
+#if PIKA_STACK_BUFF_SIZE >= 0x1000
 TEST(cJSON, parse_print) {
 TEST(cJSON, parse_print) {
     /* init */
     /* init */
     pikaMemInfo.heapUsedMax = 0;
     pikaMemInfo.heapUsedMax = 0;
@@ -56,7 +57,7 @@ TEST(cJSON, getItem) {
     /* collect */
     /* collect */
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
-    EXPECT_STREQ(log_buff[0], "22\r\n");
+    EXPECT_STREQ(log_buff[0], "'22'\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);
@@ -91,9 +92,9 @@ TEST(cJSON, next) {
             "\n");
             "\n");
     /* collect */
     /* collect */
     EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[3], "BEGIN\r\n");
-    EXPECT_STREQ(log_buff[2], "\"mculover666\"\r\n");
-    EXPECT_STREQ(log_buff[1], "22\r\n");
-    EXPECT_STREQ(log_buff[0], "55.5\r\n");
+    EXPECT_STREQ(log_buff[2], "'\"mculover666\"'\r\n");
+    EXPECT_STREQ(log_buff[1], "'22'\r\n");
+    EXPECT_STREQ(log_buff[0], "'55.5'\r\n");
     /* assert */
     /* assert */
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -171,15 +172,15 @@ TEST(cJSON, item) {
     /* collect */
     /* collect */
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[9], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[9], "BEGIN\r\n");
-    EXPECT_STREQ(log_buff[8], "null\r\n");
-    EXPECT_STREQ(log_buff[7], "true\r\n");
-    EXPECT_STREQ(log_buff[6], "false\r\n");
-    EXPECT_STREQ(log_buff[5], "true\r\n");
-    EXPECT_STREQ(log_buff[4], "23\r\n");
-    EXPECT_STREQ(log_buff[3], "\"test\"\r\n");
-    EXPECT_STREQ(log_buff[2], "qqq\r\n");
-    EXPECT_STREQ(log_buff[1], "[]\r\n");
-    EXPECT_STREQ(log_buff[0], "{\n}\r\n");
+    EXPECT_STREQ(log_buff[8], "'null'\r\n");
+    EXPECT_STREQ(log_buff[7], "'true'\r\n");
+    EXPECT_STREQ(log_buff[6], "'false'\r\n");
+    EXPECT_STREQ(log_buff[5], "'true'\r\n");
+    EXPECT_STREQ(log_buff[4], "'23'\r\n");
+    EXPECT_STREQ(log_buff[3], "'\"test\"'\r\n");
+    EXPECT_STREQ(log_buff[2], "'qqq'\r\n");
+    EXPECT_STREQ(log_buff[1], "'[]'\r\n");
+    EXPECT_STREQ(log_buff[0], "'{\n}'\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);
@@ -213,10 +214,10 @@ TEST(cJSON, construct) {
     /* assert */
     /* assert */
     EXPECT_STREQ(
     EXPECT_STREQ(
         log_buff[0],
         log_buff[0],
-        "{\n\t\"name\":\t\"mculover666\",\n\t\"age\":\t22,\n\t\"weight\":\t55."
+        "'{\n\t\"name\":\t\"mculover666\",\n\t\"age\":\t22,\n\t\"weight\":\t55."
         "5,\n\t\"address\":\t{\n\t\t\"country\":\t\"China\",\n\t\t\"zip-code\":"
         "5,\n\t\"address\":\t{\n\t\t\"country\":\t\"China\",\n\t\t\"zip-code\":"
         "\t\"111111\"\n\t},\n\t\"skill\":\t[\"c\", \"Java\", "
         "\t\"111111\"\n\t},\n\t\"skill\":\t[\"c\", \"Java\", "
-        "\"Python\"],\n\t\"student\":\tfalse\n}\r\n");
+        "\"Python\"],\n\t\"student\":\tfalse\n}'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -235,9 +236,9 @@ TEST(cJSON, test1) {
     /* collect */
     /* collect */
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[0],
     EXPECT_STREQ(log_buff[0],
-                 "{\n\t\"data\":\t{\n\t\t\"validTime\":\t28800,\n\t\t\"token\":"
+                 "'{\n\t\"data\":\t{\n\t\t\"validTime\":\t28800,\n\t\t\"token\":"
                  "\t\"3E6EA1D907B9CFEB6AB1DECB5667E4A7\"\n\t},\n\t\"success\":"
                  "\t\"3E6EA1D907B9CFEB6AB1DECB5667E4A7\"\n\t},\n\t\"success\":"
-                 "\ttrue,\n\t\"resultCode\":\t\"0000\"\n}\r\n");
+                 "\ttrue,\n\t\"resultCode\":\t\"0000\"\n}'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -255,9 +256,9 @@ TEST(cJSON, test2) {
     /* collect */
     /* collect */
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[0],
     EXPECT_STREQ(log_buff[0],
-                 "{\n\t\"data\":\t{\n\t\t\"validTime\":\t28800,\n\t\t\"token\":"
+                 "'{\n\t\"data\":\t{\n\t\t\"validTime\":\t28800,\n\t\t\"token\":"
                  "\t\"3E6EA1D907B9CFEB6AB1DECB5667E4A7\"\n\t},\n\t\"success\":"
                  "\t\"3E6EA1D907B9CFEB6AB1DECB5667E4A7\"\n\t},\n\t\"success\":"
-                 "\ttrue,\n\t\"resultCode\":\t\"0000\"\n}\r\n");
+                 "\ttrue,\n\t\"resultCode\":\t\"0000\"\n}'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -277,10 +278,10 @@ TEST(cJSON, test3) {
     /* assert */
     /* assert */
     EXPECT_STREQ(
     EXPECT_STREQ(
         log_buff[0],
         log_buff[0],
-        "{\n\t\"name\":\t\"mculover666\",\n\t\"age\":\t22,\n\t\"weight\":\t55."
+        "'{\n\t\"name\":\t\"mculover666\",\n\t\"age\":\t22,\n\t\"weight\":\t55."
         "5,\n\t\"address\":\t{\n\t\t\"country\":\t\"China\",\n\t\t\"zip-code\":"
         "5,\n\t\"address\":\t{\n\t\t\"country\":\t\"China\",\n\t\t\"zip-code\":"
         "\t\"111111\"\n\t},\n\t\"skill\":\t[\"c\", \"Java\", "
         "\t\"111111\"\n\t},\n\t\"skill\":\t[\"c\", \"Java\", "
-        "\"Python\"],\n\t\"student\":\tfalse\n}\r\n");
+        "\"Python\"],\n\t\"student\":\tfalse\n}'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -300,14 +301,14 @@ TEST(cJSON, test4) {
     /* assert */
     /* assert */
     EXPECT_STREQ(
     EXPECT_STREQ(
         log_buff[0],
         log_buff[0],
-        "{\n\t\"data\":\t{\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
+        "'{\n\t\"data\":\t{\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
         "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
         "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
         "\t\"4\",\n\t\t\"cardType\":\t\"00,01,02,03,04\",\n\t\t\"synfromhis\":"
         "\t\"4\",\n\t\t\"cardType\":\t\"00,01,02,03,04\",\n\t\t\"synfromhis\":"
         "\t\"no\",\n\t\t\"alarmThresholdValue\":\t\"37.2\","
         "\t\"no\",\n\t\t\"alarmThresholdValue\":\t\"37.2\","
         "\n\t\t\"hospitalName\":\t\"jell\",\n\t\t\"facediscernMode\":\t\"01\","
         "\n\t\t\"hospitalName\":\t\"jell\",\n\t\t\"facediscernMode\":\t\"01\","
         "\n\t\t\"hospitalCode\":\t\"102\"\n\t},\n\t\"success\":\ttrue,"
         "\n\t\t\"hospitalCode\":\t\"102\"\n\t},\n\t\"success\":\ttrue,"
         "\n\t\"resultCode\":\t\"0000\",\n\t\"time\":\t\"2022-05-20 "
         "\n\t\"resultCode\":\t\"0000\",\n\t\"time\":\t\"2022-05-20 "
-        "14:10:27\",\n\t\"message\":\t\"ok\"\n}\r\n");
+        "14:10:27\",\n\t\"message\":\t\"ok\"\n}'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -327,7 +328,7 @@ TEST(cJSON, test5) {
 
 
     EXPECT_STREQ(
     EXPECT_STREQ(
         log_buff[0],
         log_buff[0],
-        "{\n\t\"data\":\t{\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
+        "'{\n\t\"data\":\t{\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
         "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
         "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
         "\t\"4\",\n\t\t\"cardType\":\t\"00,01,02,03,04\",\n\t\t\"synfromhis\":"
         "\t\"4\",\n\t\t\"cardType\":\t\"00,01,02,03,04\",\n\t\t\"synfromhis\":"
         "\t\"no\",\n\t\t\"alarmThresholdValue\":\t\"37.2\","
         "\t\"no\",\n\t\t\"alarmThresholdValue\":\t\"37.2\","
@@ -337,7 +338,7 @@ TEST(cJSON, test5) {
         "\t\"102\"\n\t},\n\t\"success\":\ttrue,\n\t\"resultCode\":\t\"0000\","
         "\t\"102\"\n\t},\n\t\"success\":\ttrue,\n\t\"resultCode\":\t\"0000\","
         "\n\t\"time\":\t\"2022-05-20 "
         "\n\t\"time\":\t\"2022-05-20 "
         "14:10:27\",\n\t\"message\":"
         "14:10:27\",\n\t\"message\":"
-        "\t\"\346\223\215\344\275\234\346\210\220\345\212\237\"\n}\r\n");
+        "\t\"\346\223\215\344\275\234\346\210\220\345\212\237\"\n}'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -357,7 +358,7 @@ TEST(cJSON, test6) {
 
 
     EXPECT_STREQ(
     EXPECT_STREQ(
         log_buff[0],
         log_buff[0],
-        "{\n\t\"array33\":\t[\"c\", \"Java\", "
+        "'{\n\t\"array33\":\t[\"c\", \"Java\", "
         "\"Python\"],\n\t\"data\":\t{"
         "\"Python\"],\n\t\"data\":\t{"
         "\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
         "\n\t\t\"requestSocialInsuranceFromYangCheng\":\t\"\","
         "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
         "\n\t\t\"authenticationComparison\":\t\"no\",\n\t\t\"startupLogo\":"
@@ -369,7 +370,7 @@ TEST(cJSON, test6) {
         "\t\"102\"\n\t},\n\t\"success\":\ttrue,\n\t\"resultCode\":\t\"0000\","
         "\t\"102\"\n\t},\n\t\"success\":\ttrue,\n\t\"resultCode\":\t\"0000\","
         "\n\t\"time\":\t\"2022-05-20 "
         "\n\t\"time\":\t\"2022-05-20 "
         "14:10:27\",\n\t\"message\":"
         "14:10:27\",\n\t\"message\":"
-        "\t\"\346\223\215\344\275\234\346\210\220\345\212\237\"\n}\r\n");
+        "\t\"\346\223\215\344\275\234\346\210\220\345\212\237\"\n}'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -458,3 +459,5 @@ TEST(cJSON, module) {
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);
 }
 }
 #endif
 #endif
+
+#endif

+ 20 - 0
port/linux/test/class-test.cpp

@@ -50,3 +50,23 @@ TEST(class, static_method) {
     obj_deinit(self);
     obj_deinit(self);
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);
 }
 }
+
+TEST(class, dir_) {
+    /* init */
+    pikaMemInfo.heapUsedMax = 0;
+    /* run */
+    PikaObj* self = newRootObj("pikaMain", New_PikaMain);
+    __platform_printf("BEGIN\r\n");
+    obj_run(self,
+            "class T:\n"
+            "    def a(self):\n"
+            "        return 1\n"
+            "t = T()\n"
+            "l = dir(t)\n"
+            "print(l)\n");
+    /* collect */
+    /* assert */
+    /* deinit */
+    obj_deinit(self);
+    EXPECT_EQ(pikaMemNow(), 0);
+}

+ 3 - 2
port/linux/test/configparser-test.cpp

@@ -1,6 +1,6 @@
 #include "test_common.h"
 #include "test_common.h"
-
-#if PIKA_SYNTAX_SLICE_ENABLE
+#if PIKA_STACK_BUFF_SIZE >= 0x1000
+#if PIKA_SYNTAX_SLICE_ENABLE 
 TEST(configparser, test1) {
 TEST(configparser, test1) {
     char* s =
     char* s =
         "[DEFAULT]\n"
         "[DEFAULT]\n"
@@ -54,3 +54,4 @@ TEST(configparser, test2) {
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);
 }
 }
 #endif
 #endif
+#endif

+ 18 - 18
port/linux/test/pikaMain-test.cpp

@@ -1567,7 +1567,7 @@ TEST(pikaMain, def_in_shell) {
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
 
 
     /* skip the first obj_run */
     /* skip the first obj_run */
-    obj_run(pikaMain, "'BEGIN'");
+    __platform_printf("BEGIN\r\n");
     /* as run in shell */
     /* as run in shell */
     obj_run(pikaMain,
     obj_run(pikaMain,
             "def test():\n"
             "def test():\n"
@@ -1596,7 +1596,7 @@ TEST(pikaMain, def_in_shell_override) {
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
 
 
     /* skip the first obj_run */
     /* skip the first obj_run */
-    obj_run(pikaMain, "'BEGIN'");
+    __platform_printf("BEGIN\r\n");
     /* as run in shell */
     /* as run in shell */
     obj_run(pikaMain,
     obj_run(pikaMain,
             "def test():\n"
             "def test():\n"
@@ -1625,7 +1625,7 @@ TEST(pikaMain, class_in_shell) {
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
 
 
     /* skip the first obj_run */
     /* skip the first obj_run */
-    obj_run(pikaMain, "'BEGIN'");
+    __platform_printf("BEGIN\r\n");
     /* as run in shell */
     /* as run in shell */
     obj_run(pikaMain,
     obj_run(pikaMain,
             "class Test():\n"
             "class Test():\n"
@@ -1651,7 +1651,7 @@ TEST(pikaMain, class_TinyObj) {
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
     PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
 
 
     /* skip the first obj_run */
     /* skip the first obj_run */
-    obj_run(pikaMain, "'BEGIN'");
+    __platform_printf("BEGIN\r\n");
     /* as run in shell */
     /* as run in shell */
     obj_run(pikaMain,
     obj_run(pikaMain,
             "class MyClass( TinyObj ):\n"
             "class MyClass( TinyObj ):\n"
@@ -1829,10 +1829,10 @@ TEST(pikaMain, builtin_hex) {
             "hex(-12039)\n");
             "hex(-12039)\n");
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[4], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[4], "BEGIN\r\n");
-    EXPECT_STREQ(log_buff[3], "0x03\r\n");
-    EXPECT_STREQ(log_buff[2], "-0x03\r\n");
-    EXPECT_STREQ(log_buff[1], "0x4d2\r\n");
-    EXPECT_STREQ(log_buff[0], "-0x2f07\r\n");
+    EXPECT_STREQ(log_buff[3], "'0x03'\r\n");
+    EXPECT_STREQ(log_buff[2], "'-0x03'\r\n");
+    EXPECT_STREQ(log_buff[1], "'0x4d2'\r\n");
+    EXPECT_STREQ(log_buff[0], "'-0x2f07'\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);
@@ -1862,7 +1862,7 @@ TEST(pikaMain, builtin_chr) {
     obj_run(self, "chr(97)\n");
     obj_run(self, "chr(97)\n");
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
-    EXPECT_STREQ(log_buff[0], "a\r\n");
+    EXPECT_STREQ(log_buff[0], "'a'\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);
@@ -1986,7 +1986,7 @@ TEST(pikaMain, neg_index) {
             "b'test'[-2]\n");
             "b'test'[-2]\n");
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[1], "\\x73");
     EXPECT_STREQ(log_buff[1], "\\x73");
-    EXPECT_STREQ(log_buff[3], "s\r\n");
+    EXPECT_STREQ(log_buff[3], "'s'\r\n");
     EXPECT_STREQ(log_buff[4], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[4], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2003,7 +2003,7 @@ TEST(pikaMain, slice1) {
     __platform_printf("BEGIN\r\n");
     __platform_printf("BEGIN\r\n");
     obj_run(self, "'test'[1:3]\n");
     obj_run(self, "'test'[1:3]\n");
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "es\r\n");
+    EXPECT_STREQ(log_buff[0], "'es'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2053,7 +2053,7 @@ TEST(pikaMain, str_add1) {
             "msg = \"device_names[\" + str(i) + \"]:\"\n"
             "msg = \"device_names[\" + str(i) + \"]:\"\n"
             "msg\n");
             "msg\n");
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "device_names[32]:\r\n");
+    EXPECT_STREQ(log_buff[0], "'device_names[32]:'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2069,7 +2069,7 @@ TEST(pikaMain, slice_eei) {
     __platform_printf("BEGIN\r\n");
     __platform_printf("BEGIN\r\n");
     obj_run(self, "'test'[1:-1]\n");
     obj_run(self, "'test'[1:-1]\n");
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "est\r\n");
+    EXPECT_STREQ(log_buff[0], "'est'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2086,7 +2086,7 @@ TEST(pikaMain, slice_a97) {
     __platform_printf("BEGIN\r\n");
     __platform_printf("BEGIN\r\n");
     obj_run(self, "'test'[:-2]\n");
     obj_run(self, "'test'[:-2]\n");
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "tes\r\n");
+    EXPECT_STREQ(log_buff[0], "'tes'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2103,7 +2103,7 @@ TEST(pikaMain, slice_a90) {
     __platform_printf("BEGIN\r\n");
     __platform_printf("BEGIN\r\n");
     obj_run(self, "'test'[1:]\n");
     obj_run(self, "'test'[1:]\n");
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "est\r\n");
+    EXPECT_STREQ(log_buff[0], "'est'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2161,7 +2161,7 @@ TEST(pikaMain, string_index) {
             "print(a)\n");
             "print(a)\n");
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[0], "tqst\r\n");
     EXPECT_STREQ(log_buff[0], "tqst\r\n");
-    EXPECT_STREQ(log_buff[1], "e\r\n");
+    EXPECT_STREQ(log_buff[1], "'e'\r\n");
     EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[2], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2196,7 +2196,7 @@ TEST(pikaMain, string_str) {
     __platform_printf("BEGIN\r\n");
     __platform_printf("BEGIN\r\n");
     obj_run(self, "str(PikaStdData.String('test'))\n");
     obj_run(self, "str(PikaStdData.String('test'))\n");
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "test\r\n");
+    EXPECT_STREQ(log_buff[0], "'test'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(self);
     obj_deinit(self);
@@ -2609,7 +2609,7 @@ TEST(pikaMain, issue_fa13f4) {
     obj_run(pikaMain, lines);
     obj_run(pikaMain, lines);
     /* collect */
     /* collect */
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "{'language': [c, python, Java]}\r\n");
+    EXPECT_STREQ(log_buff[0], "{'language': ['c', 'python', 'Java']}\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);

+ 3 - 3
port/linux/test/stddata-test.cpp

@@ -11,14 +11,14 @@ TEST(stddata, test1) {
     /* collect */
     /* collect */
     /* assert */
     /* assert */
     EXPECT_STREQ(log_buff[0], "{'len': 3, 'list': [1, 2, 3]}\r\n");
     EXPECT_STREQ(log_buff[0], "{'len': 3, 'list': [1, 2, 3]}\r\n");
-    EXPECT_STREQ(log_buff[1], "dict_keys([c, b, a])\r\n");
+    EXPECT_STREQ(log_buff[1], "dict_keys(['c', 'b', 'a'])\r\n");
     EXPECT_STREQ(log_buff[2], "a\r\n");
     EXPECT_STREQ(log_buff[2], "a\r\n");
     EXPECT_STREQ(log_buff[3], "b\r\n");
     EXPECT_STREQ(log_buff[3], "b\r\n");
     EXPECT_STREQ(log_buff[4], "c\r\n");
     EXPECT_STREQ(log_buff[4], "c\r\n");
     EXPECT_STREQ(log_buff[5], "a\r\n");
     EXPECT_STREQ(log_buff[5], "a\r\n");
     EXPECT_STREQ(log_buff[6], "b\r\n");
     EXPECT_STREQ(log_buff[6], "b\r\n");
     EXPECT_STREQ(log_buff[7], "c\r\n");
     EXPECT_STREQ(log_buff[7], "c\r\n");
-    EXPECT_STREQ(log_buff[8], "{'c': test, 'b': 2, 'a': 1}\r\n");
+    EXPECT_STREQ(log_buff[8], "{'c': 'test', 'b': 2, 'a': 1}\r\n");
     EXPECT_STREQ(log_buff[9], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[9], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -85,7 +85,7 @@ TEST(stddata, encode_decode) {
 }
 }
 #endif
 #endif
 
 
-#if PIKA_FILEIO_ENABLE
+#if PIKA_FILEIO_ENABLE && PIKA_STACK_BUFF_SIZE > 0x1000
 TEST(stddata, fileio) {
 TEST(stddata, fileio) {
     /* init */
     /* init */
     pikaMemInfo.heapUsedMax = 0;
     pikaMemInfo.heapUsedMax = 0;

+ 2 - 2
port/linux/test/string-test.cpp

@@ -198,7 +198,7 @@ TEST(string, split_chain) {
             "\n");
             "\n");
     /* collect */
     /* collect */
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "[  a, b, c,  d  ]\r\n");
+    EXPECT_STREQ(log_buff[0], "['  a', 'b', 'c', ' d  ']\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
@@ -216,7 +216,7 @@ TEST(string, str_chain) {
             "\n");
             "\n");
     /* collect */
     /* collect */
     /* assert */
     /* assert */
-    EXPECT_STREQ(log_buff[0], "test\r\n");
+    EXPECT_STREQ(log_buff[0], "'test'\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     EXPECT_STREQ(log_buff[1], "BEGIN\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);

+ 1 - 1
port/linux/test/strs-test.cpp

@@ -113,7 +113,7 @@ TEST(str, transfer) {
     /* collect */
     /* collect */
     /* assert */
     /* assert */
 
 
-    EXPECT_STREQ(log_buff[0], "\r\n\r\n");
+    EXPECT_STREQ(log_buff[0], "'\r\n'\r\n");
     /* deinit */
     /* deinit */
     obj_deinit(pikaMain);
     obj_deinit(pikaMain);
     EXPECT_EQ(pikaMemNow(), 0);
     EXPECT_EQ(pikaMemNow(), 0);

+ 13 - 3
src/PikaObj.c

@@ -522,6 +522,17 @@ char* methodArg_getTypeList(Arg* method_arg, char* buffs, size_t size) {
     return strCut(buffs, method_dec, '(', ')');
     return strCut(buffs, method_dec, '(', ')');
 }
 }
 
 
+char* methodArg_getName(Arg* method_arg, char* buffs, size_t size) {
+    char* method_dec = strCopy(buffs, methodArg_getDec(method_arg));
+    char res[PIKA_NAME_BUFF_SIZE] = {0};
+    if (strGetSize(method_dec) > size) {
+        return NULL;
+    }
+    strPopToken(res, method_dec, '(');
+    strCopy(buffs, res);
+    return buffs;
+}
+
 Method obj_getNativeMethod(PikaObj* self, char* method_name) {
 Method obj_getNativeMethod(PikaObj* self, char* method_name) {
     Arg* method_arg = obj_getMethodArg(self, method_name);
     Arg* method_arg = obj_getMethodArg(self, method_name);
     if (NULL == method_arg) {
     if (NULL == method_arg) {
@@ -556,10 +567,9 @@ PikaObj* methodArg_getDefContext(Arg* method_arg) {
 
 
 static void obj_saveMethodInfo(PikaObj* self, MethodInfo* method_info) {
 static void obj_saveMethodInfo(PikaObj* self, MethodInfo* method_info) {
     Args buffs = {0};
     Args buffs = {0};
-    char* pars = strsRemovePrefix(&buffs, method_info->dec, method_info->name);
-    method_info->pars = pars;
+    method_info->pars = method_info->dec;
     Arg* arg = New_arg(NULL);
     Arg* arg = New_arg(NULL);
-    uint32_t size_pars = strGetSize(pars);
+    uint32_t size_pars = strGetSize(method_info->pars);
     uintptr_t method_info_bytecode_frame =
     uintptr_t method_info_bytecode_frame =
         (uintptr_t)method_info->bytecode_frame;
         (uintptr_t)method_info->bytecode_frame;
     uintptr_t method_info_def_context = (uintptr_t)method_info->def_context;
     uintptr_t method_info_def_context = (uintptr_t)method_info->def_context;

+ 1 - 0
src/PikaObj.h

@@ -192,6 +192,7 @@ char* method_getStr(Args* args, char* argName);
 void method_returnArg(Args* args, Arg* arg);
 void method_returnArg(Args* args, Arg* arg);
 char* methodArg_getDec(Arg* method_arg);
 char* methodArg_getDec(Arg* method_arg);
 char* methodArg_getTypeList(Arg* method_arg, char* buffs, size_t size);
 char* methodArg_getTypeList(Arg* method_arg, char* buffs, size_t size);
+char* methodArg_getName(Arg* method_arg, char* buffs, size_t size);
 ByteCodeFrame* methodArg_getBytecodeFrame(Arg* method_arg);
 ByteCodeFrame* methodArg_getBytecodeFrame(Arg* method_arg);
 Method methodArg_getPtr(Arg* method_arg);
 Method methodArg_getPtr(Arg* method_arg);
 
 

+ 2 - 2
src/PikaVM.c

@@ -555,7 +555,7 @@ static int VMState_loadArgsFromMethodArg(VMState* vm,
                                          Arg* method_arg,
                                          Arg* method_arg,
                                          char* method_name,
                                          char* method_name,
                                          int arg_num_used) {
                                          int arg_num_used) {
-    char _buffs1[PIKA_LINE_BUFF_SIZE / 2] = {0};
+    char _buffs1[PIKA_LINE_BUFF_SIZE] = {0};
     char* buffs1 = (char*)_buffs1;
     char* buffs1 = (char*)_buffs1;
     char _buffs2[PIKA_LINE_BUFF_SIZE / 2] = {0};
     char _buffs2[PIKA_LINE_BUFF_SIZE / 2] = {0};
     char* buffs2 = (char*)_buffs2;
     char* buffs2 = (char*)_buffs2;
@@ -2290,7 +2290,7 @@ void VMState_solveUnusedStack(VMState* vm) {
         } else if (type == ARG_TYPE_FLOAT) {
         } else if (type == ARG_TYPE_FLOAT) {
             __platform_printf("%f\r\n", arg_getFloat(arg));
             __platform_printf("%f\r\n", arg_getFloat(arg));
         } else if (type == ARG_TYPE_STRING) {
         } else if (type == ARG_TYPE_STRING) {
-            __platform_printf("%s\r\n", arg_getStr(arg));
+            __platform_printf("'%s'\r\n", arg_getStr(arg));
         } else if (type == ARG_TYPE_BYTES) {
         } else if (type == ARG_TYPE_BYTES) {
             arg_printBytes(arg);
             arg_printBytes(arg);
         } else if (ARG_TYPE_POINTER == type ||
         } else if (ARG_TYPE_POINTER == type ||

+ 1 - 1
src/dataString.c

@@ -233,7 +233,7 @@ int32_t strIsContain(char* str, char ch) {
 }
 }
 
 
 char* strCopy(char* strBuff, char* strIn) {
 char* strCopy(char* strBuff, char* strIn) {
-    __platform_memcpy(strBuff, strIn, strGetSize(strIn));
+    __platform_memcpy(strBuff, strIn, strGetSize(strIn) + 1);
     return strBuff;
     return strBuff;
 }
 }