Skip to content

Commit 52907ac

Browse files
authored
[mypyc] Replace internal _PyObject_CallMethodId calls (#18761)
1 parent af5186e commit 52907ac

File tree

4 files changed

+61
-14
lines changed

4 files changed

+61
-14
lines changed

mypyc/lib-rt/bytes_ops.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,11 @@ PyObject *CPyBytes_Join(PyObject *sep, PyObject *iter) {
102102
return PyBytes_Join(sep, iter);
103103
} else {
104104
_Py_IDENTIFIER(join);
105-
return _PyObject_CallMethodIdOneArg(sep, &PyId_join, iter);
105+
PyObject *name = _PyUnicode_FromId(&PyId_join); /* borrowed */
106+
if (name == NULL) {
107+
return NULL;
108+
}
109+
return PyObject_CallMethodOneArg(sep, name, iter);
106110
}
107111
}
108112

mypyc/lib-rt/dict_ops.c

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,23 +208,35 @@ PyObject *CPyDict_KeysView(PyObject *dict) {
208208
return _CPyDictView_New(dict, &PyDictKeys_Type);
209209
}
210210
_Py_IDENTIFIER(keys);
211-
return _PyObject_CallMethodIdNoArgs(dict, &PyId_keys);
211+
PyObject *name = _PyUnicode_FromId(&PyId_keys); /* borrowed */
212+
if (name == NULL) {
213+
return NULL;
214+
}
215+
return PyObject_CallMethodNoArgs(dict, name);
212216
}
213217

214218
PyObject *CPyDict_ValuesView(PyObject *dict) {
215219
if (PyDict_CheckExact(dict)){
216220
return _CPyDictView_New(dict, &PyDictValues_Type);
217221
}
218222
_Py_IDENTIFIER(values);
219-
return _PyObject_CallMethodIdNoArgs(dict, &PyId_values);
223+
PyObject *name = _PyUnicode_FromId(&PyId_values); /* borrowed */
224+
if (name == NULL) {
225+
return NULL;
226+
}
227+
return PyObject_CallMethodNoArgs(dict, name);
220228
}
221229

222230
PyObject *CPyDict_ItemsView(PyObject *dict) {
223231
if (PyDict_CheckExact(dict)){
224232
return _CPyDictView_New(dict, &PyDictItems_Type);
225233
}
226234
_Py_IDENTIFIER(items);
227-
return _PyObject_CallMethodIdNoArgs(dict, &PyId_items);
235+
PyObject *name = _PyUnicode_FromId(&PyId_items); /* borrowed */
236+
if (name == NULL) {
237+
return NULL;
238+
}
239+
return PyObject_CallMethodNoArgs(dict, name);
228240
}
229241

230242
PyObject *CPyDict_Keys(PyObject *dict) {
@@ -234,7 +246,11 @@ PyObject *CPyDict_Keys(PyObject *dict) {
234246
// Inline generic fallback logic to also return a list.
235247
PyObject *list = PyList_New(0);
236248
_Py_IDENTIFIER(keys);
237-
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_keys);
249+
PyObject *name = _PyUnicode_FromId(&PyId_keys); /* borrowed */
250+
if (name == NULL) {
251+
return NULL;
252+
}
253+
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
238254
if (view == NULL) {
239255
return NULL;
240256
}
@@ -253,7 +269,11 @@ PyObject *CPyDict_Values(PyObject *dict) {
253269
// Inline generic fallback logic to also return a list.
254270
PyObject *list = PyList_New(0);
255271
_Py_IDENTIFIER(values);
256-
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_values);
272+
PyObject *name = _PyUnicode_FromId(&PyId_values); /* borrowed */
273+
if (name == NULL) {
274+
return NULL;
275+
}
276+
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
257277
if (view == NULL) {
258278
return NULL;
259279
}
@@ -272,7 +292,11 @@ PyObject *CPyDict_Items(PyObject *dict) {
272292
// Inline generic fallback logic to also return a list.
273293
PyObject *list = PyList_New(0);
274294
_Py_IDENTIFIER(items);
275-
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_items);
295+
PyObject *name = _PyUnicode_FromId(&PyId_items); /* borrowed */
296+
if (name == NULL) {
297+
return NULL;
298+
}
299+
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
276300
if (view == NULL) {
277301
return NULL;
278302
}
@@ -289,7 +313,11 @@ char CPyDict_Clear(PyObject *dict) {
289313
PyDict_Clear(dict);
290314
} else {
291315
_Py_IDENTIFIER(clear);
292-
PyObject *res = _PyObject_CallMethodIdNoArgs(dict, &PyId_clear);
316+
PyObject *name = _PyUnicode_FromId(&PyId_clear); /* borrowed */
317+
if (name == NULL) {
318+
return 0;
319+
}
320+
PyObject *res = PyObject_CallMethodNoArgs(dict, name);
293321
if (res == NULL) {
294322
return 0;
295323
}
@@ -302,7 +330,11 @@ PyObject *CPyDict_Copy(PyObject *dict) {
302330
return PyDict_Copy(dict);
303331
}
304332
_Py_IDENTIFIER(copy);
305-
return _PyObject_CallMethodIdNoArgs(dict, &PyId_copy);
333+
PyObject *name = _PyUnicode_FromId(&PyId_copy); /* borrowed */
334+
if (name == NULL) {
335+
return NULL;
336+
}
337+
return PyObject_CallMethodNoArgs(dict, name);
306338
}
307339

308340
PyObject *CPyDict_GetKeysIter(PyObject *dict) {
@@ -321,7 +353,11 @@ PyObject *CPyDict_GetItemsIter(PyObject *dict) {
321353
return dict;
322354
}
323355
_Py_IDENTIFIER(items);
324-
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_items);
356+
PyObject *name = _PyUnicode_FromId(&PyId_items); /* borrowed */
357+
if (name == NULL) {
358+
return NULL;
359+
}
360+
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
325361
if (view == NULL) {
326362
return NULL;
327363
}
@@ -337,7 +373,11 @@ PyObject *CPyDict_GetValuesIter(PyObject *dict) {
337373
return dict;
338374
}
339375
_Py_IDENTIFIER(values);
340-
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_values);
376+
PyObject *name = _PyUnicode_FromId(&PyId_values); /* borrowed */
377+
if (name == NULL) {
378+
return NULL;
379+
}
380+
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
341381
if (view == NULL) {
342382
return NULL;
343383
}

mypyc/lib-rt/misc_ops.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,15 @@ PyObject *CPyIter_Send(PyObject *iter, PyObject *val)
2424
{
2525
// Do a send, or a next if second arg is None.
2626
// (This behavior is to match the PEP 380 spec for yield from.)
27-
_Py_IDENTIFIER(send);
2827
if (Py_IsNone(val)) {
2928
return CPyIter_Next(iter);
3029
} else {
31-
return _PyObject_CallMethodIdOneArg(iter, &PyId_send, val);
30+
_Py_IDENTIFIER(send);
31+
PyObject *name = _PyUnicode_FromId(&PyId_send); /* borrowed */
32+
if (name == NULL) {
33+
return NULL;
34+
}
35+
return PyObject_CallMethodOneArg(iter, name, val);
3236
}
3337
}
3438

mypyc/lib-rt/pythonsupport.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#ifndef Py_BUILD_CORE
1818
#define Py_BUILD_CORE
1919
#endif
20-
#include "internal/pycore_call.h" // _PyObject_CallMethodIdNoArgs, _PyObject_CallMethodIdOneArg
2120
#include "internal/pycore_genobject.h" // _PyGen_FetchStopIterationValue
2221
#include "internal/pycore_pyerrors.h" // _PyErr_FormatFromCause, _PyErr_SetKeyError
2322
#include "internal/pycore_setobject.h" // _PySet_Update

0 commit comments

Comments
 (0)