diff Objects/unicodeobject.c @ 25004:762dd09edb83 legacy-trunk

Code by Inyeol Lee, submitted to SF bug 595350, to implement the string/unicode method .replace() with a zero-lengt first argument. Inyeol contributed tests for this too.
author Guido van Rossum <guido@python.org>
date Fri, 23 Aug 2002 18:21:28 +0000
parents 0d5d8e1cdc22
children 12bb6f0c60f8
line wrap: on
line diff
--- a/Objects/unicodeobject.c	Fri Aug 23 18:19:30 2002 +0000
+++ b/Objects/unicodeobject.c	Fri Aug 23 18:21:28 2002 +0000
@@ -3494,11 +3494,6 @@
 {
     PyUnicodeObject *u;
 
-    if (str1->length == 0) {
-	PyErr_SetString(PyExc_ValueError, "empty pattern string");
-	return NULL;
-    }
-
     if (maxcount < 0)
 	maxcount = INT_MAX;
 
@@ -3549,19 +3544,30 @@
             if (u) {
                 i = 0;
                 p = u->str;
-                while (i <= self->length - str1->length)
-                    if (Py_UNICODE_MATCH(self, i, str1)) {
-                        /* replace string segment */
+                if (str1->length > 0) {
+                    while (i <= self->length - str1->length)
+                        if (Py_UNICODE_MATCH(self, i, str1)) {
+                            /* replace string segment */
+                            Py_UNICODE_COPY(p, str2->str, str2->length);
+                            p += str2->length;
+                            i += str1->length;
+                            if (--n <= 0) {
+                                /* copy remaining part */
+                                Py_UNICODE_COPY(p, self->str+i, self->length-i);
+                                break;
+                            }
+                        } else
+                            *p++ = self->str[i++];
+                } else {
+                    while (n > 0) {
                         Py_UNICODE_COPY(p, str2->str, str2->length);
                         p += str2->length;
-                        i += str1->length;
-                        if (--n <= 0) {
-                            /* copy remaining part */
-                            Py_UNICODE_COPY(p, self->str+i, self->length-i);
+                        if (--n <= 0)
                             break;
-                        }
-                    } else
                         *p++ = self->str[i++];
+                    }
+                    Py_UNICODE_COPY(p, self->str+i, self->length-i);
+                }
             }
         }
     }