remove '__res' after run __iter__()

This commit is contained in:
lyon 2022-04-26 10:12:34 +08:00
parent 9b1e6a323a
commit 16886ec594
4 changed files with 9 additions and 3 deletions

View File

@ -127,7 +127,9 @@ Arg* PikaStdLib_SysObj_iter(PikaObj* self, Arg* arg) {
0x5f, 0x00, 0x5f, 0x5f, 0x72, 0x65, 0x73, 0x00, /* const pool */
};
pikaVM_runByteCode(arg_obj, (uint8_t*)bytes);
return arg_copy(args_getArg(arg_obj->list, "__res"));
Arg* res = arg_copy(args_getArg(arg_obj->list, "__res"));
obj_removeArg(arg_obj, "__res");
return res;
}
return arg_setNull(NULL);
}

View File

@ -11,7 +11,7 @@
"program": "${workspaceFolder}/build/test/pikascript_test",
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
"args": [
"--gtest_filter=pikaMain.list_iter",
// "--gtest_filter=pikaMain.list_iter",
// "--gtest_filter=gc.*",
// "--gtest_filter=parser.bytes_iteral",
// "--gtest_filter=parser.list_init_fun",

View File

@ -127,7 +127,9 @@ Arg* PikaStdLib_SysObj_iter(PikaObj* self, Arg* arg) {
0x5f, 0x00, 0x5f, 0x5f, 0x72, 0x65, 0x73, 0x00, /* const pool */
};
pikaVM_runByteCode(arg_obj, (uint8_t*)bytes);
return arg_copy(args_getArg(arg_obj->list, "__res"));
Arg* res = arg_copy(args_getArg(arg_obj->list, "__res"));
obj_removeArg(arg_obj, "__res");
return res;
}
return arg_setNull(NULL);
}

View File

@ -314,6 +314,8 @@ TEST(pikaMain, list_iter) {
/* collect */
PikaObj* res = (PikaObj*)obj_getPtr(pikaMain, (char*)"res");
PikaObj* list = (PikaObj*)obj_getPtr(pikaMain, (char*)"list");
int ref_cnt = obj_refcntNow(list);
EXPECT_EQ(ref_cnt, 2);
/* assert */
EXPECT_EQ(res, list);
/* deinit */