@@ -353,6 +353,13 @@ _build_rval_index_tuple(PyObject *rval, Py_ssize_t idx) {
353353 return tpl ;
354354}
355355
356+ static inline int
357+ _PyUnicodeWriter_IsEmpty (PyUnicodeWriter * writer_pub )
358+ {
359+ _PyUnicodeWriter * writer = (_PyUnicodeWriter * )writer_pub ;
360+ return (writer -> pos == 0 );
361+ }
362+
356363static PyObject *
357364scanstring_unicode (PyObject * pystr , Py_ssize_t end , int strict , Py_ssize_t * next_end_ptr )
358365{
@@ -371,9 +378,10 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
371378 const void * buf ;
372379 int kind ;
373380
374- _PyUnicodeWriter writer ;
375- _PyUnicodeWriter_Init (& writer );
376- writer .overallocate = 1 ;
381+ PyUnicodeWriter * writer = PyUnicodeWriter_Create (0 );
382+ if (writer == NULL ) {
383+ goto bail ;
384+ }
377385
378386 len = PyUnicode_GET_LENGTH (pystr );
379387 buf = PyUnicode_DATA (pystr );
@@ -404,7 +412,7 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
404412
405413 if (c == '"' ) {
406414 // Fast path for simple case.
407- if (writer . buffer == NULL ) {
415+ if (_PyUnicodeWriter_IsEmpty ( writer ) ) {
408416 PyObject * ret = PyUnicode_Substring (pystr , end , next );
409417 if (ret == NULL ) {
410418 goto bail ;
@@ -420,7 +428,7 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
420428
421429 /* Pick up this chunk if it's not zero length */
422430 if (next != end ) {
423- if (_PyUnicodeWriter_WriteSubstring ( & writer , pystr , end , next ) < 0 ) {
431+ if (PyUnicodeWriter_WriteSubstring ( writer , pystr , end , next ) < 0 ) {
424432 goto bail ;
425433 }
426434 }
@@ -511,18 +519,18 @@ scanstring_unicode(PyObject *pystr, Py_ssize_t end, int strict, Py_ssize_t *next
511519 end -= 6 ;
512520 }
513521 }
514- if (_PyUnicodeWriter_WriteChar ( & writer , c ) < 0 ) {
522+ if (PyUnicodeWriter_WriteChar ( writer , c ) < 0 ) {
515523 goto bail ;
516524 }
517525 }
518526
519- rval = _PyUnicodeWriter_Finish ( & writer );
527+ rval = PyUnicodeWriter_Finish ( writer );
520528 * next_end_ptr = end ;
521529 return rval ;
522530
523531bail :
524532 * next_end_ptr = -1 ;
525- _PyUnicodeWriter_Dealloc ( & writer );
533+ PyUnicodeWriter_Discard ( writer );
526534 return NULL ;
527535}
528536
0 commit comments