Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fc48908

Browse files
committed
Issue #29369: Use Py_IDENTIFIER in Python-ast.c
1 parent 6e08baf commit fc48908

2 files changed

Lines changed: 25 additions & 14 deletions

File tree

Parser/asdl_c.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,9 @@ class PyTypesVisitor(PickleVisitor):
622622

623623
def visitModule(self, mod):
624624
self.emit("""
625+
_Py_IDENTIFIER(_fields);
626+
_Py_IDENTIFIER(_attributes);
627+
625628
typedef struct {
626629
PyObject_HEAD
627630
PyObject *dict;
@@ -650,7 +653,6 @@ def visitModule(self, mod):
650653
static int
651654
ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
652655
{
653-
_Py_IDENTIFIER(_fields);
654656
Py_ssize_t i, numfields = 0;
655657
int res = -1;
656658
PyObject *key, *value, *fields;
@@ -775,6 +777,8 @@ def visitModule(self, mod):
775777
776778
static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
777779
{
780+
_Py_IDENTIFIER(__module__);
781+
_Py_IDENTIFIER(_ast);
778782
PyObject *fnames, *result;
779783
int i;
780784
fnames = PyTuple_New(num_fields);
@@ -787,16 +791,18 @@ def visitModule(self, mod):
787791
}
788792
PyTuple_SET_ITEM(fnames, i, field);
789793
}
790-
result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
791-
type, base, "_fields", fnames, "__module__", "_ast");
794+
result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOO}",
795+
type, base,
796+
_PyUnicode_FromId(&PyId__fields), fnames,
797+
_PyUnicode_FromId(&PyId___module__),
798+
_PyUnicode_FromId(&PyId__ast));
792799
Py_DECREF(fnames);
793800
return (PyTypeObject*)result;
794801
}
795802
796803
static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
797804
{
798805
int i, result;
799-
_Py_IDENTIFIER(_attributes);
800806
PyObject *s, *l = PyTuple_New(num_fields);
801807
if (!l)
802808
return 0;
@@ -942,8 +948,8 @@ def visitModule(self, mod):
942948
d = AST_type.tp_dict;
943949
empty_tuple = PyTuple_New(0);
944950
if (!empty_tuple ||
945-
PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
946-
PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
951+
_PyDict_SetItemId(d, &PyId__fields, empty_tuple) < 0 ||
952+
_PyDict_SetItemId(d, &PyId__attributes, empty_tuple) < 0) {
947953
Py_XDECREF(empty_tuple);
948954
return -1;
949955
}
@@ -1091,8 +1097,7 @@ def func_begin(self, name):
10911097
self.emit("%s o = (%s)_o;" % (ctype, ctype), 1)
10921098
self.emit("PyObject *result = NULL, *value = NULL;", 1)
10931099
self.emit('if (!o) {', 1)
1094-
self.emit("Py_INCREF(Py_None);", 2)
1095-
self.emit('return Py_None;', 2)
1100+
self.emit("Py_RETURN_NONE;", 2)
10961101
self.emit("}", 1)
10971102
self.emit('', 0)
10981103

Python/Python-ast.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,9 @@ static char *withitem_fields[]={
504504
};
505505

506506

507+
_Py_IDENTIFIER(_fields);
508+
_Py_IDENTIFIER(_attributes);
509+
507510
typedef struct {
508511
PyObject_HEAD
509512
PyObject *dict;
@@ -532,7 +535,6 @@ ast_clear(AST_object *self)
532535
static int
533536
ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
534537
{
535-
_Py_IDENTIFIER(_fields);
536538
Py_ssize_t i, numfields = 0;
537539
int res = -1;
538540
PyObject *key, *value, *fields;
@@ -657,6 +659,8 @@ static PyTypeObject AST_type = {
657659

658660
static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
659661
{
662+
_Py_IDENTIFIER(__module__);
663+
_Py_IDENTIFIER(_ast);
660664
PyObject *fnames, *result;
661665
int i;
662666
fnames = PyTuple_New(num_fields);
@@ -669,16 +673,18 @@ static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int
669673
}
670674
PyTuple_SET_ITEM(fnames, i, field);
671675
}
672-
result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
673-
type, base, "_fields", fnames, "__module__", "_ast");
676+
result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOO}",
677+
type, base,
678+
_PyUnicode_FromId(&PyId__fields), fnames,
679+
_PyUnicode_FromId(&PyId___module__),
680+
_PyUnicode_FromId(&PyId__ast));
674681
Py_DECREF(fnames);
675682
return (PyTypeObject*)result;
676683
}
677684

678685
static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
679686
{
680687
int i, result;
681-
_Py_IDENTIFIER(_attributes);
682688
PyObject *s, *l = PyTuple_New(num_fields);
683689
if (!l)
684690
return 0;
@@ -824,8 +830,8 @@ static int add_ast_fields(void)
824830
d = AST_type.tp_dict;
825831
empty_tuple = PyTuple_New(0);
826832
if (!empty_tuple ||
827-
PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
828-
PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
833+
_PyDict_SetItemId(d, &PyId__fields, empty_tuple) < 0 ||
834+
_PyDict_SetItemId(d, &PyId__attributes, empty_tuple) < 0) {
829835
Py_XDECREF(empty_tuple);
830836
return -1;
831837
}

0 commit comments

Comments
 (0)