mirror of
https://github.com/python/cpython.git
synced 2025-08-01 07:33:08 +00:00
Fixed #4067 by implementing _attributes and _fields for the AST root node.
This commit is contained in:
parent
92b70bcc6e
commit
35e01fbeaa
2 changed files with 36 additions and 0 deletions
|
@ -824,12 +824,30 @@ static int obj2ast_bool(PyObject* obj, bool* out, PyArena* arena)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int add_ast_fields()
|
||||||
|
{
|
||||||
|
PyObject *empty_tuple, *d;
|
||||||
|
if (PyType_Ready(&AST_type) < 0)
|
||||||
|
return -1;
|
||||||
|
d = AST_type.tp_dict;
|
||||||
|
empty_tuple = PyTuple_New(0);
|
||||||
|
if (!empty_tuple ||
|
||||||
|
PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
|
||||||
|
PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
|
||||||
|
Py_XDECREF(empty_tuple);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
Py_DECREF(empty_tuple);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
""", 0, reflow=False)
|
""", 0, reflow=False)
|
||||||
|
|
||||||
self.emit("static int init_types(void)",0)
|
self.emit("static int init_types(void)",0)
|
||||||
self.emit("{", 0)
|
self.emit("{", 0)
|
||||||
self.emit("static int initialized;", 1)
|
self.emit("static int initialized;", 1)
|
||||||
self.emit("if (initialized) return 1;", 1)
|
self.emit("if (initialized) return 1;", 1)
|
||||||
|
self.emit("if (add_ast_fields() < 0) return 0;", 1)
|
||||||
for dfn in mod.dfns:
|
for dfn in mod.dfns:
|
||||||
self.visit(dfn)
|
self.visit(dfn)
|
||||||
self.emit("initialized = 1;", 1)
|
self.emit("initialized = 1;", 1)
|
||||||
|
|
|
@ -615,11 +615,29 @@ static int obj2ast_bool(PyObject* obj, bool* out, PyArena* arena)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int add_ast_fields()
|
||||||
|
{
|
||||||
|
PyObject *empty_tuple, *d;
|
||||||
|
if (PyType_Ready(&AST_type) < 0)
|
||||||
|
return -1;
|
||||||
|
d = AST_type.tp_dict;
|
||||||
|
empty_tuple = PyTuple_New(0);
|
||||||
|
if (!empty_tuple ||
|
||||||
|
PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
|
||||||
|
PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
|
||||||
|
Py_XDECREF(empty_tuple);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
Py_DECREF(empty_tuple);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int init_types(void)
|
static int init_types(void)
|
||||||
{
|
{
|
||||||
static int initialized;
|
static int initialized;
|
||||||
if (initialized) return 1;
|
if (initialized) return 1;
|
||||||
|
if (add_ast_fields() < 0) return 0;
|
||||||
mod_type = make_type("mod", &AST_type, NULL, 0);
|
mod_type = make_type("mod", &AST_type, NULL, 0);
|
||||||
if (!mod_type) return 0;
|
if (!mod_type) return 0;
|
||||||
if (!add_attributes(mod_type, NULL, 0)) return 0;
|
if (!add_attributes(mod_type, NULL, 0)) return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue