Skip to content

Commit 2d9b51c

Browse files
authored
Merge pull request #57 from python/master
Fix mypyc failing to compile on CPython 3.10.0a6 (python#10202)
2 parents d43db1b + ac66403 commit 2d9b51c

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

mypyc/lib-rt/dict_ops.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ int CPyDict_UpdateFromAny(PyObject *dict, PyObject *stuff) {
115115
if (PyDict_CheckExact(dict)) {
116116
// Argh this sucks
117117
_Py_IDENTIFIER(keys);
118-
if (PyDict_Check(stuff) || _PyObject_HasAttrId(stuff, &PyId_keys)) {
118+
if (PyDict_Check(stuff) || _CPyObject_HasAttrId(stuff, &PyId_keys)) {
119119
return PyDict_Update(dict, stuff);
120120
} else {
121121
return PyDict_MergeFromSeq2(dict, stuff, 1);
@@ -135,7 +135,7 @@ PyObject *CPyDict_FromAny(PyObject *obj) {
135135
return NULL;
136136
}
137137
_Py_IDENTIFIER(keys);
138-
if (_PyObject_HasAttrId(obj, &PyId_keys)) {
138+
if (_CPyObject_HasAttrId(obj, &PyId_keys)) {
139139
res = PyDict_Update(dict, obj);
140140
} else {
141141
res = PyDict_MergeFromSeq2(dict, obj, 1);

mypyc/lib-rt/pythonsupport.h

+14
Original file line numberDiff line numberDiff line change
@@ -389,4 +389,18 @@ _CPyDictView_New(PyObject *dict, PyTypeObject *type)
389389
}
390390
#endif
391391

392+
#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >=10
393+
static int
394+
_CPyObject_HasAttrId(PyObject *v, _Py_Identifier *name) {
395+
PyObject *tmp = NULL;
396+
int result = _PyObject_LookupAttrId(v, name, &tmp);
397+
if (tmp) {
398+
Py_DECREF(tmp);
399+
}
400+
return result;
401+
}
402+
#else
403+
#define _CPyObject_HasAttrId _PyObject_HasAttrId
404+
#endif
405+
392406
#endif

mypyc/test-data/run-misc.test

+4-1
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,10 @@ import sys
940940

941941
# We lie about the version we are running in tests if it is 3.5, so
942942
# that hits a crash case.
943-
if sys.version_info[:2] == (3, 9):
943+
if sys.version_info[:2] == (3, 10):
944+
def version() -> int:
945+
return 10
946+
elif sys.version_info[:2] == (3, 9):
944947
def version() -> int:
945948
return 9
946949
elif sys.version_info[:2] == (3, 8):

0 commit comments

Comments
 (0)