From 3161846811f6cc235c3ef38c6132217ccc4c085b Mon Sep 17 00:00:00 2001 From: 97littleleaf11 <97littleleaf11@gmail.com> Date: Fri, 16 Apr 2021 23:14:23 +0800 Subject: [PATCH 1/2] [mypyc] Add incref in CPyDict_SetDefault --- mypyc/lib-rt/dict_ops.c | 4 +++- mypyc/primitives/dict_ops.py | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mypyc/lib-rt/dict_ops.c b/mypyc/lib-rt/dict_ops.c index c4dbe8d31c32..1416c9ba953a 100644 --- a/mypyc/lib-rt/dict_ops.c +++ b/mypyc/lib-rt/dict_ops.c @@ -69,7 +69,9 @@ PyObject *CPyDict_GetWithNone(PyObject *dict, PyObject *key) { PyObject *CPyDict_SetDefault(PyObject *dict, PyObject *key, PyObject *value) { if (PyDict_CheckExact(dict)){ - return PyDict_SetDefault(dict, key, value); + PyObject* ret = PyDict_SetDefault(dict, key, value); + Py_INCREF(ret); + return ret; } return PyObject_CallMethod(dict, "setdefault", "(OO)", key, value); } diff --git a/mypyc/primitives/dict_ops.py b/mypyc/primitives/dict_ops.py index 267f9d79179d..e176ffcac316 100644 --- a/mypyc/primitives/dict_ops.py +++ b/mypyc/primitives/dict_ops.py @@ -124,7 +124,6 @@ arg_types=[dict_rprimitive, object_rprimitive, object_rprimitive], return_type=object_rprimitive, c_function_name='CPyDict_SetDefault', - is_borrowed=True, error_kind=ERR_MAGIC) # dict.setdefault(key) From c8362b371091dabf1e111e72e142b7c2e3526a2a Mon Sep 17 00:00:00 2001 From: 97littleleaf11 <97littleleaf11@gmail.com> Date: Fri, 16 Apr 2021 23:22:00 +0800 Subject: [PATCH 2/2] Change INCREF to XINCREF --- mypyc/lib-rt/dict_ops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypyc/lib-rt/dict_ops.c b/mypyc/lib-rt/dict_ops.c index 1416c9ba953a..2de5f4a9e7a4 100644 --- a/mypyc/lib-rt/dict_ops.c +++ b/mypyc/lib-rt/dict_ops.c @@ -70,7 +70,7 @@ PyObject *CPyDict_GetWithNone(PyObject *dict, PyObject *key) { PyObject *CPyDict_SetDefault(PyObject *dict, PyObject *key, PyObject *value) { if (PyDict_CheckExact(dict)){ PyObject* ret = PyDict_SetDefault(dict, key, value); - Py_INCREF(ret); + Py_XINCREF(ret); return ret; } return PyObject_CallMethod(dict, "setdefault", "(OO)", key, value);