]> granicus.if.org Git - python/commitdiff
doubletounicode(), longtounicode():
authorTim Peters <tim.peters@gmail.com>
Thu, 16 Feb 2006 01:08:01 +0000 (01:08 +0000)
committerTim Peters <tim.peters@gmail.com>
Thu, 16 Feb 2006 01:08:01 +0000 (01:08 +0000)
Py_SAFE_DOWNCAST can evaluate its first argument multiple
times in a debug build.  This caused two distinct assert-
failures in test_unicode run under a debug build.  Rewrote
the code in trivial ways so that multiple evaluation of the
first argument doesn't hurt.

Objects/unicodeobject.c

index e09a1a804dc2041c735d080ff13993308bc90e08..1652b2fed0756bc91332533a5ef9cdabc98e3acb 100644 (file)
@@ -6601,17 +6601,21 @@ strtounicode(Py_UNICODE *buffer, const char *charbuffer)
 static int
 doubletounicode(Py_UNICODE *buffer, size_t len, const char *format, double x)
 {
+    Py_ssize_t result;
+
     PyOS_ascii_formatd((char *)buffer, len, format, x);
-    return Py_SAFE_DOWNCAST(strtounicode(buffer, (char *)buffer),
-                            Py_ssize_t, int);
+    result = strtounicode(buffer, (char *)buffer);
+    return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
 }
 
 static int
 longtounicode(Py_UNICODE *buffer, size_t len, const char *format, long x)
 {
+    Py_ssize_t result;
+
     PyOS_snprintf((char *)buffer, len, format, x);
-    return Py_SAFE_DOWNCAST(strtounicode(buffer, (char *)buffer),
-                            Py_ssize_t, int);
+    result = strtounicode(buffer, (char *)buffer);
+    return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
 }
 
 /* XXX To save some code duplication, formatfloat/long/int could have been