@@ -85,14 +85,17 @@ tokenizeriter_new_impl(PyTypeObject *type, PyObject *readline,
85
85
}
86
86
87
87
static int
88
- _tokenizer_error (struct tok_state * tok )
88
+ _tokenizer_error (tokenizeriterobject * it )
89
89
{
90
+ _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED (it );
91
+
90
92
if (PyErr_Occurred ()) {
91
93
return -1 ;
92
94
}
93
95
94
96
const char * msg = NULL ;
95
97
PyObject * errtype = PyExc_SyntaxError ;
98
+ struct tok_state * tok = it -> tok ;
96
99
switch (tok -> done ) {
97
100
case E_TOKEN :
98
101
msg = "invalid token" ;
@@ -182,7 +185,7 @@ static PyObject *
182
185
_get_current_line (tokenizeriterobject * it , const char * line_start , Py_ssize_t size )
183
186
{
184
187
_Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED (it );
185
- PyObject * line ;
188
+ PyObject * line = it -> last_line ;
186
189
if (it -> tok -> lineno != it -> last_lineno ) {
187
190
// Line has changed since last token, so we fetch the new line and cache it
188
191
// in the iter object.
@@ -193,10 +196,6 @@ _get_current_line(tokenizeriterobject *it, const char *line_start, Py_ssize_t si
193
196
it -> byte_col_offset_diff = 0 ;
194
197
}
195
198
}
196
- else {
197
- // Line hasn't changed so we reuse the cached one.
198
- line = it -> last_line ;
199
- }
200
199
return line ;
201
200
}
202
201
@@ -235,30 +234,23 @@ static PyObject *
235
234
tokenizeriter_next (tokenizeriterobject * it )
236
235
{
237
236
PyObject * result = NULL ;
238
- struct token token ;
239
- _PyToken_Init (& token );
240
237
241
- int type ;
242
238
Py_BEGIN_CRITICAL_SECTION (it );
243
- type = _PyTokenizer_Get (it -> tok , & token );
244
- Py_END_CRITICAL_SECTION ();
245
239
240
+ struct token token ;
241
+ _PyToken_Init (& token );
242
+
243
+ int type = _PyTokenizer_Get (it -> tok , & token );
246
244
if (type == ERRORTOKEN ) {
247
245
if (!PyErr_Occurred ()) {
248
- _tokenizer_error (it -> tok );
246
+ _tokenizer_error (it );
249
247
assert (PyErr_Occurred ());
250
248
}
251
249
goto exit ;
252
250
}
253
251
if (it -> done || type == ERRORTOKEN ) {
254
252
PyErr_SetString (PyExc_StopIteration , "EOF" );
255
-
256
- #ifdef Py_GIL_DISABLED
257
- _Py_atomic_store_int (& it -> done , 1 );
258
- #else
259
253
it -> done = 1 ;
260
- #endif
261
-
262
254
goto exit ;
263
255
}
264
256
PyObject * str = NULL ;
@@ -287,9 +279,7 @@ tokenizeriter_next(tokenizeriterobject *it)
287
279
size -= 1 ;
288
280
}
289
281
290
- Py_BEGIN_CRITICAL_SECTION (it );
291
282
line = _get_current_line (it , line_start , size );
292
- Py_END_CRITICAL_SECTION ();
293
283
}
294
284
if (line == NULL ) {
295
285
Py_DECREF (str );
@@ -300,10 +290,7 @@ tokenizeriter_next(tokenizeriterobject *it)
300
290
Py_ssize_t end_lineno = it -> tok -> lineno ;
301
291
Py_ssize_t col_offset = -1 ;
302
292
Py_ssize_t end_col_offset = -1 ;
303
-
304
- Py_BEGIN_CRITICAL_SECTION (it );
305
293
_get_col_offsets (it , token , line_start , line , lineno , end_lineno , & col_offset , & end_col_offset );
306
- Py_END_CRITICAL_SECTION ();
307
294
308
295
if (it -> tok -> tok_extra_tokens ) {
309
296
if (is_trailing_token ) {
@@ -343,12 +330,10 @@ tokenizeriter_next(tokenizeriterobject *it)
343
330
exit :
344
331
_PyToken_Free (& token );
345
332
if (type == ENDMARKER ) {
346
- #ifdef Py_GIL_DISABLED
347
- _Py_atomic_store_int (& it -> done , 1 );
348
- #else
349
333
it -> done = 1 ;
350
- #endif
351
334
}
335
+
336
+ Py_END_CRITICAL_SECTION ();
352
337
return result ;
353
338
}
354
339
0 commit comments