return a + b is ok

This commit is contained in:
lyon1998 2021-10-31 20:48:34 +08:00
parent ffa9f04708
commit 0e469dcc99
2 changed files with 39 additions and 0 deletions

View File

@ -728,4 +728,31 @@ TEST(parser, def_add) {
);
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(parser, def_add_return) {
pikaMemInfo.heapUsedMax = 0;
Args* buffs = New_strBuff();
char* lines = (char*)
"def add(a, b):\n"
" return a + b\n"
"\n"
;
printf("%s", lines);
char* pikaAsm = pikaParseMultiLineToAsm(buffs, (char*)lines);
printf("%s", pikaAsm);
EXPECT_STREQ(pikaAsm,(char *)
"B0\n"
"0 DEF add(a,b)\n"
"0 JMP 1\n"
"B1\n"
"1 REF a\n"
"1 REF b\n"
"0 OPT +\n"
"0 RET\n"
"0 RET\n"
"B0\n"
);
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}

View File

@ -291,6 +291,15 @@ AST* pikaParseLine(char* line, Stack* blockStack) {
stack_pushStr(blockStack, "if");
}
}
if (strEqu(lineStart, (char*)"return")) {
obj_setStr(ast, "return", "");
}
if (0 == strncmp(lineStart, (char*)"return ", 7)) {
char* lineBuff = strsCopy(buffs, lineStart);
strsPopToken(buffs, lineBuff, ' ');
stmt = lineBuff;
obj_setStr(ast, "return", "");
}
if (0 == strncmp(lineStart, (char*)"def ", 4)) {
stmt = "";
char* declear = strsCut(buffs, lineStart, ' ', ':');
@ -480,6 +489,9 @@ char* AST_toPikaAsm(AST* ast, Args* buffs) {
pikaAsm = strsAppend(runBuffs, pikaAsm, "\n");
pikaAsm = strsAppend(runBuffs, pikaAsm, "0 JMP 1\n");
}
if (obj_isArgExist(ast, "return")) {
pikaAsm = strsAppend(runBuffs, pikaAsm, "0 RET\n");
}
pikaAsm = strsCopy(buffs, pikaAsm);
args_deinit(runBuffs);
return pikaAsm;