mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
__kwargs is ok
This commit is contained in:
parent
b569c4dc2e
commit
3b9f0112ed
@ -59,7 +59,9 @@ void PikaStdData_Dict___del__(PikaObj* self) {
|
||||
PikaDict* dict = obj_getPtr(self, "dict");
|
||||
PikaDict* keys = obj_getPtr(self, "_keys");
|
||||
dict_deinit(dict);
|
||||
dict_deinit(keys);
|
||||
if (NULL != keys) {
|
||||
dict_deinit(keys);
|
||||
}
|
||||
}
|
||||
|
||||
void PikaStdData_dict_keys___init__(PikaObj* self, PikaObj* dict) {
|
||||
|
2
port/linux/.vscode/launch.json
vendored
2
port/linux/.vscode/launch.json
vendored
@ -11,7 +11,7 @@
|
||||
"program": "${workspaceFolder}/build/test/pikascript_test",
|
||||
// "program": "${workspaceFolder}/build/boot/demo06-pikamain/pikascript_demo06-pikamain",
|
||||
"args": [
|
||||
"--gtest_filter=vm.keyword_2"
|
||||
// "--gtest_filter=vm.keyword_2"
|
||||
],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}",
|
||||
|
@ -59,7 +59,9 @@ void PikaStdData_Dict___del__(PikaObj* self) {
|
||||
PikaDict* dict = obj_getPtr(self, "dict");
|
||||
PikaDict* keys = obj_getPtr(self, "_keys");
|
||||
dict_deinit(dict);
|
||||
dict_deinit(keys);
|
||||
if (NULL != keys) {
|
||||
dict_deinit(keys);
|
||||
}
|
||||
}
|
||||
|
||||
void PikaStdData_dict_keys___init__(PikaObj* self, PikaObj* dict) {
|
||||
|
@ -1214,7 +1214,7 @@ TEST(VM, issue_I5OJQB) {
|
||||
TEST(vm, keyword_2) {
|
||||
char* line =
|
||||
"def test(a, b):\n"
|
||||
" print(a, b)\n"
|
||||
" print(__kwargs['a'], __kwargs['b'])\n"
|
||||
"test(a=1, b= 2)";
|
||||
PikaObj* self = newRootObj("root", New_PikaStdLib_SysObj);
|
||||
obj_run(self, line);
|
||||
|
20
src/PikaVM.c
20
src/PikaVM.c
@ -485,14 +485,6 @@ static Arg* VM_instruction_handler_GER(PikaObj* self,
|
||||
return err_arg;
|
||||
}
|
||||
|
||||
static int32_t __foreach_handler_deinitTuple(Arg* argEach, Args* context) {
|
||||
if (arg_getType(argEach) == ARG_TYPE_TUPLE) {
|
||||
PikaTuple* tuple = arg_getPtr(argEach);
|
||||
tuple_deinit(tuple);
|
||||
}
|
||||
return PIKA_RES_OK;
|
||||
}
|
||||
|
||||
Arg* _obj_runMethodArgWithState(PikaObj* self,
|
||||
PikaObj* method_args_obj,
|
||||
Arg* method_arg,
|
||||
@ -542,7 +534,6 @@ Arg* _obj_runMethodArgWithState(PikaObj* self,
|
||||
return_arg = arg_copy_noalloc(
|
||||
args_getArg(method_args_obj->list, (char*)"return"), ret_arg_reg);
|
||||
}
|
||||
args_foreach(method_args_obj->list, __foreach_handler_deinitTuple, NULL);
|
||||
return return_arg;
|
||||
}
|
||||
|
||||
@ -719,6 +710,17 @@ static int VMState_loadArgsFromMethodArg(VMState* vm,
|
||||
tuple_obj);
|
||||
}
|
||||
|
||||
if (dict != NULL) {
|
||||
if (NULL == keyword_dict_name) {
|
||||
keyword_dict_name = "__kwargs";
|
||||
}
|
||||
/* load keyword dict */
|
||||
PikaObj* New_PikaStdData_Dict(Args * args);
|
||||
PikaObj* dict_obj = newNormalObj(New_PikaStdData_Dict);
|
||||
obj_setPtr(dict_obj, "dict", dict);
|
||||
args_setPtrWithType(args, keyword_dict_name, ARG_TYPE_OBJECT, dict_obj);
|
||||
}
|
||||
|
||||
/* load 'self' as the first arg when call object method */
|
||||
if (method_type == ARG_TYPE_METHOD_OBJECT) {
|
||||
Arg* call_arg = arg_setRef(NULL, "self", method_host_obj);
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "dataStrs.h"
|
||||
|
||||
void args_deinit(Args* self) {
|
||||
pika_assert(self != NULL);
|
||||
link_deinit(self);
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@ void __link_deinit_pyload(Link* self) {
|
||||
}
|
||||
|
||||
void link_deinit(Link* self) {
|
||||
pika_assert(self != NULL);
|
||||
__link_deinit_pyload(self);
|
||||
pikaFree(self, sizeof(Link));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user