From 4a943b479c4c035372d9dea1cec9f06b66ac2b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=98=82?= Date: Tue, 5 Jul 2022 06:23:49 +0000 Subject: [PATCH] !41 Support chain invoke like < String('test').split() > * support chain invoke ok * add test for S(S.replace()).replace() * parse to RUN .split * try to support chain invoke, not ok * can devide a chain --- package/PikaStdLib/PikaStdLib_SysObj.c | 6 +- port/linux/.vscode/launch.json | 2 +- .../PikaStdLib/PikaStdLib_SysObj.c | 6 +- port/linux/test/builtin-test.cpp | 2 +- port/linux/test/configparser-test.cpp | 2 +- port/linux/test/ctypes-test.cpp | 2 +- port/linux/test/parse-test.cpp | 70 +++++-- port/linux/test/pikaMain-test.cpp | 28 +-- port/linux/test/stddata-test.cpp | 2 +- port/linux/test/string-test.cpp | 73 ++++++- src/PikaParser.c | 190 ++++++++++++------ src/PikaParser.h | 1 + src/PikaVM.c | 65 ++++-- src/PikaVersion.h | 2 +- src/pika_config_valid.h | 30 +-- 15 files changed, 342 insertions(+), 139 deletions(-) diff --git a/package/PikaStdLib/PikaStdLib_SysObj.c b/package/PikaStdLib/PikaStdLib_SysObj.c index f9f0b2434..949850b1f 100644 --- a/package/PikaStdLib/PikaStdLib_SysObj.c +++ b/package/PikaStdLib/PikaStdLib_SysObj.c @@ -392,7 +392,7 @@ Arg* PikaStdLib_SysObj___slice__(PikaObj* self, Arg* obj, Arg* start, int step) { -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE /* No interger index only support __get__ */ if (!(arg_getType(start) == ARG_TYPE_INT && arg_getType(end) == ARG_TYPE_INT)) { @@ -528,7 +528,7 @@ void PikaStdLib_SysObj_printNoEnd(PikaObj* self, Arg* val) { } char* PikaStdLib_SysObj_cformat(PikaObj* self, char* fmt, PikaTuple* var) { - #if PIKA_SYNTEX_ITEM_FORMAT_ENABLE + #if PIKA_SYNTEX_FORMAT_ENABLE Args buffs = {0}; pikaMemMaxReset(); char* res = strsFormatList(&buffs, fmt, &var->super); @@ -538,7 +538,7 @@ char* PikaStdLib_SysObj_cformat(PikaObj* self, char* fmt, PikaTuple* var) { return res; #else obj_setErrorCode(self, 1); - __platform_printf("[Error] PIKA_SYNTEX_ITEM_FORMAT_ENABLE is not enabled.\r\n"); + __platform_printf("[Error] PIKA_SYNTEX_FORMAT_ENABLE is not enabled.\r\n"); return NULL; #endif } diff --git a/port/linux/.vscode/launch.json b/port/linux/.vscode/launch.json index 604fb96c9..180d7e275 100644 --- a/port/linux/.vscode/launch.json +++ b/port/linux/.vscode/launch.json @@ -11,7 +11,7 @@ "program": "${workspaceFolder}/build/test/pikascript_test", // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain", "args": [ - // "--gtest_filter=parser.configparser" + // "--gtest_filter=string.split_chain" ], "stopAtEntry": false, "cwd": "${workspaceFolder}", diff --git a/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c b/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c index f9f0b2434..949850b1f 100644 --- a/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c +++ b/port/linux/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c @@ -392,7 +392,7 @@ Arg* PikaStdLib_SysObj___slice__(PikaObj* self, Arg* obj, Arg* start, int step) { -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE /* No interger index only support __get__ */ if (!(arg_getType(start) == ARG_TYPE_INT && arg_getType(end) == ARG_TYPE_INT)) { @@ -528,7 +528,7 @@ void PikaStdLib_SysObj_printNoEnd(PikaObj* self, Arg* val) { } char* PikaStdLib_SysObj_cformat(PikaObj* self, char* fmt, PikaTuple* var) { - #if PIKA_SYNTEX_ITEM_FORMAT_ENABLE + #if PIKA_SYNTEX_FORMAT_ENABLE Args buffs = {0}; pikaMemMaxReset(); char* res = strsFormatList(&buffs, fmt, &var->super); @@ -538,7 +538,7 @@ char* PikaStdLib_SysObj_cformat(PikaObj* self, char* fmt, PikaTuple* var) { return res; #else obj_setErrorCode(self, 1); - __platform_printf("[Error] PIKA_SYNTEX_ITEM_FORMAT_ENABLE is not enabled.\r\n"); + __platform_printf("[Error] PIKA_SYNTEX_FORMAT_ENABLE is not enabled.\r\n"); return NULL; #endif } diff --git a/port/linux/test/builtin-test.cpp b/port/linux/test/builtin-test.cpp index e724812ef..d981906f5 100644 --- a/port/linux/test/builtin-test.cpp +++ b/port/linux/test/builtin-test.cpp @@ -1,6 +1,6 @@ #include "test_common.h" -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(builtin, bytes) { /* init */ pikaMemInfo.heapUsedMax = 0; diff --git a/port/linux/test/configparser-test.cpp b/port/linux/test/configparser-test.cpp index be218f847..ab5693f94 100644 --- a/port/linux/test/configparser-test.cpp +++ b/port/linux/test/configparser-test.cpp @@ -1,6 +1,6 @@ #include "test_common.h" -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(configparser, test1) { char* s = "[DEFAULT]\n" diff --git a/port/linux/test/ctypes-test.cpp b/port/linux/test/ctypes-test.cpp index 08713ada9..faab41f05 100644 --- a/port/linux/test/ctypes-test.cpp +++ b/port/linux/test/ctypes-test.cpp @@ -1,6 +1,6 @@ #include "test_common.h" -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(ctypes, test1) { /* init */ pikaMemInfo.heapUsedMax = 0; diff --git a/port/linux/test/parse-test.cpp b/port/linux/test/parse-test.cpp index 439cb4814..2fc572461 100644 --- a/port/linux/test/parse-test.cpp +++ b/port/linux/test/parse-test.cpp @@ -1800,7 +1800,7 @@ TEST(parser, print_ddd) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, __get__3) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -1839,7 +1839,7 @@ TEST(parser, __get__3) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, __get__) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -1862,7 +1862,7 @@ TEST(parser, __get__) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, __get__2) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -1889,7 +1889,7 @@ TEST(parser, __get__2) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, __set__) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -2198,7 +2198,7 @@ TEST(asmer, asm_to_bytecode_0x0d) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, list_1_2) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -2615,7 +2615,7 @@ TEST(parser, str_equ) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, bytes_index) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -2693,7 +2693,7 @@ TEST(parser, tab) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, parse_issue2) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -2728,7 +2728,7 @@ TEST(parser, parse_issue3) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, slice1) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -2749,7 +2749,7 @@ TEST(parser, slice1) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, slice2) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -2919,7 +2919,7 @@ TEST(parser, mpy1) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(parser, slice_12lkj) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -3114,7 +3114,7 @@ TEST(parser, connection2) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(parser, format1) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -3133,7 +3133,7 @@ TEST(parser, format1) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(parser, format2) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -3349,7 +3349,6 @@ TEST(parser, def_issue1) { "0 DEF options(self)\n" "0 JMP 1\n" "B1\n" - "0 REF ...\n" "B1\n" "0 RET \n" "B0\n"); @@ -3357,9 +3356,48 @@ TEST(parser, def_issue1) { EXPECT_EQ(pikaMemNow(), 0); } -TEST(parser, configparser){ +TEST(parser, configparser) { Args buffs = {0}; - char* res = Parser_fileToAsm(&buffs, "package/pikascript/pika_configparser.py"); - __platform_printf("%s", res); + char* res = + Parser_fileToAsm(&buffs, "package/pikascript/pika_configparser.py"); + // printf("%s", res); strsDeinit(&buffs); } + +TEST(lexser, function_chain) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + Args* buffs = New_strBuff(); + + /* run */ + char* tokens = Lexer_getTokens(buffs, "String('a,b,c').split(',')"); + char* printTokens = Lexer_printTokens(buffs, tokens); + printf("%s\n", printTokens); + + /* assert */ + EXPECT_STREQ( + printTokens, + "{sym}String{dvd}({lit}'a,b,c'{dvd}){sym}.split{dvd}({lit}','{dvd})"); + + /* deinit */ + args_deinit(buffs); + EXPECT_EQ(pikaMemNow(), 0); +} + +TEST(parser, function_chain) { + pikaMemInfo.heapUsedMax = 0; + Args* buffs = New_strBuff(); + char* lines = "a = String('a,b,c').split(',')\n"; + __platform_printf("%s\n", lines); + char* pikaAsm = Parser_multiLineToAsm(buffs, lines); + __platform_printf("%s", pikaAsm); + EXPECT_STREQ(pikaAsm, + "B0\n" + "2 STR a,b,c\n" + "1 RUN String\n" + "1 STR ,\n" + "0 RUN .split\n" + "0 OUT a\n"); + args_deinit(buffs); + EXPECT_EQ(pikaMemNow(), 0); +} diff --git a/port/linux/test/pikaMain-test.cpp b/port/linux/test/pikaMain-test.cpp index b7ba1806f..dbed78c3a 100644 --- a/port/linux/test/pikaMain-test.cpp +++ b/port/linux/test/pikaMain-test.cpp @@ -809,7 +809,7 @@ TEST(pikaMain, str___get____set__) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, str__index__) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -837,7 +837,7 @@ TEST(pikaMain, str__index__) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, bytes__index__) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -865,7 +865,7 @@ TEST(pikaMain, bytes__index__) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, list_index) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -887,7 +887,7 @@ TEST(pikaMain, list_index) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, dict_index) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -1922,7 +1922,7 @@ TEST(pikaMain, REPL_push_mode) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, int_from_bytes) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -1952,7 +1952,7 @@ TEST(pikaMain, int_from_bytes) { // EXPECT_EQ(pikaMemNow(), 0); // } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, utils_int_to_bytes) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -1972,7 +1972,7 @@ TEST(pikaMain, utils_int_to_bytes) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, neg_index) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -1992,7 +1992,7 @@ TEST(pikaMain, neg_index) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, slice1) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -2009,7 +2009,7 @@ TEST(pikaMain, slice1) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, slice2) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -2058,7 +2058,7 @@ TEST(pikaMain, str_add1) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, slice_eei) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -2075,7 +2075,7 @@ TEST(pikaMain, slice_eei) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, slice_a97) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -2092,7 +2092,7 @@ TEST(pikaMain, slice_a97) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, slice_a90) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -2109,7 +2109,7 @@ TEST(pikaMain, slice_a90) { } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, slice_a12) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -2145,7 +2145,7 @@ TEST(pikaMain, str_string) { EXPECT_EQ(pikaMemNow(), 0); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(pikaMain, string_index) { /* init */ pikaMemInfo.heapUsedMax = 0; diff --git a/port/linux/test/stddata-test.cpp b/port/linux/test/stddata-test.cpp index ff3f18746..8653b57aa 100644 --- a/port/linux/test/stddata-test.cpp +++ b/port/linux/test/stddata-test.cpp @@ -1,7 +1,7 @@ #include "test_common.h" -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE TEST(stddata, test1) { /* init */ pikaMemInfo.heapUsedMax = 0; diff --git a/port/linux/test/string-test.cpp b/port/linux/test/string-test.cpp index 049aa2a18..884b6c1b0 100644 --- a/port/linux/test/string-test.cpp +++ b/port/linux/test/string-test.cpp @@ -1,6 +1,6 @@ #include "test_common.h" -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(string, cformat) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -17,7 +17,7 @@ TEST(string, cformat) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(string, cformat1) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -34,7 +34,7 @@ TEST(string, cformat1) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(string, format1) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -50,7 +50,7 @@ TEST(string, format1) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(string, format2) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -66,7 +66,7 @@ TEST(string, format2) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(string, print_file) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -87,7 +87,7 @@ TEST(string, print_file) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE TEST(string, format_parse1) { pikaMemInfo.heapUsedMax = 0; Args* buffs = New_strBuff(); @@ -146,7 +146,6 @@ TEST(string, strip) { EXPECT_EQ(pikaMemNow(), 0); } - TEST(string, replace) { /* init */ pikaMemInfo.heapUsedMax = 0; @@ -164,3 +163,63 @@ TEST(string, replace) { obj_deinit(pikaMain); EXPECT_EQ(pikaMemNow(), 0); } + +#if PIKA_SYNTEX_IMPORT_EX_ENABLE +TEST(string, replace_chain) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); + /* run */ + obj_run( + pikaMain, + "from PikaStdData import String as S\n" + "res = PikaStdData.String(' a,b,c, d ').replace('a', 'A')\n" + "res2 = S(S('[test]').replace('[','')).replace(']','')\n" + "\n"); + /* collect */ + char* res = obj_getStr(pikaMain, "res"); + char* res2 = obj_getStr(pikaMain, "res2"); + /* assert */ + EXPECT_STREQ(res, " A,b,c, d "); + EXPECT_STREQ(res2, "test"); + /* deinit */ + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} +#endif + +TEST(string, split_chain) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); + /* run */ + __platform_printf("BEGIN\r\n"); + obj_run(pikaMain, + "PikaStdData.String(' a,b,c, d ').split(',')\n" + "\n"); + /* collect */ + /* assert */ + EXPECT_STREQ(log_buff[0], "[ a, b, c, d ]\r\n"); + EXPECT_STREQ(log_buff[1], "BEGIN\r\n"); + /* deinit */ + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} + +TEST(string, str_chain) { + /* init */ + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); + /* run */ + __platform_printf("BEGIN\r\n"); + obj_run(pikaMain, + "PikaStdData.String('test').str\n" + "\n"); + /* collect */ + /* assert */ + EXPECT_STREQ(log_buff[0], "test\r\n"); + EXPECT_STREQ(log_buff[1], "BEGIN\r\n"); + /* deinit */ + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} diff --git a/src/PikaParser.c b/src/PikaParser.c index 281f175a2..b15f976b3 100644 --- a/src/PikaParser.c +++ b/src/PikaParser.c @@ -186,54 +186,64 @@ static enum StmtType Lexer_matchStmtType(char* right) { rightWithoutSubStmt = __removeTokensBetween(&buffs, rightWithoutSubStmt, "{", "}"); - uint8_t is_get_operator = 0; - uint8_t is_get_method = 0; - uint8_t is_get_string = 0; - uint8_t is_get_bytes = 0; - uint8_t is_get_number = 0; - uint8_t is_get_symbol = 0; - uint8_t is_get_list = 0; - uint8_t is_get_dict = 0; - uint8_t is_get_import = 0; + PIKA_BOOL is_get_operator = PIKA_FALSE; + PIKA_BOOL is_get_method = PIKA_FALSE; + PIKA_BOOL is_get_string = PIKA_FALSE; + PIKA_BOOL is_get_bytes = PIKA_FALSE; + PIKA_BOOL is_get_number = PIKA_FALSE; + PIKA_BOOL is_get_symbol = PIKA_FALSE; + PIKA_BOOL is_get_list = PIKA_FALSE; + PIKA_BOOL is_get_dict = PIKA_FALSE; + PIKA_BOOL is_get_import = PIKA_FALSE; + PIKA_BOOL is_get_chain = PIKA_FALSE; ParserState_forEachToken(ps, rightWithoutSubStmt) { ParserState_iterStart(&ps); /* collect type */ if (strEqu(ps.token1.pyload, " import ")) { - is_get_import = 1; + is_get_import = PIKA_TRUE; goto iter_continue; } if (strEqu(ps.token1.pyload, "[")) { - is_get_list = 1; + is_get_list = PIKA_TRUE; goto iter_continue; } + if (strEqu(ps.token1.pyload, "...")) { + goto iter_continue; + } + if (strIsStartWith(ps.token1.pyload, ".")) { + if (ps.iter_index != 1) { + is_get_chain = PIKA_TRUE; + goto iter_continue; + } + } if (strEqu(ps.token1.pyload, "{")) { - is_get_dict = 1; + is_get_dict = PIKA_TRUE; goto iter_continue; } if (ps.token1.type == TOKEN_operator) { - is_get_operator = 1; + is_get_operator = PIKA_TRUE; goto iter_continue; } if (ps.token2.type == TOKEN_devider) { - is_get_method = 1; + is_get_method = PIKA_TRUE; goto iter_continue; } if (ps.token1.type == TOKEN_literal) { if (ps.token1.pyload[0] == '\'' || ps.token1.pyload[0] == '"') { - is_get_string = 1; + is_get_string = PIKA_TRUE; goto iter_continue; } if (ps.token1.pyload[1] == '\'' || ps.token1.pyload[1] == '"') { if (ps.token1.pyload[0] == 'b') { - is_get_bytes = 1; + is_get_bytes = PIKA_TRUE; goto iter_continue; } } - is_get_number = 1; + is_get_number = PIKA_TRUE; goto iter_continue; } if (ps.token1.type == TOKEN_symbol) { - is_get_symbol = 1; + is_get_symbol = PIKA_TRUE; goto iter_continue; } iter_continue: @@ -255,6 +265,10 @@ static enum StmtType Lexer_matchStmtType(char* right) { stmtType = STMT_dict; goto exit; } + if (is_get_chain) { + stmtType = STMT_chain; + goto exit; + } if (is_get_method) { stmtType = STMT_method; goto exit; @@ -845,7 +859,7 @@ void ParserState_beforeIter(struct ParserState* ps) { arg_setStr(NULL, "", Parser_popToken(ps->buffs_p, ps->tokens)); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE static void Slice_getPars(Args* outBuffs, char* inner, char** pStart, @@ -902,7 +916,7 @@ static void Slice_getPars(Args* outBuffs, } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE char* Parser_solveBranckets(Args* outBuffs, char* content, char* stmt, @@ -1030,7 +1044,7 @@ exit: } #endif -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE char* Parser_solveRightBranckets(Args* outBuffs, char* right) { return Parser_solveBranckets(outBuffs, right, NULL, "right"); } @@ -1040,7 +1054,7 @@ char* Parser_solveLeftBranckets(Args* outBuffs, char* right, char* left) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE char* Parser_solveFormat(Args* outBuffs, char* right) { /* quick skip */ if (!strIsContain(right, '%')) { @@ -1217,6 +1231,17 @@ exit: return is_left_exist; } +PIKA_RES AST_setThisNode(AST* ast, char* node_type, char* node_content) { + return obj_setStr(ast, node_type, node_content); +} + +AST* AST_parseStmt(AST* ast, char* stmt); +PIKA_RES AST_parseSubStmt(AST* ast, char* node_content) { + queueObj_pushObj(ast, (char*)"stmt"); + AST_parseStmt(queueObj_getCurrentObj(ast), node_content); + return PIKA_RES_OK; +} + AST* AST_parseStmt(AST* ast, char* stmt) { Args buffs = {0}; char* assignment = strsGetFirstToken(&buffs, stmt, '('); @@ -1260,7 +1285,7 @@ AST* AST_parseStmt(AST* ast, char* stmt) { isLeftExist = Parser_solveSelfOperator(&buffs, stmt, &right, &left); } -#if PIKA_SYNTEX_ITEM_SLICE_ENABLE +#if PIKA_SYNTEX_SLICE_ENABLE char* right_new = right; /* solve the [] stmt */ right = Parser_solveRightBranckets(&buffs, right); @@ -1272,13 +1297,13 @@ AST* AST_parseStmt(AST* ast, char* stmt) { } #endif -#if PIKA_SYNTEX_ITEM_FORMAT_ENABLE +#if PIKA_SYNTEX_FORMAT_ENABLE right = Parser_solveFormat(&buffs, right); #endif /* set left */ if (isLeftExist) { - obj_setStr(ast, (char*)"left", left); + AST_setThisNode(ast, (char*)"left", left); } /* match statment type */ enum StmtType stmtType = Lexer_matchStmtType(right); @@ -1290,22 +1315,20 @@ AST* AST_parseStmt(AST* ast, char* stmt) { result = PIKA_RES_ERR_SYNTAX_ERROR; goto exit; } - obj_setStr(ast, (char*)"operator", operator); + AST_setThisNode(ast, (char*)"operator", operator); char* rightBuff = strsCopy(&buffs, right); char* subStmt1 = strsPopTokenWithSkip_byStr(&buffs, rightBuff, operator, '(', ')'); char* subStmt2 = rightBuff; - queueObj_pushObj(ast, (char*)"stmt"); - AST_parseStmt(queueObj_getCurrentObj(ast), subStmt1); - queueObj_pushObj(ast, (char*)"stmt"); - AST_parseStmt(queueObj_getCurrentObj(ast), subStmt2); + AST_parseSubStmt(ast, subStmt1); + AST_parseSubStmt(ast, subStmt2); goto exit; } #if PIKA_BUILTIN_LIST_ENABLE /* solve list stmt */ if (STMT_list == stmtType) { - obj_setStr(ast, (char*)"list", "list"); + AST_setThisNode(ast, (char*)"list", "list"); char* subStmts = strsCut(&buffs, right, '[', ']'); subStmts = strsAppend(&buffs, subStmts, ","); Arg* subStmt = arg_setStr(NULL, "", ""); @@ -1321,9 +1344,8 @@ AST* AST_parseStmt(AST* ast, char* stmt) { /* not in brankets */ if (strEqu(ps.token1.pyload, ",")) { /* found "," push subStmt */ - queueObj_pushObj(ast, (char*)"stmt"); subStmt_str = arg_getStr(subStmt); - AST_parseStmt(queueObj_getCurrentObj(ast), subStmt_str); + AST_parseSubStmt(ast, subStmt_str); /* clear subStmt */ arg_deinit(subStmt); subStmt = arg_setStr(NULL, "", ""); @@ -1344,7 +1366,7 @@ AST* AST_parseStmt(AST* ast, char* stmt) { #if PIKA_BUILTIN_DICT_ENABLE /* solve list stmt */ if (STMT_dict == stmtType) { - obj_setStr(ast, (char*)"dict", "dict"); + AST_setThisNode(ast, (char*)"dict", "dict"); char* subStmts = strsCut(&buffs, right, '{', '}'); subStmts = strsAppend(&buffs, subStmts, ","); Arg* subStmt = arg_setStr(NULL, "", ""); @@ -1361,9 +1383,8 @@ AST* AST_parseStmt(AST* ast, char* stmt) { if (strEqu(ps.token1.pyload, ",") || strEqu(ps.token1.pyload, ":")) { /* found "," or ":" push subStmt */ - queueObj_pushObj(ast, (char*)"stmt"); subStmt_str = arg_getStr(subStmt); - AST_parseStmt(queueObj_getCurrentObj(ast), subStmt_str); + AST_parseSubStmt(ast, subStmt_str); /* clear subStmt */ arg_deinit(subStmt); subStmt = arg_setStr(NULL, "", ""); @@ -1381,10 +1402,50 @@ AST* AST_parseStmt(AST* ast, char* stmt) { } #endif + /* solve method chain */ + if (STMT_chain == stmtType) { + uint8_t last_chain_i = 0; + { + ParserState_forEachToken(ps, right) { + ParserState_iterStart(&ps); + if (ps.branket_deepth > 0) { + ParserState_iterEnd(&ps); + continue; + } + /* not in brankets */ + if (strIsStartWith(ps.token1.pyload, ".")) { + last_chain_i = ps.iter_index; + } + ParserState_iterEnd(&ps); + } + ParserState_deinit(&ps); + } + Arg* chainStmt = arg_setStr(NULL, "", ""); + Arg* mainStmt = arg_setStr(NULL, "", ""); + ParserState_forEachToken(ps, right) { + ParserState_iterStart(&ps); + /* append substmt1 to last_chain_i*/ + if (ps.iter_index < last_chain_i) { + chainStmt = arg_strAppend(chainStmt, ps.token1.pyload); + } + /* append substmt2 from last_chain_i to end */ + if (ps.iter_index >= last_chain_i) { + mainStmt = arg_strAppend(mainStmt, ps.token1.pyload); + } + ParserState_iterEnd(&ps); + } + ParserState_deinit(&ps); + AST_parseSubStmt(ast, arg_getStr(chainStmt)); + AST_parseStmt(ast, arg_getStr(mainStmt)); + arg_deinit(chainStmt); + arg_deinit(mainStmt); + goto exit; + } + /* solve method stmt */ if (STMT_method == stmtType) { method = strsGetFirstToken(&buffs, right, '('); - obj_setStr(ast, (char*)"method", method); + AST_setThisNode(ast, (char*)"method", method); char* subStmts = strsCut(&buffs, right, '(', ')'); /* add ',' at the end */ subStmts = strsAppend(&buffs, subStmts, ","); @@ -1404,9 +1465,8 @@ AST* AST_parseStmt(AST* ast, char* stmt) { /* not in brankets */ if (strEqu(ps.token1.pyload, ",")) { /* found "," push subStmt */ - queueObj_pushObj(ast, (char*)"stmt"); subStmt_str = arg_getStr(subStmt); - AST_parseStmt(queueObj_getCurrentObj(ast), subStmt_str); + AST_parseSubStmt(ast, subStmt_str); /* clear subStmt */ arg_deinit(subStmt); subStmt = arg_setStr(NULL, "", ""); @@ -1427,13 +1487,13 @@ AST* AST_parseStmt(AST* ast, char* stmt) { /* solve reference stmt */ if (STMT_reference == stmtType) { ref = right; - obj_setStr(ast, (char*)"ref", ref); + AST_setThisNode(ast, (char*)"ref", ref); goto exit; } /* solve import stmt */ if (STMT_import == stmtType) { import = strsGetLastToken(&buffs, right, ' '); - obj_setStr(ast, (char*)"import", import); + AST_setThisNode(ast, (char*)"import", import); goto exit; } /* solve str stmt */ @@ -1448,7 +1508,7 @@ AST* AST_parseStmt(AST* ast, char* stmt) { str = strsReplace(&buffs, str, "\\\"", "\""); str = strsReplace(&buffs, str, "\\'", "'"); } - obj_setStr(ast, (char*)"string", str); + AST_setThisNode(ast, (char*)"string", str); goto exit; } /* solve bytes stmt */ @@ -1456,13 +1516,13 @@ AST* AST_parseStmt(AST* ast, char* stmt) { str = right + 1; str = strsDeleteChar(&buffs, str, '\''); str = strsDeleteChar(&buffs, str, '\"'); - obj_setStr(ast, (char*)"bytes", str); + AST_setThisNode(ast, (char*)"bytes", str); goto exit; } /* solve number stmt */ if (STMT_number == stmtType) { num = right; - obj_setStr(ast, (char*)"num", num); + AST_setThisNode(ast, (char*)"num", num); goto exit; } exit: @@ -1585,7 +1645,7 @@ AST* AST_parseLine(char* line, Stack* block_stack) { if (strIsStartWith(line_start, keyword) && (line_start[keyword_len] == ' ')) { stmt = strsCut(&buffs, line_start, ' ', ':'); - obj_setStr(ast, "block", keyword); + AST_setThisNode(ast, "block", keyword); if (NULL != block_stack) { stack_pushStr(block_stack, keyword); } @@ -1601,7 +1661,7 @@ AST* AST_parseLine(char* line, Stack* block_stack) { if ((strIsStartWith(line_start, keyward)) && ((line_start[keyward_size] == ' ') || (line_start[keyward_size] == 0))) { - obj_setStr(ast, keyward, ""); + AST_setThisNode(ast, keyward, ""); stmt = ""; goto block_matched; } @@ -1612,15 +1672,15 @@ AST* AST_parseLine(char* line, Stack* block_stack) { Args* list_buffs = New_strBuff(); char* line_buff = strsCopy(list_buffs, line_start + 4); char* arg_in = strsPopToken(list_buffs, line_buff, ' '); - obj_setStr(ast, "arg_in", arg_in); + AST_setThisNode(ast, "arg_in", arg_in); strsPopToken(list_buffs, line_buff, ' '); char* list_in = strsPopToken(list_buffs, line_buff, ':'); list_in = strsAppend(list_buffs, "iter(", list_in); list_in = strsAppend(list_buffs, list_in, ")"); list_in = strsCopy(&buffs, list_in); args_deinit(list_buffs); - obj_setStr(ast, "block", "for"); - obj_setStr(ast, "list_in", list_in); + AST_setThisNode(ast, "block", "for"); + AST_setThisNode(ast, "list_in", list_in); if (NULL != block_stack) { stack_pushStr(block_stack, "for"); } @@ -1632,7 +1692,7 @@ AST* AST_parseLine(char* line, Stack* block_stack) { if (strIsStartWith(line_start, "else")) { if ((line_start[4] == ' ') || (line_start[4] == ':')) { stmt = ""; - obj_setStr(ast, "block", "else"); + AST_setThisNode(ast, "block", "else"); if (NULL != block_stack) { stack_pushStr(block_stack, "else"); } @@ -1645,7 +1705,7 @@ AST* AST_parseLine(char* line, Stack* block_stack) { if (strIsStartWith(line_start, "try")) { if ((line_start[3] == ' ') || (line_start[3] == ':')) { stmt = ""; - obj_setStr(ast, "block", "try"); + AST_setThisNode(ast, "block", "try"); if (NULL != block_stack) { stack_pushStr(block_stack, "try"); } @@ -1657,7 +1717,7 @@ AST* AST_parseLine(char* line, Stack* block_stack) { if (strIsStartWith(line_start, "except")) { if ((line_start[6] == ' ') || (line_start[6] == ':')) { stmt = ""; - obj_setStr(ast, "block", "except"); + AST_setThisNode(ast, "block", "except"); if (NULL != block_stack) { stack_pushStr(block_stack, "except"); } @@ -1667,7 +1727,7 @@ AST* AST_parseLine(char* line, Stack* block_stack) { #endif if (strEqu(line_start, "return")) { - obj_setStr(ast, "return", ""); + AST_setThisNode(ast, "return", ""); stmt = ""; goto block_matched; } @@ -1675,13 +1735,13 @@ AST* AST_parseLine(char* line, Stack* block_stack) { char* lineBuff = strsCopy(&buffs, line_start); strsPopToken(&buffs, lineBuff, ' '); stmt = lineBuff; - obj_setStr(ast, "return", ""); + AST_setThisNode(ast, "return", ""); goto block_matched; } #if PIKA_SYNTEX_EXCEPTION_ENABLE if (strEqu(line_start, "raise")) { - obj_setStr(ast, "raise", ""); + AST_setThisNode(ast, "raise", ""); stmt = "RuntimeError"; goto block_matched; } @@ -1692,7 +1752,7 @@ AST* AST_parseLine(char* line, Stack* block_stack) { if (strEqu("", stmt)) { stmt = "RuntimeError"; } - obj_setStr(ast, "raise", ""); + AST_setThisNode(ast, "raise", ""); goto block_matched; } #endif @@ -1701,15 +1761,15 @@ AST* AST_parseLine(char* line, Stack* block_stack) { stmt = ""; char* global_list = line_start + 7; global_list = strsGetCleanCmd(&buffs, global_list); - obj_setStr(ast, "global", global_list); + AST_setThisNode(ast, "global", global_list); goto block_matched; } if (strIsStartWith(line_start, (char*)"def ")) { stmt = ""; char* declear = strsCut(&buffs, line_start, ' ', ':'); declear = strsGetCleanCmd(&buffs, declear); - obj_setStr(ast, "block", "def"); - obj_setStr(ast, "declear", declear); + AST_setThisNode(ast, "block", "def"); + AST_setThisNode(ast, "declear", declear); if (NULL != block_stack) { stack_pushStr(block_stack, "def"); } @@ -1719,8 +1779,8 @@ AST* AST_parseLine(char* line, Stack* block_stack) { stmt = ""; char* declear = strsCut(&buffs, line_start, ' ', ':'); declear = strsGetCleanCmd(&buffs, declear); - obj_setStr(ast, "block", "class"); - obj_setStr(ast, "declear", declear); + AST_setThisNode(ast, "block", "class"); + AST_setThisNode(ast, "declear", declear); if (NULL != block_stack) { stack_pushStr(block_stack, "class"); } @@ -1994,10 +2054,10 @@ char* Parser_parsePyLines(Args* outBuffs, /* parse single Line to Asm */ single_ASM = Parser_LineToAsm(&buffs, line, &block_stack); - #if PIKA_DEBUG - pika_assert(NULL != single_ASM); - #endif - if(NULL == single_ASM){ +#if PIKA_DEBUG + pika_assert(NULL != single_ASM); +#endif + if (NULL == single_ASM) { out_ASM = NULL; strsDeinit(&buffs); goto exit; diff --git a/src/PikaParser.h b/src/PikaParser.h index 1436f2656..5926a5667 100644 --- a/src/PikaParser.h +++ b/src/PikaParser.h @@ -46,6 +46,7 @@ enum StmtType { STMT_bytes, STMT_number, STMT_method, + STMT_chain, STMT_operator, STMT_import, STMT_list, diff --git a/src/PikaVM.c b/src/PikaVM.c index fd4c20a96..504c24dd3 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -202,12 +202,23 @@ static Arg* VM_instruction_handler_REF(PikaObj* self, VMState* vs, char* data) { if (strEqu(data, (char*)"RuntimeError")) { return arg_setInt(NULL, "", PIKA_RES_ERR_RUNTIME_ERROR); } - /* find in local list first */ - Arg* arg = arg_copy(obj_getArg(vs->locals, data)); - if (NULL == arg) { - /* find in global list second */ - arg = arg_copy(obj_getArg(vs->globals, data)); + Arg* arg = NULL; + if (data[0] == '.') { + /* find host from stack */ + Arg* host_obj = stack_popArg(&(vs->stack)); + if (argType_isObject(arg_getType(host_obj))) { + arg = arg_copy(obj_getArg(arg_getPtr(host_obj), data + 1)); + } + arg_deinit(host_obj); + } else { + /* find in local list first */ + arg = arg_copy(obj_getArg(vs->locals, data)); + if (NULL == arg) { + /* find in global list second */ + arg = arg_copy(obj_getArg(vs->globals, data)); + } } + if (NULL == arg) { VMState_setErrorCode(vs, PIKA_RES_ERR_ARG_NO_FOUND); __platform_printf("NameError: name '%s' is not defined\r\n", data); @@ -498,6 +509,7 @@ static Arg* VM_instruction_handler_RUN(PikaObj* self, VMState* vs, char* data) { char* methodPath = data; PikaObj* method_host_obj; Arg* method_arg = NULL; + Arg* host_arg = NULL; char* sys_out; int arg_num_used = 0; TryInfo sub_try_info = {.try_state = TRY_STATE_NONE, @@ -518,12 +530,38 @@ static Arg* VM_instruction_handler_RUN(PikaObj* self, VMState* vs, char* data) { goto exit; } - /* get method host obj from self */ - method_host_obj = obj_getHostObj(self, methodPath); - /* get method host obj from local scope */ - if (NULL == method_host_obj) { - method_host_obj = obj_getHostObj(vs->locals, methodPath); + if (methodPath[0] == '.') { + /* get method host obj from stack */ + Arg* stack_tmp[PIKA_ARG_NUM_MAX] = {0}; + int arg_num = VMState_getInputArgNum(vs); + if (arg_num > PIKA_ARG_NUM_MAX) { + __platform_printf( + "[ERROR] Too many args in RUN instruction, please use bigger " + "#define PIKA_ARG_NUM_MAX\n"); + while (1) { + } + } + for (int i = 0; i < arg_num; i++) { + stack_tmp[i] = stack_popArg(&(vs->stack)); + } + host_arg = stack_tmp[arg_num - 1]; + if (argType_isObject(arg_getType(host_arg))) { + method_host_obj = arg_getPtr(host_arg); + arg_num_used++; + } + /* push back other args to stack */ + for (int i = arg_num - 2; i >= 0; i--) { + stack_pushArg(&(vs->stack), stack_tmp[i]); + } + } else { + /* get method host obj from self */ + method_host_obj = obj_getHostObj(self, methodPath); + /* get method host obj from local scope */ + if (NULL == method_host_obj) { + method_host_obj = obj_getHostObj(vs->locals, methodPath); + } } + if (NULL == method_host_obj) { /* error, not found object */ VMState_setErrorCode(vs, PIKA_RES_ERR_ARG_NO_FOUND); @@ -546,8 +584,8 @@ static Arg* VM_instruction_handler_RUN(PikaObj* self, VMState* vs, char* data) { /* create sub local scope */ sub_locals = New_PikaObj(); /* load args from vmState to sub_local->list */ - arg_num_used = VMState_loadArgsFromMethodArg( - vs, method_host_obj, sub_locals->list, method_arg, data, 0); + arg_num_used += VMState_loadArgsFromMethodArg( + vs, method_host_obj, sub_locals->list, method_arg, data, arg_num_used); /* load args faild */ if (vs->error_code != 0) { @@ -611,6 +649,9 @@ exit: if (NULL != sub_locals) { obj_deinit(sub_locals); } + if (NULL != host_arg) { + arg_deinit(host_arg); + } strsDeinit(&buffs); return return_arg; } diff --git a/src/PikaVersion.h b/src/PikaVersion.h index 8cb24b66f..342b49a9d 100644 --- a/src/PikaVersion.h +++ b/src/PikaVersion.h @@ -2,4 +2,4 @@ #define PIKA_VERSION_MINOR 9 #define PIKA_VERSION_MICRO 0 -#define PIKA_EDIT_TIME "2022/07/04 15:52:45" +#define PIKA_EDIT_TIME "2022/07/05 14:19:29" diff --git a/src/pika_config_valid.h b/src/pika_config_valid.h index 738a39270..603433773 100644 --- a/src/pika_config_valid.h +++ b/src/pika_config_valid.h @@ -74,8 +74,8 @@ /* auto config for syntax level */ #if PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MINIMAL - #ifndef PIKA_SYNTEX_ITEM_SLICE_ENABLE - #define PIKA_SYNTEX_ITEM_SLICE_ENABLE 0 + #ifndef PIKA_SYNTEX_SLICE_ENABLE + #define PIKA_SYNTEX_SLICE_ENABLE 0 #endif #ifndef PIKA_BUILTIN_LIST_ENABLE @@ -86,8 +86,8 @@ #define PIKA_BUILTIN_DICT_ENABLE 0 #endif - #ifndef PIKA_SYNTEX_ITEM_FORMAT_ENABLE - #define PIKA_SYNTEX_ITEM_FORMAT_ENABLE 0 + #ifndef PIKA_SYNTEX_FORMAT_ENABLE + #define PIKA_SYNTEX_FORMAT_ENABLE 0 #endif #ifndef PIKA_STD_DEVICE_UNIX_TIME_ENABLE @@ -107,8 +107,8 @@ #endif #elif PIKA_SYNTAX_LEVEL == PIKA_SYNTAX_LEVEL_MAXIMAL - #ifndef PIKA_SYNTEX_ITEM_SLICE_ENABLE - #define PIKA_SYNTEX_ITEM_SLICE_ENABLE 1 + #ifndef PIKA_SYNTEX_SLICE_ENABLE + #define PIKA_SYNTEX_SLICE_ENABLE 1 #endif #ifndef PIKA_BUILTIN_LIST_ENABLE @@ -119,8 +119,8 @@ #define PIKA_BUILTIN_DICT_ENABLE 1 #endif - #ifndef PIKA_SYNTEX_ITEM_FORMAT_ENABLE - #define PIKA_SYNTEX_ITEM_FORMAT_ENABLE 1 + #ifndef PIKA_SYNTEX_FORMAT_ENABLE + #define PIKA_SYNTEX_FORMAT_ENABLE 1 #endif #ifndef PIKA_STD_DEVICE_UNIX_TIME_ENABLE @@ -159,7 +159,7 @@ #endif #ifndef PIKA_PATH_BUFF_SIZE - #define PIKA_PATH_BUFF_SIZE 64 + #define PIKA_PATH_BUFF_SIZE 96 #endif #ifndef PIKA_BYTES_DEFAULT_SIZE @@ -190,12 +190,12 @@ #define PIKA_INIT_STRING_ENABLE 1 #endif - #ifndef PIKA_SYNTEX_ITEM_SLICE_ENABLE - #define PIKA_SYNTEX_ITEM_SLICE_ENABLE 1 + #ifndef PIKA_SYNTEX_SLICE_ENABLE + #define PIKA_SYNTEX_SLICE_ENABLE 1 #endif - #ifndef PIKA_SYNTEX_ITEM_FORMAT_ENABLE - #define PIKA_SYNTEX_ITEM_FORMAT_ENABLE 1 + #ifndef PIKA_SYNTEX_FORMAT_ENABLE + #define PIKA_SYNTEX_FORMAT_ENABLE 1 #endif #ifndef PIKA_SYNTEX_EXCEPTION_ENABLE @@ -238,6 +238,10 @@ #define PIKA_DEBUG_ENABLE 0 #endif + #ifndef PIKA_ARG_NUM_MAX + #define PIKA_ARG_NUM_MAX 16 + #endif + /* configuration validation */ #endif