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