[Python-checkins] cpython: Issue #25318: cleanup code _PyBytesWriter

victor.stinner python-checkins at python.org
Thu Oct 8 21:38:52 EDT 2015


https://hg.python.org/cpython/rev/c53dcf1d6967
changeset:   98611:c53dcf1d6967
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Fri Oct 09 03:38:24 2015 +0200
summary:
  Issue #25318: cleanup code _PyBytesWriter

Rename "stack buffer" to "small buffer".

Add also an assertion in _PyBytesWriter_GetPos().

files:
  Include/bytesobject.h |   4 +-
  Objects/bytesobject.c |  34 +++++++++++++++---------------
  2 files changed, 19 insertions(+), 19 deletions(-)


diff --git a/Include/bytesobject.h b/Include/bytesobject.h
--- a/Include/bytesobject.h
+++ b/Include/bytesobject.h
@@ -141,8 +141,8 @@
     int overallocate;
 
     /* Stack buffer */
-    int use_stack_buffer;
-    char stack_buffer[512];
+    int use_small_buffer;
+    char small_buffer[512];
 } _PyBytesWriter;
 
 /* Initialize a bytes writer
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -3754,9 +3754,9 @@
     writer->allocated = 0;
     writer->size = 0;
     writer->overallocate = 0;
-    writer->use_stack_buffer = 0;
+    writer->use_small_buffer = 0;
 #ifdef Py_DEBUG
-    memset(writer->stack_buffer, 0xCB, sizeof(writer->stack_buffer));
+    memset(writer->small_buffer, 0xCB, sizeof(writer->small_buffer));
 #endif
 }
 
@@ -3769,13 +3769,13 @@
 Py_LOCAL_INLINE(char*)
 _PyBytesWriter_AsString(_PyBytesWriter *writer)
 {
-    if (!writer->use_stack_buffer) {
+    if (!writer->use_small_buffer) {
         assert(writer->buffer != NULL);
         return PyBytes_AS_STRING(writer->buffer);
     }
     else {
         assert(writer->buffer == NULL);
-        return writer->stack_buffer;
+        return writer->small_buffer;
     }
 }
 
@@ -3785,6 +3785,7 @@
     char *start = _PyBytesWriter_AsString(writer);
     assert(str != NULL);
     assert(str >= start);
+    assert(str - start <= writer->allocated);
     return str - start;
 }
 
@@ -3794,7 +3795,7 @@
 #ifdef Py_DEBUG
     char *start, *end;
 
-    if (!writer->use_stack_buffer) {
+    if (!writer->use_small_buffer) {
         assert(writer->buffer != NULL);
         assert(PyBytes_CheckExact(writer->buffer));
         assert(Py_REFCNT(writer->buffer) == 1);
@@ -3846,7 +3847,7 @@
     }
 
     pos = _PyBytesWriter_GetPos(writer, str);
-    if (!writer->use_stack_buffer) {
+    if (!writer->use_small_buffer) {
         /* Note: Don't use a bytearray object because the conversion from
            byterray to bytes requires to copy all bytes. */
         if (_PyBytes_Resize(&writer->buffer, allocated)) {
@@ -3864,15 +3865,14 @@
 
         if (pos != 0) {
             Py_MEMCPY(PyBytes_AS_STRING(writer->buffer),
-                      writer->stack_buffer,
+                      writer->small_buffer,
                       pos);
         }
 
+        writer->use_small_buffer = 0;
 #ifdef Py_DEBUG
-        memset(writer->stack_buffer, 0xDB, sizeof(writer->stack_buffer));
+        memset(writer->small_buffer, 0xDB, sizeof(writer->small_buffer));
 #endif
-
-        writer->use_stack_buffer = 0;
     }
     writer->allocated = allocated;
 
@@ -3891,15 +3891,15 @@
     assert(writer->size == 0 && writer->buffer == NULL);
     assert(size >= 0);
 
-    writer->use_stack_buffer = 1;
+    writer->use_small_buffer = 1;
 #ifdef Py_DEBUG
     /* the last byte is reserved, it must be '\0' */
-    writer->stack_buffer[sizeof(writer->stack_buffer) - 1] = 0;
-    writer->allocated = sizeof(writer->stack_buffer) - 1;
+    writer->allocated = sizeof(writer->small_buffer) - 1;
+    writer->small_buffer[writer->allocated] = 0;
 #else
-    writer->allocated = sizeof(writer->stack_buffer);
+    writer->allocated = sizeof(writer->small_buffer);
 #endif
-    return _PyBytesWriter_Prepare(writer, writer->stack_buffer, size);
+    return _PyBytesWriter_Prepare(writer, writer->small_buffer, size);
 }
 
 PyObject *
@@ -3911,7 +3911,7 @@
     _PyBytesWriter_CheckConsistency(writer, str);
 
     pos = _PyBytesWriter_GetPos(writer, str);
-    if (!writer->use_stack_buffer) {
+    if (!writer->use_small_buffer) {
         if (pos != writer->allocated) {
             if (_PyBytes_Resize(&writer->buffer, pos)) {
                 assert(writer->buffer == NULL);
@@ -3923,7 +3923,7 @@
         writer->buffer = NULL;
     }
     else {
-        result = PyBytes_FromStringAndSize(writer->stack_buffer, pos);
+        result = PyBytes_FromStringAndSize(writer->small_buffer, pos);
     }
 
     return result;

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


More information about the Python-checkins mailing list