mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
bpo-38140: Make dict and weakref offsets opaque for C heap types (#16076)
* Make dict and weakref offsets opaque for C heap types * Add news
This commit is contained in:
parent
079931d122
commit
3368f3c6ae
8 changed files with 188 additions and 8 deletions
|
@ -724,6 +724,11 @@ ast_type_reduce(PyObject *self, PyObject *unused)
|
|||
return Py_BuildValue("O()", Py_TYPE(self));
|
||||
}
|
||||
|
||||
static PyMemberDef ast_type_members[] = {
|
||||
{"__dictoffset__", T_PYSSIZET, offsetof(AST_object, dict), READONLY},
|
||||
{NULL} /* Sentinel */
|
||||
};
|
||||
|
||||
static PyMethodDef ast_type_methods[] = {
|
||||
{"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
|
||||
{NULL}
|
||||
|
@ -740,6 +745,7 @@ static PyType_Slot AST_type_slots[] = {
|
|||
{Py_tp_setattro, PyObject_GenericSetAttr},
|
||||
{Py_tp_traverse, ast_traverse},
|
||||
{Py_tp_clear, ast_clear},
|
||||
{Py_tp_members, ast_type_members},
|
||||
{Py_tp_methods, ast_type_methods},
|
||||
{Py_tp_getset, ast_type_getsets},
|
||||
{Py_tp_init, ast_type_init},
|
||||
|
@ -930,7 +936,6 @@ static int add_ast_fields(void)
|
|||
self.emit("if (init_identifiers() < 0) return 0;", 1)
|
||||
self.emit("state->AST_type = PyType_FromSpec(&AST_type_spec);", 1)
|
||||
self.emit("if (!state->AST_type) return 0;", 1)
|
||||
self.emit("((PyTypeObject*)state->AST_type)->tp_dictoffset = offsetof(AST_object, dict);", 1)
|
||||
self.emit("if (add_ast_fields() < 0) return 0;", 1)
|
||||
for dfn in mod.dfns:
|
||||
self.visit(dfn)
|
||||
|
@ -1372,6 +1377,7 @@ def main(srcfile, dump_module=False):
|
|||
f.write('\n')
|
||||
f.write('#include "Python.h"\n')
|
||||
f.write('#include "%s-ast.h"\n' % mod.name)
|
||||
f.write('#include "structmember.h"\n')
|
||||
f.write('\n')
|
||||
|
||||
generate_module_def(f, mod)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue