Skip to content

Commit d64f3ca

Browse files
authored
bpo-46541: Remove usage of _Py_IDENTIFIER from csv module (GH-31372)
1 parent 562c13f commit d64f3ca

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

Modules/_csv.c

+10-4
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ module instead.
1010

1111
#define MODULE_VERSION "1.0"
1212

13-
#define NEEDS_PY_IDENTIFIER
14-
1513
#include "Python.h"
1614
#include "structmember.h" // PyMemberDef
1715
#include <stdbool.h>
@@ -27,6 +25,7 @@ typedef struct {
2725
PyTypeObject *reader_type;
2826
PyTypeObject *writer_type;
2927
long field_limit; /* max parsed field size */
28+
PyObject *str_write;
3029
} _csvstate;
3130

3231
static struct PyModuleDef _csvmodule;
@@ -48,6 +47,7 @@ _csv_clear(PyObject *module)
4847
Py_CLEAR(module_state->dialect_type);
4948
Py_CLEAR(module_state->reader_type);
5049
Py_CLEAR(module_state->writer_type);
50+
Py_CLEAR(module_state->str_write);
5151
return 0;
5252
}
5353

@@ -60,6 +60,7 @@ _csv_traverse(PyObject *module, visitproc visit, void *arg)
6060
Py_VISIT(module_state->dialect_type);
6161
Py_VISIT(module_state->reader_type);
6262
Py_VISIT(module_state->writer_type);
63+
Py_VISIT(module_state->str_write);
6364
return 0;
6465
}
6566

@@ -1430,7 +1431,6 @@ csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
14301431
PyObject * output_file, * dialect = NULL;
14311432
_csvstate *module_state = get_csv_state(module);
14321433
WriterObj * self = PyObject_GC_New(WriterObj, module_state->writer_type);
1433-
_Py_IDENTIFIER(write);
14341434

14351435
if (!self)
14361436
return NULL;
@@ -1449,7 +1449,9 @@ csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
14491449
Py_DECREF(self);
14501450
return NULL;
14511451
}
1452-
if (_PyObject_LookupAttrId(output_file, &PyId_write, &self->write) < 0) {
1452+
if (_PyObject_LookupAttr(output_file,
1453+
module_state->str_write,
1454+
&self->write) < 0) {
14531455
Py_DECREF(self);
14541456
return NULL;
14551457
}
@@ -1751,6 +1753,10 @@ csv_exec(PyObject *module) {
17511753
return -1;
17521754
}
17531755

1756+
module_state->str_write = PyUnicode_InternFromString("write");
1757+
if (module_state->str_write == NULL) {
1758+
return -1;
1759+
}
17541760
return 0;
17551761
}
17561762

0 commit comments

Comments
 (0)