mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
return a + b is ok
This commit is contained in:
parent
ffa9f04708
commit
0e469dcc99
@ -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);
|
||||
}
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user