OUT is ok

This commit is contained in:
lyon1998 2021-10-14 20:46:32 +08:00
parent 61aed3c36b
commit f4f4edc131
2 changed files with 26 additions and 13 deletions

View File

@ -22,14 +22,14 @@ TEST(VM, num1) {
}
// TEST(VM, a_1) {
// char* line = (char*)"a = 1";
// Args* buffs = New_strBuff();
// char* pikaAsm = pikaParseToAsm(buffs, line);
// printf("%s", pikaAsm);
// PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
// pikaVM_runAsm(self, pikaAsm);
// obj_deinit(self);
// args_deinit(buffs);
// EXPECT_EQ(pikaMemNow(), 0);
// }
TEST(VM, a_1) {
char* line = (char*)"a = 1";
Args* buffs = New_strBuff();
char* pikaAsm = pikaParseToAsm(buffs, line);
printf("%s", pikaAsm);
PikaObj* self = newRootObj((char*)"root", New_PikaStdLib_SysObj);
pikaVM_runAsm(self, pikaAsm);
obj_deinit(self);
args_deinit(buffs);
EXPECT_EQ(pikaMemNow(), 0);
}

View File

@ -45,7 +45,11 @@ static enum Instruct getInstruct(char* line) {
return NON;
}
Arg* pikaVM_getArg(PikaObj* self, enum Instruct instruct, char* data) {
Arg* pikaVM_runInstruct(PikaObj* self,
enum Instruct instruct,
char* data,
Queue* q0,
Queue* q1) {
Arg* res = New_arg(NULL);
if (instruct == NUM) {
if (strIsContain(data, '.')) {
@ -53,6 +57,14 @@ Arg* pikaVM_getArg(PikaObj* self, enum Instruct instruct, char* data) {
}
return arg_setInt(res, "", atoi(data));
}
if (instruct == OUT) {
Arg* outArg = arg_copy(queue_popArg(q0));
int outInt = arg_getInt(outArg);
outArg = arg_setName(outArg, data);
obj_setArg(self, data, outArg);
arg_deinit(outArg);
return NULL;
}
return NULL;
}
@ -68,7 +80,6 @@ int32_t pikaVM_run(PikaObj* self, char* pikaAsm, int32_t lineAddr) {
enum Instruct instruct = getInstruct(line);
char* data = line + 6;
Arg* resArg = pikaVM_getArg(self, instruct, data);
Queue* q0 = obj_getPtr(self, d0);
Queue* q1 = obj_getPtr(self, d1);
if (NULL == q0) {
@ -79,6 +90,8 @@ int32_t pikaVM_run(PikaObj* self, char* pikaAsm, int32_t lineAddr) {
q1 = New_queue();
obj_setPtr(self, d1, q1);
}
Arg* resArg = pikaVM_runInstruct(self, instruct, data, q0, q1);
if (NULL != resArg) {
queue_pushArg(q0, resArg);
}