Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion mypyc/lib-rt/bytes_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,11 @@ PyObject *CPyBytes_Join(PyObject *sep, PyObject *iter) {
return PyBytes_Join(sep, iter);
} else {
_Py_IDENTIFIER(join);
return _PyObject_CallMethodIdOneArg(sep, &PyId_join, iter);
PyObject *name = _PyUnicode_FromId(&PyId_join); /* borrowed */
if (name == NULL) {
return NULL;
}
return PyObject_CallMethodOneArg(sep, name, iter);
}
}

Expand Down
60 changes: 50 additions & 10 deletions mypyc/lib-rt/dict_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -208,23 +208,35 @@ PyObject *CPyDict_KeysView(PyObject *dict) {
return _CPyDictView_New(dict, &PyDictKeys_Type);
}
_Py_IDENTIFIER(keys);
return _PyObject_CallMethodIdNoArgs(dict, &PyId_keys);
PyObject *name = _PyUnicode_FromId(&PyId_keys); /* borrowed */
if (name == NULL) {
return NULL;
}
return PyObject_CallMethodNoArgs(dict, name);
}

PyObject *CPyDict_ValuesView(PyObject *dict) {
if (PyDict_CheckExact(dict)){
return _CPyDictView_New(dict, &PyDictValues_Type);
}
_Py_IDENTIFIER(values);
return _PyObject_CallMethodIdNoArgs(dict, &PyId_values);
PyObject *name = _PyUnicode_FromId(&PyId_values); /* borrowed */
if (name == NULL) {
return NULL;
}
return PyObject_CallMethodNoArgs(dict, name);
}

PyObject *CPyDict_ItemsView(PyObject *dict) {
if (PyDict_CheckExact(dict)){
return _CPyDictView_New(dict, &PyDictItems_Type);
}
_Py_IDENTIFIER(items);
return _PyObject_CallMethodIdNoArgs(dict, &PyId_items);
PyObject *name = _PyUnicode_FromId(&PyId_items); /* borrowed */
if (name == NULL) {
return NULL;
}
return PyObject_CallMethodNoArgs(dict, name);
}

PyObject *CPyDict_Keys(PyObject *dict) {
Expand All @@ -234,7 +246,11 @@ PyObject *CPyDict_Keys(PyObject *dict) {
// Inline generic fallback logic to also return a list.
PyObject *list = PyList_New(0);
_Py_IDENTIFIER(keys);
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_keys);
PyObject *name = _PyUnicode_FromId(&PyId_keys); /* borrowed */
if (name == NULL) {
return NULL;
}
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
if (view == NULL) {
return NULL;
}
Expand All @@ -253,7 +269,11 @@ PyObject *CPyDict_Values(PyObject *dict) {
// Inline generic fallback logic to also return a list.
PyObject *list = PyList_New(0);
_Py_IDENTIFIER(values);
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_values);
PyObject *name = _PyUnicode_FromId(&PyId_values); /* borrowed */
if (name == NULL) {
return NULL;
}
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
if (view == NULL) {
return NULL;
}
Expand All @@ -272,7 +292,11 @@ PyObject *CPyDict_Items(PyObject *dict) {
// Inline generic fallback logic to also return a list.
PyObject *list = PyList_New(0);
_Py_IDENTIFIER(items);
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_items);
PyObject *name = _PyUnicode_FromId(&PyId_items); /* borrowed */
if (name == NULL) {
return NULL;
}
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
if (view == NULL) {
return NULL;
}
Expand All @@ -289,7 +313,11 @@ char CPyDict_Clear(PyObject *dict) {
PyDict_Clear(dict);
} else {
_Py_IDENTIFIER(clear);
PyObject *res = _PyObject_CallMethodIdNoArgs(dict, &PyId_clear);
PyObject *name = _PyUnicode_FromId(&PyId_clear); /* borrowed */
if (name == NULL) {
return 0;
}
PyObject *res = PyObject_CallMethodNoArgs(dict, name);
if (res == NULL) {
return 0;
}
Expand All @@ -302,7 +330,11 @@ PyObject *CPyDict_Copy(PyObject *dict) {
return PyDict_Copy(dict);
}
_Py_IDENTIFIER(copy);
return _PyObject_CallMethodIdNoArgs(dict, &PyId_copy);
PyObject *name = _PyUnicode_FromId(&PyId_copy); /* borrowed */
if (name == NULL) {
return NULL;
}
return PyObject_CallMethodNoArgs(dict, name);
}

PyObject *CPyDict_GetKeysIter(PyObject *dict) {
Expand All @@ -321,7 +353,11 @@ PyObject *CPyDict_GetItemsIter(PyObject *dict) {
return dict;
}
_Py_IDENTIFIER(items);
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_items);
PyObject *name = _PyUnicode_FromId(&PyId_items); /* borrowed */
if (name == NULL) {
return NULL;
}
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
if (view == NULL) {
return NULL;
}
Expand All @@ -337,7 +373,11 @@ PyObject *CPyDict_GetValuesIter(PyObject *dict) {
return dict;
}
_Py_IDENTIFIER(values);
PyObject *view = _PyObject_CallMethodIdNoArgs(dict, &PyId_values);
PyObject *name = _PyUnicode_FromId(&PyId_values); /* borrowed */
if (name == NULL) {
return NULL;
}
PyObject *view = PyObject_CallMethodNoArgs(dict, name);
if (view == NULL) {
return NULL;
}
Expand Down
8 changes: 6 additions & 2 deletions mypyc/lib-rt/misc_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,15 @@ PyObject *CPyIter_Send(PyObject *iter, PyObject *val)
{
// Do a send, or a next if second arg is None.
// (This behavior is to match the PEP 380 spec for yield from.)
_Py_IDENTIFIER(send);
if (Py_IsNone(val)) {
return CPyIter_Next(iter);
} else {
return _PyObject_CallMethodIdOneArg(iter, &PyId_send, val);
_Py_IDENTIFIER(send);
PyObject *name = _PyUnicode_FromId(&PyId_send); /* borrowed */
if (name == NULL) {
return NULL;
}
return PyObject_CallMethodOneArg(iter, name, val);
}
}

Expand Down
1 change: 0 additions & 1 deletion mypyc/lib-rt/pythonsupport.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#ifndef Py_BUILD_CORE
#define Py_BUILD_CORE
#endif
#include "internal/pycore_call.h" // _PyObject_CallMethodIdNoArgs, _PyObject_CallMethodIdOneArg
#include "internal/pycore_genobject.h" // _PyGen_FetchStopIterationValue
#include "internal/pycore_pyerrors.h" // _PyErr_FormatFromCause, _PyErr_SetKeyError
#include "internal/pycore_setobject.h" // _PySet_Update
Expand Down