@@ -2612,31 +2612,26 @@ save_picklebuffer(PickleState *st, PicklerObject *self, PyObject *obj)
26122612static PyObject *
26132613raw_unicode_escape (PyObject * obj )
26142614{
2615- char * p ;
2616- Py_ssize_t i , size ;
2617- const void * data ;
2618- int kind ;
2619- _PyBytesWriter writer ;
2615+ Py_ssize_t size = PyUnicode_GET_LENGTH (obj );
2616+ const void * data = PyUnicode_DATA (obj );
2617+ int kind = PyUnicode_KIND (obj );
26202618
2621- _PyBytesWriter_Init (& writer );
2622-
2623- size = PyUnicode_GET_LENGTH (obj );
2624- data = PyUnicode_DATA (obj );
2625- kind = PyUnicode_KIND (obj );
2626-
2627- p = _PyBytesWriter_Alloc (& writer , size );
2628- if (p == NULL )
2629- goto error ;
2630- writer .overallocate = 1 ;
2619+ Py_ssize_t alloc = size ;
2620+ PyBytesWriter * writer = PyBytesWriter_Create (alloc );
2621+ if (writer == NULL ) {
2622+ return NULL ;
2623+ }
2624+ char * p = PyBytesWriter_GetData (writer );
26312625
2632- for (i = 0 ; i < size ; i ++ ) {
2626+ for (Py_ssize_t i = 0 ; i < size ; i ++ ) {
26332627 Py_UCS4 ch = PyUnicode_READ (kind , data , i );
26342628 /* Map 32-bit characters to '\Uxxxxxxxx' */
26352629 if (ch >= 0x10000 ) {
26362630 /* -1: subtract 1 preallocated byte */
2637- p = _PyBytesWriter_Prepare ( & writer , p , 10 - 1 );
2638- if (p == NULL )
2631+ p = PyBytesWriter_GrowAndUpdatePointer ( writer , 10 - 1 , p );
2632+ if (p == NULL ) {
26392633 goto error ;
2634+ }
26402635
26412636 * p ++ = '\\' ;
26422637 * p ++ = 'U' ;
@@ -2655,9 +2650,10 @@ raw_unicode_escape(PyObject *obj)
26552650 ch == 0x1a )
26562651 {
26572652 /* -1: subtract 1 preallocated byte */
2658- p = _PyBytesWriter_Prepare ( & writer , p , 6 - 1 );
2659- if (p == NULL )
2653+ p = PyBytesWriter_GrowAndUpdatePointer ( writer , 6 - 1 , p );
2654+ if (p == NULL ) {
26602655 goto error ;
2656+ }
26612657
26622658 * p ++ = '\\' ;
26632659 * p ++ = 'u' ;
@@ -2671,10 +2667,10 @@ raw_unicode_escape(PyObject *obj)
26712667 * p ++ = (char ) ch ;
26722668 }
26732669
2674- return _PyBytesWriter_Finish ( & writer , p );
2670+ return PyBytesWriter_FinishWithPointer ( writer , p );
26752671
26762672error :
2677- _PyBytesWriter_Dealloc ( & writer );
2673+ PyBytesWriter_Discard ( writer );
26782674 return NULL ;
26792675}
26802676
0 commit comments