[Python-checkins] CVS: python/dist/src/Modules _sre.c,2.59,2.60
Fredrik Lundh
effbot@users.sourceforge.net
Tue, 03 Jul 2001 13:32:38 -0700
Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv11104/Modules
Modified Files:
_sre.c
Log Message:
bug #416670
added copy/deepcopy support to SRE (still not enabled, since it's not
covered by the test suite)
Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.59
retrieving revision 2.60
diff -C2 -r2.59 -r2.60
*** _sre.c 2001/07/02 19:54:28 2.59
--- _sre.c 2001/07/03 20:32:36 2.60
***************
*** 1698,1717 ****
static PyObject*
! call(char* function, PyObject* args)
{
PyObject* name;
! PyObject* module;
PyObject* func;
PyObject* result;
! name = PyString_FromString(SRE_MODULE);
if (!name)
return NULL;
! module = PyImport_Import(name);
Py_DECREF(name);
! if (!module)
return NULL;
! func = PyObject_GetAttrString(module, function);
! Py_DECREF(module);
if (!func)
return NULL;
--- 1698,1717 ----
static PyObject*
! call(char* module, char* function, PyObject* args)
{
PyObject* name;
! PyObject* mod;
PyObject* func;
PyObject* result;
! name = PyString_FromString(module);
if (!name)
return NULL;
! mod = PyImport_Import(name);
Py_DECREF(name);
! if (!mod)
return NULL;
! func = PyObject_GetAttrString(mod, function);
! Py_DECREF(mod);
if (!func)
return NULL;
***************
*** 1722,1725 ****
--- 1722,1745 ----
}
+ #ifdef USE_BUILTIN_COPY
+ static int
+ deepcopy(PyObject** object, PyObject* memo)
+ {
+ PyObject* copy;
+
+ copy = call(
+ "copy", "deepcopy",
+ Py_BuildValue("OO", *object, memo)
+ );
+ if (!copy)
+ return 0;
+
+ Py_DECREF(*object);
+ *object = copy;
+
+ return 1; /* success */
+ }
+ #endif
+
static PyObject*
pattern_sub(PatternObject* self, PyObject* args, PyObject* kw)
***************
*** 1734,1738 ****
/* delegate to Python code */
! return call("_sub", Py_BuildValue("OOOO", self, template, string, count));
}
--- 1754,1761 ----
/* delegate to Python code */
! return call(
! SRE_MODULE, "_sub",
! Py_BuildValue("OOOO", self, template, string, count)
! );
}
***************
*** 1749,1753 ****
/* delegate to Python code */
! return call("_subn", Py_BuildValue("OOOO", self, template, string, count));
}
--- 1772,1779 ----
/* delegate to Python code */
! return call(
! SRE_MODULE, "_subn",
! Py_BuildValue("OOOO", self, template, string, count)
! );
}
***************
*** 1763,1767 ****
/* delegate to Python code */
! return call("_split", Py_BuildValue("OOO", self, string, maxsplit));
}
--- 1789,1796 ----
/* delegate to Python code */
! return call(
! SRE_MODULE, "_split",
! Py_BuildValue("OOO", self, string, maxsplit)
! );
}
***************
*** 1873,1881 ****
pattern_copy(PatternObject* self, PyObject* args)
{
! #if USE_BUILTIN_COPY
PatternObject* copy;
int offset;
! /* work in progress */
copy = PyObject_NEW_VAR(PatternObject, &Pattern_Type, self->codesize);
--- 1902,1911 ----
pattern_copy(PatternObject* self, PyObject* args)
{
! #ifdef USE_BUILTIN_COPY
PatternObject* copy;
int offset;
! if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
! return NULL;
copy = PyObject_NEW_VAR(PatternObject, &Pattern_Type, self->codesize);
***************
*** 1902,1907 ****
--- 1932,1957 ----
pattern_deepcopy(PatternObject* self, PyObject* args)
{
+ #ifdef USE_BUILTIN_COPY
+ PatternObject* copy;
+
+ PyObject* memo;
+ if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
+ return NULL;
+
+ copy = (PatternObject*) pattern_copy(self, Py_None);
+ if (!copy)
+ return NULL;
+
+ if (!deepcopy(©->groupindex, memo) ||
+ !deepcopy(©->indexgroup, memo) ||
+ !deepcopy(©->pattern, memo)) {
+ Py_DECREF(copy);
+ return NULL;
+ }
+
+ #else
PyErr_SetString(PyExc_TypeError, "cannot deepcopy this pattern object");
return NULL;
+ #endif
}
***************
*** 2036,2040 ****
/* delegate to Python code */
return call(
! "_expand",
Py_BuildValue("OOO", self->pattern, self, template)
);
--- 2086,2090 ----
/* delegate to Python code */
return call(
! SRE_MODULE, "_expand",
Py_BuildValue("OOO", self->pattern, self, template)
);
***************
*** 2277,2285 ****
match_copy(MatchObject* self, PyObject* args)
{
! #if USE_BUILTIN_COPY
MatchObject* copy;
int slots, offset;
! /* works in progress */
slots = 2 * (self->pattern->groups+1);
--- 2327,2336 ----
match_copy(MatchObject* self, PyObject* args)
{
! #ifdef USE_BUILTIN_COPY
MatchObject* copy;
int slots, offset;
! if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
! return NULL;
slots = 2 * (self->pattern->groups+1);
***************
*** 2302,2306 ****
return (PyObject*) copy;
#else
! PyErr_SetString(PyExc_TypeError, "cannot deepcopy this match object");
return NULL;
#endif
--- 2353,2357 ----
return (PyObject*) copy;
#else
! PyErr_SetString(PyExc_TypeError, "cannot copy this match object");
return NULL;
#endif
***************
*** 2310,2315 ****
--- 2361,2386 ----
match_deepcopy(MatchObject* self, PyObject* args)
{
+ #ifdef USE_BUILTIN_COPY
+ MatchObject* copy;
+
+ PyObject* memo;
+ if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
+ return NULL;
+
+ copy = (MatchObject*) match_copy(self, Py_None);
+ if (!copy)
+ return NULL;
+
+ if (!deepcopy((PyObject**) ©->pattern, memo) ||
+ !deepcopy(©->string, memo) ||
+ !deepcopy(©->regs, memo)) {
+ Py_DECREF(copy);
+ return NULL;
+ }
+
+ #else
PyErr_SetString(PyExc_TypeError, "cannot deepcopy this match object");
return NULL;
+ #endif
}