debuging RUN

This commit is contained in:
lyon1998 2021-10-14 23:22:48 +08:00
parent c6dec36080
commit 5bcc05a311
3 changed files with 63 additions and 0 deletions

View File

@ -7,6 +7,7 @@ extern "C" {
#include "dataMemory.h"
#include "dataQueue.h"
#include "dataStrs.h"
#include "PikaMath_Operator.h"
}
TEST(VM, num1) {
@ -92,4 +93,17 @@ TEST(VM, ref_a_b) {
ASSERT_STREQ(obj_getStr(self, (char*)"b"), (char*)"xy ");
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);
}
TEST(VM, Run_add) {
PikaObj* self = newRootObj((char*)"root", New_PikaMath_Operator);
Args* buffs = New_strBuff();
pikaVM_runAsm(self, pikaParseToAsm(buffs, (char*)"plusInt(1,2)"));
args_deinit(buffs);
// ASSERT_STREQ(obj_getStr(self, (char*)"a"), (char*)"3");
obj_deinit(self);
EXPECT_EQ(pikaMemNow(), 0);
}

View File

@ -45,6 +45,22 @@ static enum Instruct getInstruct(char* line) {
return NON;
}
static void* getMethodPtr(PikaObj* methodHost, char* methodName) {
Args* buffs = New_strBuff();
char* methodPtrPath = strsAppend(buffs, "[mp]", methodName);
void* res = obj_getPtr(methodHost, methodPtrPath);
args_deinit(buffs);
return res;
}
static char* getMethodDeclearation(PikaObj* obj, char* methodName) {
Args* buffs = New_strBuff();
char* methodDeclearationPath = strsAppend(buffs, "[md]", methodName);
char* res = obj_getStr(obj, methodDeclearationPath);
args_deinit(buffs);
return res;
}
Arg* pikaVM_runAsmInstruct(PikaObj* self,
enum Instruct instruct,
char* data,
@ -72,6 +88,36 @@ Arg* pikaVM_runAsmInstruct(PikaObj* self,
if (instruct == REF) {
return arg_copy(obj_getArg(self, data));
}
if (instruct == RUN) {
Args* buffs = New_strBuff();
char* methodPath = data;
PikaObj* methodHostObj = obj_getObj(self, methodPath, 1);
char* methodName = strsGetLastToken(buffs, methodPath, '.');
void* classPtr = obj_getPtr(methodHostObj, "_clsptr");
char* methodHostClassName =
strsAppend(buffs, "classObj-", obj_getName(methodHostObj));
PikaObj* methodHostClass = obj_getClassObjByNewFun(
methodHostObj, methodHostClassName, classPtr);
/* get method Ptr */
void (*methodPtr)(PikaObj * self, Args * args) =
getMethodPtr(methodHostClass, methodName);
char* methodDecInClass =
getMethodDeclearation(methodHostClass, methodName);
char* methodDec = strsCopy(buffs, methodDecInClass);
/* free method host class to save memory */
obj_deinit(methodHostClass);
methodHostClass = NULL;
/* get type list */
char* typeList = strsCut(buffs, methodDec, '(', ')');
while (1) {
Arg* methodArg = arg_copy(queue_popArg(q1));
arg_deinit(methodArg);
if (NULL == methodArg) {
break;
}
}
args_deinit(buffs);
}
return NULL;
}

View File

@ -318,6 +318,9 @@ Arg* New_arg(void* voidPointer) {
}
Arg* arg_copy(Arg* argToBeCopy) {
if (NULL == argToBeCopy) {
return NULL;
}
Arg* argCopied = New_arg(NULL);
argCopied = arg_setContent(argCopied, arg_getContent(argToBeCopy),
arg_getContentSize(argToBeCopy));