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 */ 0x5f, 0x00, 0x5f, 0x5f, 0x72, 0x65, 0x73, 0x00, /* const pool */
}; };
pikaVM_runByteCode(arg_obj, (uint8_t*)bytes); 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); return arg_setNull(NULL);
} }

View File

@ -11,7 +11,7 @@
"program": "${workspaceFolder}/build/test/pikascript_test", "program": "${workspaceFolder}/build/test/pikascript_test",
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain", // "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
"args": [ "args": [
"--gtest_filter=pikaMain.list_iter", // "--gtest_filter=pikaMain.list_iter",
// "--gtest_filter=gc.*", // "--gtest_filter=gc.*",
// "--gtest_filter=parser.bytes_iteral", // "--gtest_filter=parser.bytes_iteral",
// "--gtest_filter=parser.list_init_fun", // "--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 */ 0x5f, 0x00, 0x5f, 0x5f, 0x72, 0x65, 0x73, 0x00, /* const pool */
}; };
pikaVM_runByteCode(arg_obj, (uint8_t*)bytes); 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); return arg_setNull(NULL);
} }

View File

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