[Python-checkins] cpython: 1) Remove claim of an input invariant that is only true for static mpd_t.

stefan.krah python-checkins at python.org
Tue Apr 10 23:16:58 CEST 2012


http://hg.python.org/cpython/rev/bcdd7246d6b3
changeset:   76231:bcdd7246d6b3
user:        Stefan Krah <skrah at bytereef.org>
date:        Tue Apr 10 23:11:54 2012 +0200
summary:
  1) Remove claim of an input invariant that is only true for static mpd_t.
   Resizing is used _inside_ libmpdec functions, and it is permitted to
   change x->alloc several times while setting x->len at the end of the
   function. Therefore, for dynamic mpd_t x->alloc can _temporarily_ drop
   below x->len. Of course the final result always has x->len <= x->alloc.

   For static mpd_t this cannot happen, since resizing to a smaller
   coefficient is a no-op.

2) Remove micro optimization in mpd_switch_to_dyn(): Previously only the
   valid initialized part of the existing coefficient up to x->len was
   copied to the new dynamic memory area. Now copying does the same as
   realloc() and the entire old memory area is copied.

   The rationale for this change is that it is no longer needed to memorize
   the explanation given in 1).

files:
  Modules/_decimal/libmpdec/memory.c    |  2 +-
  Modules/_decimal/libmpdec/mpdecimal.c |  4 +---
  2 files changed, 2 insertions(+), 4 deletions(-)


diff --git a/Modules/_decimal/libmpdec/memory.c b/Modules/_decimal/libmpdec/memory.c
--- a/Modules/_decimal/libmpdec/memory.c
+++ b/Modules/_decimal/libmpdec/memory.c
@@ -222,7 +222,7 @@
         return 0;
     }
 
-    memcpy(result->data, p, result->len * (sizeof *result->data));
+    memcpy(result->data, p, result->alloc * (sizeof *result->data));
     result->alloc = nwords;
     mpd_set_dynamic_data(result);
     return 1;
diff --git a/Modules/_decimal/libmpdec/mpdecimal.c b/Modules/_decimal/libmpdec/mpdecimal.c
--- a/Modules/_decimal/libmpdec/mpdecimal.c
+++ b/Modules/_decimal/libmpdec/mpdecimal.c
@@ -454,9 +454,7 @@
  * Resize the coefficient. Existing data up to 'nwords' is left untouched.
  * Return 1 on success, 0 otherwise.
  *
- * Input invariants:
- *     1) MPD_MINALLOC <= result->alloc.
- *     2) 0 <= result->len <= result->alloc.
+ * Input invariant: MPD_MINALLOC <= result->alloc.
  *
  * Case nwords == result->alloc:
  *     'result' is unchanged. Return 1.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list