[Python-checkins] cpython: Issue #14993: Use standard "unsigned char" instead of a unsigned char bitfield

victor.stinner python-checkins at python.org
Mon Jun 4 22:54:11 CEST 2012


http://hg.python.org/cpython/rev/09736ae1c314
changeset:   77351:09736ae1c314
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Mon Jun 04 22:52:12 2012 +0200
summary:
  Issue #14993: Use standard "unsigned char" instead of a unsigned char bitfield

files:
  Include/unicodeobject.h            |  10 +++-----
  Objects/stringlib/unicode_format.h |   2 +-
  Objects/unicodeobject.c            |  20 +++++++++---------
  3 files changed, 15 insertions(+), 17 deletions(-)


diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -901,12 +901,10 @@
     /* minimum length of the buffer when overallocation is enabled,
        see _PyUnicodeWriter_Init() */
     Py_ssize_t min_length;
-    struct {
-        unsigned char overallocate:1;
-        /* If readonly is 1, buffer is a shared string (cannot be modified)
-           and size is set to 0. */
-        unsigned char readonly:1;
-    } flags;
+    unsigned char overallocate;
+    /* If readonly is 1, buffer is a shared string (cannot be modified)
+       and size is set to 0. */
+    unsigned char readonly;
 } _PyUnicodeWriter ;
 
 /* Initialize a Unicode writer.
diff --git a/Objects/stringlib/unicode_format.h b/Objects/stringlib/unicode_format.h
--- a/Objects/stringlib/unicode_format.h
+++ b/Objects/stringlib/unicode_format.h
@@ -898,7 +898,7 @@
 
         if (field_present) {
             if (iter.str.start == iter.str.end)
-                writer->flags.overallocate = 0;
+                writer->overallocate = 0;
             if (!output_markup(&field_name, &format_spec,
                                format_spec_needs_expanding, conversion, writer,
                                args, kwargs, recursion_depth, auto_number))
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -12808,7 +12808,7 @@
     writer->kind = 5;    /* invalid kind */
 #endif
     writer->min_length = Py_MAX(min_length, 100);
-    writer->flags.overallocate = (min_length > 0);
+    writer->overallocate = (min_length > 0);
 }
 
 int
@@ -12827,7 +12827,7 @@
     newlen = writer->pos + length;
 
     if (writer->buffer == NULL) {
-        if (writer->flags.overallocate) {
+        if (writer->overallocate) {
             /* overallocate 25% to limit the number of resize */
             if (newlen <= (PY_SSIZE_T_MAX - newlen / 4))
                 newlen += newlen / 4;
@@ -12842,7 +12842,7 @@
     }
 
     if (newlen > writer->size) {
-        if (writer->flags.overallocate) {
+        if (writer->overallocate) {
             /* overallocate 25% to limit the number of resize */
             if (newlen <= (PY_SSIZE_T_MAX - newlen / 4))
                 newlen += newlen / 4;
@@ -12850,7 +12850,7 @@
                 newlen = writer->min_length;
         }
 
-        if (maxchar > writer->maxchar || writer->flags.readonly) {
+        if (maxchar > writer->maxchar || writer->readonly) {
             /* resize + widen */
             newbuffer = PyUnicode_New(newlen, maxchar);
             if (newbuffer == NULL)
@@ -12858,7 +12858,7 @@
             _PyUnicode_FastCopyCharacters(newbuffer, 0,
                                           writer->buffer, 0, writer->pos);
             Py_DECREF(writer->buffer);
-            writer->flags.readonly = 0;
+            writer->readonly = 0;
         }
         else {
             newbuffer = resize_compact(writer->buffer, newlen);
@@ -12869,7 +12869,7 @@
         _PyUnicodeWriter_Update(writer);
     }
     else if (maxchar > writer->maxchar) {
-        assert(!writer->flags.readonly);
+        assert(!writer->readonly);
         newbuffer = PyUnicode_New(writer->size, maxchar);
         if (newbuffer == NULL)
             return -1;
@@ -12895,11 +12895,11 @@
         return 0;
     maxchar = PyUnicode_MAX_CHAR_VALUE(str);
     if (maxchar > writer->maxchar || len > writer->size - writer->pos) {
-        if (writer->buffer == NULL && !writer->flags.overallocate) {
+        if (writer->buffer == NULL && !writer->overallocate) {
             Py_INCREF(str);
             writer->buffer = str;
             _PyUnicodeWriter_Update(writer);
-            writer->flags.readonly = 1;
+            writer->readonly = 1;
             writer->size = 0;
             writer->pos += len;
             return 0;
@@ -12921,7 +12921,7 @@
         Py_INCREF(unicode_empty);
         return unicode_empty;
     }
-    if (writer->flags.readonly) {
+    if (writer->readonly) {
         assert(PyUnicode_GET_LENGTH(writer->buffer) == writer->pos);
         return writer->buffer;
     }
@@ -13638,7 +13638,7 @@
                 goto onError;
             }
             if (fmtcnt == 0)
-                writer.flags.overallocate = 0;
+                writer.overallocate = 0;
 
             if (c == '%') {
                 if (_PyUnicodeWriter_Prepare(&writer, 1, '%') == -1)

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


More information about the Python-checkins mailing list