diff --git a/port/linux/api-make-linux.sh b/port/linux/api-make-linux.sh old mode 100644 new mode 100755 diff --git a/port/linux/api-make-win10.sh b/port/linux/api-make-win10.sh old mode 100644 new mode 100755 diff --git a/port/linux/api-make.sh b/port/linux/api-make.sh old mode 100644 new mode 100755 diff --git a/port/linux/gtest.sh b/port/linux/gtest.sh old mode 100644 new mode 100755 diff --git a/port/linux/init.sh b/port/linux/init.sh old mode 100644 new mode 100755 diff --git a/port/linux/make.sh b/port/linux/make.sh old mode 100644 new mode 100755 diff --git a/port/linux/package/pikascript/rust-msc-latest-linux b/port/linux/package/pikascript/rust-msc-latest-linux old mode 100644 new mode 100755 diff --git a/port/linux/pkg-push.sh b/port/linux/pkg-push.sh old mode 100644 new mode 100755 diff --git a/port/linux/pull-core.sh b/port/linux/pull-core.sh old mode 100644 new mode 100755 diff --git a/port/linux/push-core.sh b/port/linux/push-core.sh old mode 100644 new mode 100755 diff --git a/port/linux/test-banchmark.sh b/port/linux/test-banchmark.sh old mode 100644 new mode 100755 diff --git a/port/linux/test/parse-test.cpp b/port/linux/test/parse-test.cpp index 1fe6870c4..96b09d7c0 100644 --- a/port/linux/test/parse-test.cpp +++ b/port/linux/test/parse-test.cpp @@ -1373,21 +1373,38 @@ TEST(parser, if_elif_else) { EXPECT_EQ(pikaMemNow(), 0); } -// TEST(parser, for_range) { -// Args* bf = New_strBuff(); -// Stack* bs = New_Stack(); -// char* s = strsCopy(bf, (char*)""); -// s = parse("for i in range(0,10):", bf, s, bs); -// s = parse(" print(i)", bf, s, bs); -// s = parse("", bf, s, bs); -// printf("%s", s); -// EXPECT_STREQ(s, -// "" -// ); -// stack_deinit(bs); -// args_deinit(bf); -// EXPECT_EQ(pikaMemNow(), 0); -// } +TEST(parser, for_range) { + Args* bf = New_strBuff(); + Stack* bs = New_Stack(); + char* s = strsCopy(bf, (char*)""); + s = parse("for i in range(0,10):", bf, s, bs); + s = parse(" print(i)", bf, s, bs); + s = parse("", bf, s, bs); + printf("%s", s); + EXPECT_STREQ(s, + "B0\n" + "2 NUM 0\n" + "2 NUM 10\n" + "1 RUN range\n" + "0 RUN iter\n" + "0 OUT __list0\n" + "B0\n" + "1 REF __list0\n" + "0 RUN next\n" + "0 OUT i\n" + "0 EST i\n" + "0 JEZ 2\n" + "B1\n" + "1 REF i\n" + "0 RUN print\n" + "B0\n" + "0 JMP -1\n" + "B0\n" + ); + stack_deinit(bs); + args_deinit(bf); + EXPECT_EQ(pikaMemNow(), 0); +} TEST(parser, for_list) { Args* bf = New_strBuff(); diff --git a/port/linux/update-compiler.sh b/port/linux/update-compiler.sh old mode 100644 new mode 100755 diff --git a/src/PikaParser.c b/src/PikaParser.c index e65bdea4f..597ba0937 100644 --- a/src/PikaParser.c +++ b/src/PikaParser.c @@ -759,43 +759,22 @@ AST* AST_parseLine(char* line, Stack* blockStack) { char* list_in = strsCopy(list_buffs, ""); uint8_t isRange = 0; token = Lexer_popToken(list_buffs, tokens) + 1; - if (strEqu("range", token)) { - isRange = 1; - /* not push 'range' to list_int */ - while (!strEqu(token, ":")) { - if (!strEqu("range", token)) { - list_in = strsAppend(list_buffs, list_in, token); - } - token = Lexer_popToken(list_buffs, tokens) + 1; - } - list_in = strsCut(list_buffs, list_in, '(', ')'); - if (NULL != blockStack) { - stack_pushStr(blockStack, "for_range"); - } - obj_setStr(ast, "block", "for_range"); - obj_setStr(ast, "range_args", list_in); - stmt = ""; - args_deinit(list_buffs); - goto block_matched; + while (!strEqu(token, ":")) { + list_in = strsAppend(list_buffs, list_in, token); + token = Lexer_popToken(list_buffs, tokens) + 1; } - if (!isRange) { - while (!strEqu(token, ":")) { - list_in = strsAppend(list_buffs, list_in, token); - token = Lexer_popToken(list_buffs, tokens) + 1; - } - 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); + 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); - if (NULL != blockStack) { - stack_pushStr(blockStack, "for"); - } - stmt = list_in; - goto block_matched; + obj_setStr(ast, "block", "for"); + obj_setStr(ast, "list_in", list_in); + if (NULL != blockStack) { + stack_pushStr(blockStack, "for"); } + stmt = list_in; + goto block_matched; } if (0 == strncmp(lineStart, (char*)"if ", 3)) { stmt = strsCut(buffs, lineStart, ' ', ':'); @@ -1091,11 +1070,6 @@ char* AST_toPikaAsm(AST* ast, Args* buffs) { is_block_matched = 1; goto exit; } - if (strEqu(obj_getStr(ast, "block"), "for_range")) { - char* arg_in = obj_getStr(ast, "arg_in"); - char* range_args = obj_getStr(ast, "range_args"); - goto exit; - } if (strEqu(obj_getStr(ast, "block"), "while")) { /* parse stmt ast */ pikaAsm = AST_appandPikaAsm(ast, ast, runBuffs, pikaAsm);