diff --git a/port/linux/test/VM-test.cpp b/port/linux/test/VM-test.cpp index 7dcf462b0..a5cbc41de 100644 --- a/port/linux/test/VM-test.cpp +++ b/port/linux/test/VM-test.cpp @@ -16,11 +16,9 @@ TEST(VM, a_1) { PikaObj* root = newRootObj((char*)"root", New_PikaStdLib_SysObj); int lineAddr = 0; - while (1) { + int size = strGetSize(pikaAsm); + while (lineAddr < size) { lineAddr = pikaVM_run(root, pikaAsm, lineAddr); - if (lineAddr < 0) { - break; - } } obj_deinit(root); diff --git a/src/PikaVM.c b/src/PikaVM.c index d11ef8389..b5594a349 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -17,11 +17,16 @@ static int32_t getLineSize(char* str) { int32_t pikaVM_run(PikaObj* self, char* pikaAsm, int32_t lineAddr) { Args* buffs = New_strBuff(); - int32_t size = getLineSize(pikaAsm + lineAddr); - char* line = pikaAsm + lineAddr; + int32_t nextAddr = lineAddr; + char* code = pikaAsm + lineAddr; + int32_t lineSize = getLineSize(code); + nextAddr = lineAddr + lineSize + 1; + char* line = args_getBuff(buffs, lineSize + 1); + memcpy(line, code, lineSize); + line[lineSize + 1] = 0; goto exit; exit: args_deinit(buffs); - return -1; + return nextAddr; } \ No newline at end of file