@@ -180,14 +180,13 @@ _get_col_offsets(tokenizeriterobject *it, const struct token *token,
180180 Py_ssize_t * col_offset , Py_ssize_t * end_col_offset )
181181{
182182 _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED (it );
183- const char * token_start = view -> text ;
184- const char * token_end = token_start == NULL
185- ? NULL : token_start + view -> length ;
183+ _PyTok_Off token_start = token -> span .start ;
184+ _PyTok_Off token_end = token -> span .end ;
186185 Py_ssize_t lineno = token -> start_loc .lineno ;
187186 Py_ssize_t end_lineno = token -> end_loc .lineno ;
188187 Py_ssize_t byte_offset = -1 ;
189- if (token_start != NULL && token_start >= view -> line ) {
190- byte_offset = token_start - view -> line ;
188+ if (token_start >= view -> line_span . start ) {
189+ byte_offset = token_start - view -> line_span . start ;
191190 if (line_changed ) {
192191 * col_offset = _PyPegen_byte_offset_to_character_offset_line (line , 0 , byte_offset );
193192 if (* col_offset < 0 ) {
@@ -200,8 +199,8 @@ _get_col_offsets(tokenizeriterobject *it, const struct token *token,
200199 }
201200 }
202201
203- if (token_end != NULL && token_end >= view -> end_line ) {
204- Py_ssize_t end_byte_offset = token_end - view -> end_line ;
202+ if (token_end >= view -> end_line_start ) {
203+ Py_ssize_t end_byte_offset = token_end - view -> end_line_start ;
205204 if (lineno == end_lineno ) {
206205 // Avoid rescanning the prefix of a very long line.
207206 Py_ssize_t token_col_offset = _PyPegen_byte_offset_to_character_offset_line (line , byte_offset , end_byte_offset );
@@ -213,7 +212,8 @@ _get_col_offsets(tokenizeriterobject *it, const struct token *token,
213212 }
214213 else {
215214 * end_col_offset = _PyPegen_byte_offset_to_character_offset_line (
216- line , view -> end_line - view -> line , token_end - view -> line );
215+ line , view -> end_line_start - view -> line_span .start ,
216+ token_end - view -> line_span .start );
217217 if (* end_col_offset < 0 ) {
218218 return -1 ;
219219 }
@@ -251,15 +251,7 @@ tokenizeriter_next(PyObject *op)
251251 }
252252 _PyToken_View view ;
253253 _PyToken_GetView (it -> tok , & token , & view );
254- const char * token_start = view .text ;
255- PyObject * str ;
256- if (token .span .start < 0 ) {
257- assert (token .span .start == -1 && token .span .end == -1 );
258- str = Py_GetConstant (Py_CONSTANT_EMPTY_STR );
259- }
260- else {
261- str = PyUnicode_FromStringAndSize (token_start , view .length );
262- }
254+ PyObject * str = PyUnicode_FromStringAndSize (view .text , view .length );
263255 if (str == NULL ) {
264256 goto exit ;
265257 }
@@ -271,7 +263,7 @@ tokenizeriter_next(PyObject *op)
271263 if (it -> extra_tokens && is_trailing_token ) {
272264 line = Py_GetConstant (Py_CONSTANT_EMPTY_STR );
273265 } else {
274- Py_ssize_t size = view .line_length ;
266+ Py_ssize_t size = view .line_span . end - view . line_span . start ;
275267 if (size >= 1 && view .implicit_newline ) {
276268 size -= 1 ;
277269 }
@@ -307,8 +299,7 @@ tokenizeriter_next(PyObject *op)
307299 else if (type == NEWLINE ) {
308300 if (!view .implicit_newline ) {
309301 Py_DECREF (str );
310- assert (token_start != NULL );
311- if (token_start [0 ] == '\r' ) {
302+ if (view .text [0 ] == '\r' ) {
312303 str = PyUnicode_FromString ("\r\n" );
313304 } else {
314305 str = PyUnicode_FromString ("\n" );
0 commit comments