remove __parseExtern, parse for as while

This commit is contained in:
lyon 2021-12-22 21:02:59 +08:00
parent 1d4ac69222
commit 961f0ce300
2 changed files with 21 additions and 45 deletions

View File

@ -1,24 +0,0 @@
#include "PikaParser.h"
#include "dataStrs.h"
char* __pikaExtern_beforeParseLine(Args* outBuffs, char* line) {
Args* buffs = New_strBuff();
char* outLine = line;
if (0 == strncmp(line, (char*)"for ", 4)) {
char* tokens = Lexer_getTokens(buffs, line + 4);
Lexer_popToken(buffs, tokens);
char* arg_name = Lexer_popToken(buffs, tokens) + 1;
Lexer_popToken(buffs, tokens);
char* list_name = Lexer_popToken(buffs, tokens) + 1;
outLine = strsCopy(buffs, "while ");
outLine = strsAppend(buffs, outLine, list_name);
outLine = strsAppend(buffs, outLine, ".next() != -9999:");
goto output;
}
output:
if (outLine != line) {
line = strsCopy(outBuffs, outLine);
}
args_deinit(buffs);
return line;
}

View File

@ -1373,24 +1373,24 @@ TEST(parser, if_elif_else) {
EXPECT_EQ(pikaMemNow(), 0);
}
// TEST(parser, for_list) {
// Args* bf = New_strBuff();
// Stack* bs = New_Stack();
// char* s = strsCopy(bf, (char*)"");
// s = parse("for arg in list:", bf, s, bs);
// s = parse(" print(arg)", bf, s, bs);
// s = parse("", bf, s, bs);
// printf("%s", s);
// EXPECT_STREQ(s,
// "B0\n"
// "0 REF true\n"
// "0 JEZ 2\n"
// "B1\n"
// "0 RUN rgb.flow\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();
Stack* bs = New_Stack();
char* s = strsCopy(bf, (char*)"");
s = parse("for arg in list:", bf, s, bs);
s = parse(" print(arg)", bf, s, bs);
s = parse("", bf, s, bs);
printf("%s", s);
EXPECT_STREQ(s,
"B0\n"
"0 REF true\n"
"0 JEZ 2\n"
"B1\n"
"0 RUN rgb.flow\n"
"B0\n"
"0 JMP -1\n"
"B0\n");
stack_deinit(bs);
args_deinit(bf);
EXPECT_EQ(pikaMemNow(), 0);
}