From ce3df083b68fbfc85e64e6793fe07a6736d6f29f Mon Sep 17 00:00:00 2001 From: lyon1998 <645275593@qq.com> Date: Wed, 3 Nov 2021 21:28:37 +0800 Subject: [PATCH] debug connot find object when run method of locals.obj --- port/linux/test/pikaMain-test.cpp | 43 ++++++++++++++++++++++--------- src/PikaVM.c | 3 +++ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/port/linux/test/pikaMain-test.cpp b/port/linux/test/pikaMain-test.cpp index fd42f7e0c..0fe329a8a 100644 --- a/port/linux/test/pikaMain-test.cpp +++ b/port/linux/test/pikaMain-test.cpp @@ -1,12 +1,31 @@ -// #include "gtest/gtest.h" -// extern "C" { -// #include "dataMemory.h" -// #include "pikaScript.h" -// } -// extern PikaMemInfo pikaMemInfo; -// TEST(pikaMain, init) { -// pikaMemInfo.heapUsedMax = 0; -// PikaObj* pikaMain = pikaScriptInit(); -// obj_deinit(pikaMain); -// EXPECT_EQ(pikaMemNow(), 0); -// } \ No newline at end of file +#include "gtest/gtest.h" +extern "C" { +#include "PikaMain.h" +#include "PikaStdLib_MemChecker.h" +#include "dataArgs.h" +#include "dataMemory.h" +#include "pikaScript.h" +} +extern PikaMemInfo pikaMemInfo; +TEST(pikaMain, init) { + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = pikaScriptInit(); + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} + +TEST(pikaMain, new_mem) { + pikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj((char*)"pikaMain", New_PikaMain); + Parameters* globals = + obj_runDirect(pikaMain, (char*) + "mem = PikaStdLib.MemChecker()\n" + "mem.max()\n" + ); + PikaObj* mem = (PikaObj*)args_getPtr(globals->attributeList, (char*)"mem"); + PikaObj* memClassPtr = (PikaObj*)obj_getPtr(mem, (char*)"_clsptr"); + EXPECT_EQ((void*)memClassPtr, (void*)New_PikaStdLib_MemChecker); + obj_deinit(pikaMain); + obj_deinit(globals); + EXPECT_EQ(pikaMemNow(), 0); +} \ No newline at end of file diff --git a/src/PikaVM.c b/src/PikaVM.c index 16921115c..088e8183e 100644 --- a/src/PikaVM.c +++ b/src/PikaVM.c @@ -335,6 +335,9 @@ Arg* pikaVM_runInstruct(PikaObj* self, } /* get method host obj */ PikaObj* methodHostObj = obj_getObj(self, methodPath, 1); + if (NULL == methodHostObj) { + methodHostObj = obj_getObj(locals, methodPath, 1); + } if (NULL == methodHostObj) { /* error, not found object */ args_setErrorCode(locals->attributeList, 1);