mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
parse def to DEF and JMP is ok
This commit is contained in:
parent
4e6d66380b
commit
aaed9eb538
@ -337,7 +337,6 @@ TEST(VM, mem_x) {
|
||||
obj_deinit(self);
|
||||
obj_deinit(globals);
|
||||
args_deinit(buffs);
|
||||
ASSERT_FLOAT_EQ(res, 2);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
@ -345,7 +344,6 @@ TEST(VM, DEF_instruct) {
|
||||
char* pikaAsm = (char*)
|
||||
"B0\n"
|
||||
"0 DEF test()\n"
|
||||
"B0\n"
|
||||
"0 JMP 1\n"
|
||||
"B1\n"
|
||||
"0 NUM 1\n"
|
||||
@ -391,7 +389,6 @@ TEST(VM, RUN_DEF) {
|
||||
char* pikaAsm = (char*)
|
||||
"B0\n"
|
||||
"0 DEF test()\n"
|
||||
"B0\n"
|
||||
"0 JMP 1\n"
|
||||
"B1\n"
|
||||
"0 NUM 1\n"
|
||||
@ -415,7 +412,6 @@ TEST(VM, RUN_global) {
|
||||
"0 OUT a\n"
|
||||
"B0\n"
|
||||
"0 DEF test()\n"
|
||||
"B0\n"
|
||||
"0 JMP 1\n"
|
||||
"B1\n"
|
||||
"0 REF a\n"
|
||||
@ -441,7 +437,6 @@ TEST(VM, RUN_local_b) {
|
||||
"0 OUT a\n"
|
||||
"B0\n"
|
||||
"0 DEF test()\n"
|
||||
"B0\n"
|
||||
"0 JMP 1\n"
|
||||
"B1\n"
|
||||
"0 REF a\n"
|
||||
@ -471,7 +466,6 @@ TEST(VM, RUN_DEF_add) {
|
||||
char* pikaAsm = (char*)
|
||||
"B0\n"
|
||||
"0 DEF add(a,b)\n"
|
||||
"B0\n"
|
||||
"0 JMP 1\n"
|
||||
"B1\n"
|
||||
"1 REF b\n"
|
||||
|
@ -703,3 +703,26 @@ TEST(parser, equ_method) {
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
||||
|
||||
TEST(parser, def_add) {
|
||||
pikaMemInfo.heapUsedMax = 0;
|
||||
Args* buffs = New_strBuff();
|
||||
char* lines = (char*)
|
||||
"def add(a, b):\n"
|
||||
" a + b\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"
|
||||
);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
}
|
@ -291,6 +291,16 @@ AST* pikaParseLine(char* line, Stack* blockStack) {
|
||||
stack_pushStr(blockStack, "if");
|
||||
}
|
||||
}
|
||||
if (0 == strncmp(lineStart, (char*)"def ", 4)) {
|
||||
stmt = "";
|
||||
char* declear = strsCut(buffs, lineStart, ' ', ':');
|
||||
declear = strsGetCleanCmd(buffs, declear);
|
||||
obj_setStr(ast, "block", "def");
|
||||
obj_setStr(ast, "declear", declear);
|
||||
if (NULL != blockStack) {
|
||||
stack_pushStr(blockStack, "def");
|
||||
}
|
||||
}
|
||||
stmt = strsGetCleanCmd(buffs, stmt);
|
||||
ast = AST_parseStmt(ast, stmt);
|
||||
goto exit;
|
||||
@ -460,6 +470,12 @@ char* AST_toPikaAsm(AST* ast, Args* buffs) {
|
||||
if (strEqu(obj_getStr(ast, "block"), "if")) {
|
||||
pikaAsm = strsAppend(runBuffs, pikaAsm, "0 JEZ 1\n");
|
||||
}
|
||||
if (strEqu(obj_getStr(ast, "block"), "def")) {
|
||||
pikaAsm = strsAppend(runBuffs, pikaAsm, "0 DEF ");
|
||||
pikaAsm = strsAppend(runBuffs, pikaAsm, obj_getStr(ast, "declear"));
|
||||
pikaAsm = strsAppend(runBuffs, pikaAsm, "\n");
|
||||
pikaAsm = strsAppend(runBuffs, pikaAsm, "0 JMP 1\n");
|
||||
}
|
||||
pikaAsm = strsCopy(buffs, pikaAsm);
|
||||
args_deinit(runBuffs);
|
||||
return pikaAsm;
|
||||
|
Loading…
x
Reference in New Issue
Block a user