Skip to content

Commit a8ac1f6

Browse files
committed
feat: add shim for _PyDictView_New
Since Python 3.13, `_PyDictView_New` function became an internal API.
1 parent 07da1db commit a8ac1f6

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/JSObjectProxy.cc

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -774,14 +774,29 @@ PyObject *JSObjectProxyMethodDefinitions::JSObjectProxy_update_method(JSObjectPr
774774
Py_RETURN_NONE;
775775
}
776776

777+
/**
778+
* @brief Shim for `_PyDictView_New`.
779+
* Since Python 3.13, `_PyDictView_New` function became an internal API.
780+
* @see Modified from https://github.com/python/cpython/blob/v3.13.0rc1/Objects/dictobject.c#L5806-L5827
781+
*/
782+
PyObject *newPyDictViewObject(PyObject *dict, PyTypeObject *type) {
783+
_PyDictViewObject *dv;
784+
dv = PyObject_GC_New(_PyDictViewObject, type);
785+
if (dv == NULL)
786+
return NULL;
787+
dv->dv_dict = (PyDictObject *)Py_NewRef(dict);
788+
PyObject_GC_Track(dv);
789+
return (PyObject *)dv;
790+
}
791+
777792
PyObject *JSObjectProxyMethodDefinitions::JSObjectProxy_keys_method(JSObjectProxy *self) {
778-
return _PyDictView_New((PyObject *)self, &JSObjectKeysProxyType);
793+
return newPyDictViewObject((PyObject *)self, &JSObjectKeysProxyType);
779794
}
780795

781796
PyObject *JSObjectProxyMethodDefinitions::JSObjectProxy_values_method(JSObjectProxy *self) {
782-
return _PyDictView_New((PyObject *)self, &JSObjectValuesProxyType);
797+
return newPyDictViewObject((PyObject *)self, &JSObjectValuesProxyType);
783798
}
784799

785800
PyObject *JSObjectProxyMethodDefinitions::JSObjectProxy_items_method(JSObjectProxy *self) {
786-
return _PyDictView_New((PyObject *)self, &JSObjectItemsProxyType);
801+
return newPyDictViewObject((PyObject *)self, &JSObjectItemsProxyType);
787802
}

0 commit comments

Comments
 (0)