[Python-checkins] CVS: python/dist/src/Modules _sre.c,2.13,2.14

Fredrik Lundh python-dev@python.org
2000年6月30日 00:05:50 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv21938/Modules
Modified Files:
	_sre.c 
Log Message:
- fixed default value handling in group/groupdict
- added test suite
Index: _sre.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/_sre.c,v
retrieving revision 2.13
retrieving revision 2.14
diff -C2 -r2.13 -r2.14
*** _sre.c	2000年06月30日 00:27:46	2.13
--- _sre.c	2000年06月30日 07:05:48	2.14
***************
*** 1567,1571 ****
 
 static PyObject*
! match_getslice_by_index(MatchObject* self, int index)
 {
 	if (index < 0 || index >= self->groups) {
--- 1567,1571 ----
 
 static PyObject*
! match_getslice_by_index(MatchObject* self, int index, PyObject* def)
 {
 	if (index < 0 || index >= self->groups) {
***************
*** 1579,1585 ****
 
 	if (self->string == Py_None || self->mark[index+index] < 0) {
! 		/* return None if the string or group is undefined */
! 		Py_INCREF(Py_None);
! 		return Py_None;
 	}
 
--- 1579,1585 ----
 
 	if (self->string == Py_None || self->mark[index+index] < 0) {
! 		/* return default value if the string or group is undefined */
! 		Py_INCREF(def);
! 		return def;
 	}
 
***************
*** 1606,1612 ****
 
 static PyObject*
! match_getslice(MatchObject* self, PyObject* index)
 {
! 	return match_getslice_by_index(self, match_getindex(self, index));
 }
 
--- 1606,1612 ----
 
 static PyObject*
! match_getslice(MatchObject* self, PyObject* index, PyObject* def)
 {
! 	return match_getslice_by_index(self, match_getindex(self, index), def);
 }
 
***************
*** 1621,1628 ****
 	switch (size) {
 	case 0:
! 		result = match_getslice(self, Py_False);
 		break;
 	case 1:
! 		result = match_getslice(self, PyTuple_GET_ITEM(args, 0));
 		break;
 	default:
--- 1621,1628 ----
 	switch (size) {
 	case 0:
! 		result = match_getslice(self, Py_False, Py_None);
 		break;
 	case 1:
! 		result = match_getslice(self, PyTuple_GET_ITEM(args, 0), Py_None);
 		break;
 	default:
***************
*** 1632,1636 ****
 			return NULL;
 		for (i = 0; i < size; i++) {
! 			PyObject* item = match_getslice(self, PyTuple_GET_ITEM(args, i));
 			if (!item) {
 				Py_DECREF(result);
--- 1632,1638 ----
 			return NULL;
 		for (i = 0; i < size; i++) {
! 			PyObject* item = match_getslice(
! self, PyTuple_GET_ITEM(args, i), Py_None
! );
 			if (!item) {
 				Py_DECREF(result);
***************
*** 1650,1654 ****
 	int index;
 
! /* FIXME: <fl> handle default value! */
 
 	result = PyTuple_New(self->groups-1);
--- 1652,1658 ----
 	int index;
 
! 	PyObject* def = Py_None;
! 	if (!PyArg_ParseTuple(args, "|O", &def))
! 		return NULL;
 
 	result = PyTuple_New(self->groups-1);
***************
*** 1658,1663 ****
 	for (index = 1; index < self->groups; index++) {
 		PyObject* item;
! 		/* FIXME: <fl> handle default! */
! 		item = match_getslice_by_index(self, index);
 		if (!item) {
 			Py_DECREF(result);
--- 1662,1666 ----
 	for (index = 1; index < self->groups; index++) {
 		PyObject* item;
! 		item = match_getslice_by_index(self, index, def);
 		if (!item) {
 			Py_DECREF(result);
***************
*** 1677,1691 ****
 	int index;
 
! /* FIXME: <fl> handle default value! */
 
 	result = PyDict_New();
! 	if (!result)
! 		return NULL;
! 	if (!self->pattern->groupindex)
 		return result;
 
 	keys = PyMapping_Keys(self->pattern->groupindex);
! 	if (!keys)
 		return NULL;
 
 	for (index = 0; index < PyList_GET_SIZE(keys); index++) {
--- 1680,1696 ----
 	int index;
 
! 	PyObject* def = Py_None;
! 	if (!PyArg_ParseTuple(args, "|O", &def))
! 		return NULL;
 
 	result = PyDict_New();
! 	if (!result || !self->pattern->groupindex)
 		return result;
 
 	keys = PyMapping_Keys(self->pattern->groupindex);
! 	if (!keys) {
! Py_DECREF(result);
 		return NULL;
+ }
 
 	for (index = 0; index < PyList_GET_SIZE(keys); index++) {
***************
*** 1698,1702 ****
 			return NULL;
 		}
! 		item = match_getslice(self, key);
 		if (!item) {
 			Py_DECREF(key);
--- 1703,1707 ----
 			return NULL;
 		}
! 		item = match_getslice(self, key, def);
 		if (!item) {
 			Py_DECREF(key);

AltStyle によって変換されたページ (->オリジナル) /