summaryrefslogtreecommitdiff
path: root/Python/Python-ast.c
diff options
context:
space:
mode:
authorEddie Elizondo <eelizondo@fb.com>2019-09-19 09:29:05 -0700
committerDino Viehland <dinoviehland@gmail.com>2019-09-19 17:29:05 +0100
commit3368f3c6ae4140a0883e19350e672fd09c9db616 (patch)
tree0b4477fdd89aefa2b9d17e6a16c3f172f32a5660 /Python/Python-ast.c
parent079931d12223ec98cbf53185b90db48efa61f93f (diff)
downloadcpython-git-3368f3c6ae4140a0883e19350e672fd09c9db616.tar.gz
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
Diffstat (limited to 'Python/Python-ast.c')
-rw-r--r--Python/Python-ast.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 7a38e98c43..558d9ebea5 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -4,6 +4,7 @@
#include "Python.h"
#include "Python-ast.h"
+#include "structmember.h"
typedef struct {
int initialized;
@@ -1216,6 +1217,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}
@@ -1232,6 +1238,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},
@@ -1421,8 +1428,6 @@ static int init_types(void)
if (init_identifiers() < 0) return 0;
state->AST_type = PyType_FromSpec(&AST_type_spec);
if (!state->AST_type) return 0;
- ((PyTypeObject*)state->AST_type)->tp_dictoffset = offsetof(AST_object,
- dict);
if (add_ast_fields() < 0) return 0;
state->mod_type = make_type("mod", state->AST_type, NULL, 0);
if (!state->mod_type) return 0;