diff options
| author | Raymond Hettinger <python@rcn.com> | 2004-05-31 03:09:25 +0000 |
|---|---|---|
| committer | Raymond Hettinger <python@rcn.com> | 2004-05-31 03:09:25 +0000 |
| commit | bfabab77ddc33819fd3552575c41cd0e6e64ad4e (patch) | |
| tree | cc5f8b55e2c3678d0f0b385a6bb969e82056facb /Modules/_sre.c | |
| parent | d7640d59dec0c857aa54627e67c02af2e470e6f1 (diff) | |
| download | cpython-bfabab77ddc33819fd3552575c41cd0e6e64ad4e.tar.gz | |
Add weakref support to sockets and re pattern objects.
Diffstat (limited to 'Modules/_sre.c')
| -rw-r--r-- | Modules/_sre.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/Modules/_sre.c b/Modules/_sre.c index 45139bc002..4be33d04ca 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1673,6 +1673,8 @@ _compile(PyObject* self_, PyObject* args) Py_XINCREF(indexgroup); self->indexgroup = indexgroup; + self->weakreflist = NULL; + return (PyObject*) self; } @@ -1985,6 +1987,8 @@ pattern_scanner(PatternObject* pattern, PyObject* args) static void pattern_dealloc(PatternObject* self) { + if (self->weakreflist != NULL) + PyObject_ClearWeakRefs((PyObject *) self); Py_XDECREF(self->pattern); Py_XDECREF(self->groupindex); Py_XDECREF(self->indexgroup); @@ -2632,6 +2636,7 @@ pattern_copy(PatternObject* self, PyObject* args) memcpy((char*) copy + offset, (char*) self + offset, sizeof(PatternObject) + self->codesize * sizeof(SRE_CODE) - offset); + copy->weakreflist = NULL; return (PyObject*) copy; #else @@ -2722,7 +2727,25 @@ statichere PyTypeObject Pattern_Type = { sizeof(PatternObject), sizeof(SRE_CODE), (destructor)pattern_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ - (getattrfunc)pattern_getattr /*tp_getattr*/ + (getattrfunc)pattern_getattr, /*tp_getattr*/ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_HAVE_WEAKREFS, /* tp_flags */ + 0, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + offsetof(PatternObject, weakreflist), /* tp_weaklistoffset */ }; /* -------------------------------------------------------------------- */ |
