diff -r ffc0840762e4 Parser/asdl_c.py --- a/Parser/asdl_c.py Wed Jan 25 00:30:04 2017 +0200 +++ b/Parser/asdl_c.py Wed Jan 25 22:03:26 2017 +0900 @@ -622,6 +622,9 @@ class PyTypesVisitor(PickleVisitor): def visitModule(self, mod): self.emit(""" +_Py_IDENTIFIER(_fields); +_Py_IDENTIFIER(_attributes); + typedef struct { PyObject_HEAD PyObject *dict; @@ -650,7 +653,6 @@ ast_clear(AST_object *self) static int ast_type_init(PyObject *self, PyObject *args, PyObject *kw) { - _Py_IDENTIFIER(_fields); Py_ssize_t i, numfields = 0; int res = -1; PyObject *key, *value, *fields; @@ -775,6 +777,8 @@ static PyTypeObject AST_type = { static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields) { + _Py_IDENTIFIER(__module__); + _Py_IDENTIFIER(_ast); PyObject *fnames, *result; int i; fnames = PyTuple_New(num_fields); @@ -787,8 +791,11 @@ static PyTypeObject* make_type(char *typ } PyTuple_SET_ITEM(fnames, i, field); } - result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}", - type, base, "_fields", fnames, "__module__", "_ast"); + result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOO}", + type, base, + _PyUnicode_FromId(&PyId__fields), fnames, + _PyUnicode_FromId(&PyId___module__), + _PyUnicode_FromId(&PyId__ast)); Py_DECREF(fnames); return (PyTypeObject*)result; } @@ -796,7 +803,6 @@ static PyTypeObject* make_type(char *typ static int add_attributes(PyTypeObject* type, char**attrs, int num_fields) { int i, result; - _Py_IDENTIFIER(_attributes); PyObject *s, *l = PyTuple_New(num_fields); if (!l) return 0; @@ -1091,8 +1097,7 @@ class ObjVisitor(PickleVisitor): self.emit("%s o = (%s)_o;" % (ctype, ctype), 1) self.emit("PyObject *result = NULL, *value = NULL;", 1) self.emit('if (!o) {', 1) - self.emit("Py_INCREF(Py_None);", 2) - self.emit('return Py_None;', 2) + self.emit("Py_RETURN_NONE;", 2) self.emit("}", 1) self.emit('', 0) diff -r ffc0840762e4 Python/Python-ast.c --- a/Python/Python-ast.c Wed Jan 25 00:30:04 2017 +0200 +++ b/Python/Python-ast.c Wed Jan 25 22:03:26 2017 +0900 @@ -504,6 +504,9 @@ static char *withitem_fields[]={ }; +_Py_IDENTIFIER(_fields); +_Py_IDENTIFIER(_attributes); + typedef struct { PyObject_HEAD PyObject *dict; @@ -532,7 +535,6 @@ ast_clear(AST_object *self) static int ast_type_init(PyObject *self, PyObject *args, PyObject *kw) { - _Py_IDENTIFIER(_fields); Py_ssize_t i, numfields = 0; int res = -1; PyObject *key, *value, *fields; @@ -657,6 +659,8 @@ static PyTypeObject AST_type = { static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields) { + _Py_IDENTIFIER(__module__); + _Py_IDENTIFIER(_ast); PyObject *fnames, *result; int i; fnames = PyTuple_New(num_fields); @@ -669,8 +673,11 @@ static PyTypeObject* make_type(char *typ } PyTuple_SET_ITEM(fnames, i, field); } - result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}", - type, base, "_fields", fnames, "__module__", "_ast"); + result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOO}", + type, base, + _PyUnicode_FromId(&PyId__fields), fnames, + _PyUnicode_FromId(&PyId___module__), + _PyUnicode_FromId(&PyId__ast)); Py_DECREF(fnames); return (PyTypeObject*)result; } @@ -678,7 +685,6 @@ static PyTypeObject* make_type(char *typ static int add_attributes(PyTypeObject* type, char**attrs, int num_fields) { int i, result; - _Py_IDENTIFIER(_attributes); PyObject *s, *l = PyTuple_New(num_fields); if (!l) return 0;