@@ -1540,21 +1540,24 @@ _get_interpolation_conversion(Parser *p, Token *debug, ResultTokenWithMetadata *
15401540}
15411541
15421542static PyObject *
1543- _strip_interpolation_expr (PyObject * exprstr )
1543+ _strip_interpolation_debug_expr (PyObject * exprstr )
15441544{
15451545 Py_ssize_t len = PyUnicode_GET_LENGTH (exprstr );
15461546
1547- for (Py_ssize_t i = len - 1 ; i >= 0 ; i -- ) {
1548- Py_UCS4 c = PyUnicode_READ_CHAR (exprstr , i );
1549- if (_PyUnicode_IsWhitespace (c ) || c == '=' ) {
1550- len -- ;
1551- }
1552- else {
1547+ /* Discard whitespace after the debug "=" but preserve whitespace before it. */
1548+ while (len > 0 ) {
1549+ Py_UCS4 c = PyUnicode_READ_CHAR (exprstr , len - 1 );
1550+ if (!_PyUnicode_IsWhitespace (c )) {
15531551 break ;
15541552 }
1553+ len -- ;
1554+ }
1555+ /* The debug marker may be absent from reconstructed lexer metadata. */
1556+ if (len == 0 || PyUnicode_READ_CHAR (exprstr , len - 1 ) != '=' ) {
1557+ return Py_NewRef (exprstr );
15551558 }
15561559
1557- return PyUnicode_Substring (exprstr , 0 , len );
1560+ return PyUnicode_Substring (exprstr , 0 , len - 1 );
15581561}
15591562
15601563expr_ty _PyPegen_interpolation (Parser * p , expr_ty expression , Token * debug , ResultTokenWithMetadata * conversion ,
@@ -1585,7 +1588,9 @@ expr_ty _PyPegen_interpolation(Parser *p, expr_ty expression, Token *debug, Resu
15851588 }
15861589
15871590 assert (exprstr != NULL );
1588- PyObject * final_exprstr = _strip_interpolation_expr (exprstr );
1591+ PyObject * final_exprstr = debug
1592+ ? _strip_interpolation_debug_expr (exprstr )
1593+ : Py_NewRef (exprstr );
15891594 if (!final_exprstr || _PyArena_AddPyObject (arena , final_exprstr ) < 0 ) {
15901595 Py_XDECREF (final_exprstr );
15911596 return NULL ;
0 commit comments