using local args instead of obj

This commit is contained in:
pikasTech 2021-10-30 20:59:04 +08:00
parent 3914187ba7
commit 6c1664e37a
2 changed files with 58 additions and 46 deletions

View File

@ -17,9 +17,10 @@ TEST(VM, num1) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
obj_deinit(self);
args_deinit(buffs);
args_deinit(localArgs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -29,11 +30,11 @@ TEST(VM, a_1) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
ASSERT_EQ(obj_getInt(self, (char*)"a"), 1);
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
ASSERT_EQ(args_getInt(localArgs, (char*)"a"), 1);
obj_deinit(self);
args_deinit(localArgs);
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -44,11 +45,11 @@ TEST(VM, a_1d1) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
ASSERT_FLOAT_EQ(obj_getFloat(self, (char*)"a"), 1.1);
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
ASSERT_FLOAT_EQ(args_getFloat(localArgs, (char*)"a"), 1.1);
obj_deinit(self);
args_deinit(localArgs);
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -59,11 +60,12 @@ TEST(VM, str_xy) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
ASSERT_STREQ(obj_getStr(self, (char*)"a"), (char*)"xy");
ASSERT_STREQ(args_getStr(localArgs, (char*)"a"), (char*)"xy");
obj_deinit(self);
args_deinit(localArgs);
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -74,12 +76,13 @@ TEST(VM, str_xy_space) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
ASSERT_STREQ(obj_getStr(self, (char*)"a"), (char*)"xy ");
ASSERT_STREQ(args_getStr(localArgs, (char*)"a"), (char*)"xy ");
obj_deinit(self);
args_deinit(buffs);
args_deinit(localArgs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -87,14 +90,15 @@ TEST(VM, ref_a_b) {
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
Args* buffs = New_strBuff();
args_deinit(pikaVM_runAsm(
self, pikaParseLineToAsm(buffs, (char*)"a = 'xy '", NULL)));
args_deinit(
pikaVM_runAsm(self, pikaParseLineToAsm(buffs, (char*)"b = a", NULL)));
Args* localArgs = pikaVM_runAsm(
self, pikaParseLineToAsm(buffs, (char*)"a = 'xy '", NULL));
localArgs = pikaVM_runAsmWithLocalArgs(
self, localArgs, pikaParseLineToAsm(buffs, (char*)"b = a", NULL));
args_deinit(buffs);
ASSERT_STREQ(obj_getStr(self, (char*)"b"), (char*)"xy ");
ASSERT_STREQ(args_getStr(localArgs, (char*)"b"), (char*)"xy ");
obj_deinit(self);
args_deinit(localArgs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -102,13 +106,14 @@ TEST(VM, Run_add) {
PikaObj* self = newRootObj((char*)"root", New_PikaMath_Operator);
Args* buffs = New_strBuff();
args_deinit(pikaVM_runAsm(
self, pikaParseLineToAsm(buffs, (char*)"a = plusInt(1,2)", NULL)));
Args* localArgs = pikaVM_runAsm(
self, pikaParseLineToAsm(buffs, (char*)"a = plusInt(1,2)", NULL));
args_deinit(buffs);
int a = obj_getInt(self, (char*)"a");
int a = args_getInt(localArgs, (char*)"a");
ASSERT_EQ(a, 3);
obj_deinit(self);
args_deinit(localArgs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -116,15 +121,17 @@ TEST(VM, Run_add_multy) {
PikaObj* self = newRootObj((char*)"root", New_PikaMath_Operator);
Args* buffs = New_strBuff();
args_deinit(
pikaVM_runAsm(self, pikaParseLineToAsm(buffs, (char*)"b = 2", NULL)));
args_deinit(pikaVM_runAsm(
self, pikaParseLineToAsm(buffs, (char*)"a = plusInt(1,b)", NULL)));
Args* localArgs =
pikaVM_runAsm(self, pikaParseLineToAsm(buffs, (char*)"b = 2", NULL));
localArgs = pikaVM_runAsmWithLocalArgs(
self, localArgs,
pikaParseLineToAsm(buffs, (char*)"a = plusInt(1,b)", NULL));
args_deinit(buffs);
int a = obj_getInt(self, (char*)"a");
int a = args_getInt(localArgs, (char*)"a");
ASSERT_EQ(a, 3);
obj_deinit(self);
args_deinit(localArgs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -132,14 +139,15 @@ TEST(VM, Run_add_1_2_3) {
PikaObj* self = newRootObj((char*)"root", New_PikaMath_Operator);
Args* buffs = New_strBuff();
args_deinit(pikaVM_runAsm(
Args* localArgs = pikaVM_runAsm(
self, pikaParseLineToAsm(buffs, (char*)"a = plusInt(1, plusInt(2,3) )",
NULL)));
NULL));
args_deinit(buffs);
int a = obj_getInt(self, (char*)"a");
int a = args_getInt(localArgs, (char*)"a");
ASSERT_EQ(a, 6);
obj_deinit(self);
args_deinit(localArgs);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -232,10 +240,10 @@ TEST(VM, WHILE) {
printf("%s", pikaAsm);
pikaMemInfo.heapUsedMax = 0;
PikaObj* self = New_TinyObj(NULL);
Args* runRes = pikaVM_runAsm(self, pikaAsm);
EXPECT_EQ(obj_getInt(self, (char*)"a"), 0);
EXPECT_EQ(obj_getInt(self, (char*)"b"), 1);
args_deinit(runRes);
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
EXPECT_EQ(args_getInt(localArgs, (char*)"a"), 0);
EXPECT_EQ(args_getInt(localArgs, (char*)"b"), 1);
args_deinit(localArgs);
args_deinit(buffs);
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);
@ -247,10 +255,11 @@ TEST(VM, a_1_1) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
int res = obj_getInt(self, (char*)"a");
int res = args_getInt(localArgs, (char*)"a");
obj_deinit(self);
args_deinit(localArgs);
args_deinit(buffs);
ASSERT_EQ(res, 2);
EXPECT_EQ(pikaMemNow(), 0);
@ -262,10 +271,11 @@ TEST(VM, a_1_1d1) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
float res = obj_getFloat(self, (char*)"a");
float res = args_getFloat(localArgs, (char*)"a");
obj_deinit(self);
args_deinit(localArgs);
args_deinit(buffs);
ASSERT_FLOAT_EQ(res, 2.1);
EXPECT_EQ(pikaMemNow(), 0);
@ -277,11 +287,12 @@ TEST(VM, a_jjcc) {
char* pikaAsm = pikaParseLineToAsm(buffs, line, NULL);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
float res = obj_getFloat(self, (char*)"a");
float res = args_getFloat(localArgs, (char*)"a");
obj_deinit(self);
args_deinit(buffs);
args_deinit(localArgs);
ASSERT_FLOAT_EQ(res, 5.8);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -297,11 +308,12 @@ TEST(VM, while_a_1to10) {
char* pikaAsm = pikaParseMultiLineToAsm(buffs, line);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
int res = obj_getInt(self, (char*)"a");
int res = args_getInt(localArgs, (char*)"a");
obj_deinit(self);
args_deinit(buffs);
args_deinit(localArgs);
ASSERT_FLOAT_EQ(res, 10);
EXPECT_EQ(pikaMemNow(), 0);
}
@ -318,10 +330,11 @@ TEST(VM, while_a_d_x) {
char* pikaAsm = pikaParseMultiLineToAsm(buffs, line);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"", New_PikaMain);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
int res = obj_getInt(self, (char*)"mem.x");
int res = args_getInt(localArgs, (char*)"mem.x");
obj_deinit(self);
args_deinit(localArgs);
args_deinit(buffs);
ASSERT_FLOAT_EQ(res, 2);
EXPECT_EQ(pikaMemNow(), 0);
@ -345,7 +358,7 @@ TEST(VM, DEF_instruct) {
PikaObj* self = New_TinyObj(NULL);
int lineAddr = 0;
int size = strGetSize(pikaAsm);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
char* methodPtr = (char*)obj_getPtr(self, (char*)"test");
EXPECT_STREQ(methodCode, methodPtr);
obj_deinit(self);
@ -385,7 +398,7 @@ TEST(VM, RUN_DEF) {
"0 RUN test\n"
"0 OUT a\n";
PikaObj* self = New_TinyObj(NULL);
args_deinit(pikaVM_runAsm(self, pikaAsm));
Args* localArgs = pikaVM_runAsm(self, pikaAsm);
int num = obj_getInt(self, (char*)"a");
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);

View File

@ -125,8 +125,7 @@ Arg* pikaVM_runAsmInstruct(PikaObj* self,
char* argName = strsGetLastToken(buffs, data, '.');
outArg = arg_setName(outArg, argName);
args_deinit(buffs);
obj_setArg(self, data, outArg);
arg_deinit(outArg);
args_setArg(localArgs, outArg);
return NULL;
}
if (instruct == REF) {
@ -136,7 +135,7 @@ Arg* pikaVM_runAsmInstruct(PikaObj* self,
if (strEqu(data, (char*)"False")) {
return arg_setInt(NULL, "", 0);
}
Arg* arg = arg_copy(obj_getArg(self, data));
Arg* arg = arg_copy(args_getArg(localArgs, data));
return arg;
}
if (instruct == JMP) {