diff --git a/port/linux/test/parse-test.cpp b/port/linux/test/parse-test.cpp index d8a206eb1..df9172e6f 100644 --- a/port/linux/test/parse-test.cpp +++ b/port/linux/test/parse-test.cpp @@ -12,6 +12,7 @@ TEST(parser, NEW) { char* pikaAsm = AST_toPikaAsm(ast, buffs); printf("%s", pikaAsm); args_deinit(buffs); + AST_deinit(ast); EXPECT_EQ(pikaMemNow(), 0); } @@ -22,6 +23,7 @@ TEST(parser, add_a_b) { printf("%s", pikaAsm); EXPECT_STREQ(pikaAsm, "1 REF a\n1 REF b\n0 RUN add\n"); args_deinit(buffs); + AST_deinit(ast); EXPECT_EQ(pikaMemNow(), 0); } @@ -30,8 +32,10 @@ TEST(parser, add_a_b_c) { Args* buffs = New_strBuff(); char* pikaAsm = AST_toPikaAsm(ast, buffs); printf("%s", pikaAsm); - EXPECT_STREQ(pikaAsm, "2 REF a\n2 REF b\n1 RUN add\n1 REF c\n0 RUN add\n0 OUT d\n"); + EXPECT_STREQ(pikaAsm, + "2 REF a\n2 REF b\n1 RUN add\n1 REF c\n0 RUN add\n0 OUT d\n"); args_deinit(buffs); + AST_deinit(ast); EXPECT_EQ(pikaMemNow(), 0); } @@ -41,40 +45,39 @@ TEST(parser, method1) { char* pikaAsm = AST_toPikaAsm(ast, buffs); printf("%s", pikaAsm); EXPECT_STREQ(pikaAsm, - "2 REF a\n2 REF se.b\n1 RUN b.add\n1 REF pmw.c\n0 RUN a.add\n0 OUT d.p\n"); + "2 REF a\n2 REF se.b\n1 RUN b.add\n1 REF pmw.c\n0 RUN " + "a.add\n0 OUT d.p\n"); args_deinit(buffs); + AST_deinit(ast); EXPECT_EQ(pikaMemNow(), 0); } TEST(parser, method2) { - AST* ast = - pikaParse((char*)"d.p = a.add(b.add(a,se.b,diek(pp)) , pmw.c())"); + char* line = (char*)"d.p = a.add(b.add(a,se.b,diek(pp)) , pmw.c())"; Args* buffs = New_strBuff(); - char* pikaAsm = AST_toPikaAsm(ast, buffs); + char* pikaAsm = pikaParseToAsm(buffs, line); printf("%s", pikaAsm); EXPECT_STREQ(pikaAsm, - "2 REF a\n2 REF se.b\n3 REF pp\n2 RUN diek\n1 RUN b.add\n1 RUN pmw.c\n0 RUN a.add\n0 OUT d.p\n"); + "2 REF a\n2 REF se.b\n3 REF pp\n2 RUN diek\n1 RUN b.add\n1 " + "RUN pmw.c\n0 RUN a.add\n0 OUT d.p\n"); args_deinit(buffs); EXPECT_EQ(pikaMemNow(), 0); } TEST(parser, str1) { - AST* ast = - pikaParse((char*)"literal('2.322')"); + char* line = (char*)"literal('2.322')"; Args* buffs = New_strBuff(); - char* pikaAsm = AST_toPikaAsm(ast, buffs); + char* pikaAsm = pikaParseToAsm(buffs, line); printf("%s", pikaAsm); - EXPECT_STREQ(pikaAsm, - "1 STR 2.322\n0 RUN literal\n"); + EXPECT_STREQ(pikaAsm, "1 STR 2.322\n0 RUN literal\n"); args_deinit(buffs); EXPECT_EQ(pikaMemNow(), 0); } TEST(parser, str2) { - AST* ast = - pikaParse((char*)"b=add(a,literal('1'))"); + char* line = (char*)"b=add(a,literal('1'))"; Args* buffs = New_strBuff(); - char* pikaAsm = AST_toPikaAsm(ast, buffs); + char* pikaAsm = pikaParseToAsm(buffs, line); printf("%s", pikaAsm); EXPECT_STREQ(pikaAsm, "1 REF a\n2 STR 1\n1 RUN literal\n0 RUN add\n0 OUT b\n"); diff --git a/src/PikaParser.c b/src/PikaParser.c index 59c6fee72..77a1140f1 100644 --- a/src/PikaParser.c +++ b/src/PikaParser.c @@ -125,6 +125,13 @@ exit: return ast; } +char* pikaParseToAsm(Args* buffs, char* line) { + AST* ast = pikaParse(line); + char* pikaAsm = AST_toPikaAsm(ast, buffs); + AST_deinit(ast); + return pikaAsm; +} + char* AST_appandPikaAsm(AST* ast, AST* subAst, Args* buffs, char* pikaAsm) { uint32_t deepth = obj_getInt(ast, "deepth"); while (1) { @@ -169,7 +176,6 @@ char* AST_toPikaAsm(AST* ast, Args* buffs) { obj_setInt(ast, "deepth", 0); pikaAsm = AST_appandPikaAsm(ast, ast, runBuffs, pikaAsm); pikaAsm = strsCopy(buffs, pikaAsm); - AST_deinit(ast); args_deinit(runBuffs); return pikaAsm; } diff --git a/src/PikaParser.h b/src/PikaParser.h index 7f49d0345..7ad05cbf7 100644 --- a/src/PikaParser.h +++ b/src/PikaParser.h @@ -4,6 +4,7 @@ typedef QueueObj AST; AST* pikaParse(char* line); +char* pikaParseToAsm(Args* buffs, char* line); int32_t AST_deinit(AST* ast); char* AST_toPikaAsm(AST* ast, Args* buffs);