add comment for INSTRUCT

This commit is contained in:
pikasTech 2021-10-30 12:01:02 +08:00
parent 3f29edf64c
commit 1b4b39cf15
3 changed files with 40 additions and 28 deletions

View File

@ -157,11 +157,11 @@ TEST(VM, JEZ) {
args_setErrorCode(sysRes, 0);
args_setSysOut(sysRes, (char*)"");
Args* localArgs = New_args(NULL);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
__clearInvokeQueues(localArgs);
obj_deinit(self);
@ -184,9 +184,9 @@ TEST(VM, JMP) {
args_setErrorCode(sysRes, 0);
args_setSysOut(sysRes, (char*)"");
Args* localArgs = New_args(NULL);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
__clearInvokeQueues(localArgs);
obj_deinit(self);
@ -210,11 +210,11 @@ TEST(VM, JMP_back1) {
args_setErrorCode(sysRes, 0);
args_setSysOut(sysRes, (char*)"");
Args* localArgs = New_args(NULL);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr = pikaVM_runAsmLine(self, localArgs, pikaAsm,
lineAddr, sysRes);
__clearInvokeQueues(localArgs);
obj_deinit(self);

View File

@ -28,33 +28,43 @@ static char* strs_getLine(Args* buffs, char* code) {
static enum Instruct getInstruct(char* line) {
if (0 == strncmp(line + 2, "OPT", 3)) {
/* operator */
return OPT;
}
if (0 == strncmp(line + 2, "REF", 3)) {
/* reference */
return REF;
}
if (0 == strncmp(line + 2, "NUM", 3)) {
/* number */
return NUM;
}
if (0 == strncmp(line + 2, "RUN", 3)) {
/* run */
return RUN;
}
if (0 == strncmp(line + 2, "STR", 3)) {
/* string */
return STR;
}
if (0 == strncmp(line + 2, "OUT", 3)) {
/* out */
return OUT;
}
if (0 == strncmp(line + 2, "JMP", 3)) {
/* jump */
return JMP;
}
if (0 == strncmp(line + 2, "JEZ", 3)) {
/* jump equal zero */
return JEZ;
}
if (0 == strncmp(line + 2, "DEF", 3)) {
/* define */
return DEF;
}
if (0 == strncmp(line + 2, "RET", 3)) {
/* return */
return RET;
}
return NON;
@ -370,8 +380,8 @@ Arg* pikaVM_runAsmInstruct(PikaObj* self,
char* methodCode = (char*)methodPtr;
if (methodCode[0] == 'B' && methodCode[2] == '\n') {
/* VM method */
Args* resArgs =
pikaVM_runAsmWithArgs(methodHostObj, methodArgs, methodCode);
Args* resArgs = pikaVM_runAsmWithLocalArgs(methodHostObj,
methodArgs, methodCode);
/* get method return */
returnArg = arg_copy(args_getArg(resArgs, (char*)"return"));
args_deinit(resArgs);
@ -498,11 +508,11 @@ int32_t getAddrOffsetFromJmp(char* start, char* code, int32_t jmp) {
return offset;
}
int32_t pikaVM_runAsmLineWithLocalArgs(PikaObj* self,
Args* localArgs,
char* pikaAsm,
int32_t lineAddr,
Args* sysRes) {
int32_t pikaVM_runAsmLine(PikaObj* self,
Args* localArgs,
char* pikaAsm,
int32_t lineAddr,
Args* runRes) {
Args* buffs = New_strBuff();
char* programCounter = pikaAsm + lineAddr;
char* line = strs_getLine(buffs, programCounter);
@ -510,8 +520,8 @@ int32_t pikaVM_runAsmLineWithLocalArgs(PikaObj* self,
int32_t jmp = 0;
/* Found new script Line, clear the queues*/
if ('B' == line[0]) {
args_setErrorCode(sysRes, 0);
args_setSysOut(sysRes, (char*)"");
args_setErrorCode(runRes, 0);
args_setSysOut(runRes, (char*)"");
__clearInvokeQueues(localArgs);
uint8_t blockDeepth = line[1] - '0';
goto nextLine;
@ -536,7 +546,7 @@ int32_t pikaVM_runAsmLineWithLocalArgs(PikaObj* self,
Arg* resArg =
pikaVM_runAsmInstruct(self, localArgs, instruct, data, invokeQuene0,
invokeQuene1, &jmp, programCounter, sysRes);
invokeQuene1, &jmp, programCounter, runRes);
if (NULL != resArg) {
queue_pushArg(invokeQuene0, resArg);
}
@ -569,7 +579,9 @@ char* useFlashAsBuff(char* pikaAsm, Args* buffs) {
return pikaAsm;
}
Args* pikaVM_runAsmWithArgs(PikaObj* self, Args* localArgs, char* pikaAsm) {
Args* pikaVM_runAsmWithLocalArgs(PikaObj* self,
Args* localArgs,
char* pikaAsm) {
int lineAddr = 0;
int size = strGetSize(pikaAsm);
Args* sysRes = New_args(NULL);
@ -580,8 +592,8 @@ Args* pikaVM_runAsmWithArgs(PikaObj* self, Args* localArgs, char* pikaAsm) {
break;
}
char* thisLine = pikaAsm + lineAddr;
lineAddr = pikaVM_runAsmLineWithLocalArgs(self, localArgs, pikaAsm,
lineAddr, sysRes);
lineAddr =
pikaVM_runAsmLine(self, localArgs, pikaAsm, lineAddr, sysRes);
char* sysOut = args_getSysOut(sysRes);
uint8_t errcode = args_getErrorCode(sysRes);
if (!strEqu("", sysOut)) {
@ -601,7 +613,7 @@ Args* pikaVM_runAsmWithArgs(PikaObj* self, Args* localArgs, char* pikaAsm) {
Args* pikaVM_runAsm(PikaObj* self, char* pikaAsm) {
Args* localArgs = New_args(NULL);
Args* runRes = pikaVM_runAsmWithArgs(self, localArgs, pikaAsm);
Args* runRes = pikaVM_runAsmWithLocalArgs(self, localArgs, pikaAsm);
args_deinit(localArgs);
return runRes;
}

View File

@ -9,11 +9,11 @@ char* useFlashAsBuff(char* pikaAsm, Args* buffs);
int32_t gotoNextLine(char* code);
int32_t gotoLastLine(char* start, char* code);
int getThisBlockDeepth(char* start, char* code, int* offset);
Args* pikaVM_runAsmWithArgs(PikaObj* self, Args* localArgs, char* pikaAsm);
int32_t pikaVM_runAsmLineWithLocalArgs(PikaObj* self,
Args* localArgs,
char* pikaAsm,
int32_t lineAddr,
Args* sysRes);
Args* pikaVM_runAsmWithLocalArgs(PikaObj* self, Args* localArgs, char* pikaAsm);
int32_t pikaVM_runAsmLine(PikaObj* self,
Args* localArgs,
char* pikaAsm,
int32_t lineAddr,
Args* runRes);
#endif