From 3c825972f0ef2aea86ec30d1ea104d1da0fabe6f Mon Sep 17 00:00:00 2001 From: pikasTech Date: Sun, 31 Oct 2021 15:52:33 +0800 Subject: [PATCH] find local and global list by order in REF --- src/PikaVM.c | 11 ++++++++--- src/PikaVM.h | 6 +++--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/PikaVM.c b/src/PikaVM.c index bc7990331..16921115c 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -137,7 +137,12 @@ Arg* pikaVM_runInstruct(PikaObj* self, if (strEqu(data, (char*)"False")) { return arg_setInt(NULL, "", 0); } + /* find in local list first */ Arg* arg = arg_copy(obj_getArg(locals, data)); + if (NULL == arg) { + /* find in global list second */ + arg = arg_copy(obj_getArg(globals, data)); + } return arg; } if (instruct == JMP) { @@ -418,14 +423,14 @@ Arg* pikaVM_runInstruct(PikaObj* self, return NULL; } -int32_t __clearInvokeQueues(Parameters* globals) { +int32_t __clearInvokeQueues(Parameters* locals) { for (char deepthChar = '0'; deepthChar < '9'; deepthChar++) { char deepth[2] = {0}; deepth[0] = deepthChar; - Queue* queue = (Queue*)args_getPtr(globals->attributeList, deepth); + Queue* queue = (Queue*)args_getPtr(locals->attributeList, deepth); if (NULL != queue) { args_deinit(queue); - args_removeArg(globals->attributeList, deepth); + args_removeArg(locals->attributeList, deepth); } } return 0; diff --git a/src/PikaVM.h b/src/PikaVM.h index 8ba327df6..ba4c2734d 100644 --- a/src/PikaVM.h +++ b/src/PikaVM.h @@ -5,18 +5,18 @@ Parameters* pikaVM_run(PikaObj* self, char* pyLine); Parameters* pikaVM_runAsm(PikaObj* self, char* pikaAsm); Parameters* pikaVM_runAsmWithPars(PikaObj* self, - Parameters* globals, Parameters* locals, + Parameters* globals, char* pikaAsm); -int32_t __clearInvokeQueues(Parameters* globals); +int32_t __clearInvokeQueues(Parameters* locals); 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); int32_t pikaVM_runAsmLine(PikaObj* self, - Parameters* globals, Parameters* locals, + Parameters* globals, char* pikaAsm, int32_t lineAddr);