@@ -1177,33 +1177,36 @@ _PyPegen_check_tokenizer_errors(Parser *p) {
1177
1177
return 0 ;
1178
1178
}
1179
1179
1180
- const char * start ;
1181
- const char * end ;
1182
- int type ;
1183
1180
1184
1181
Token * current_token = p -> known_err_token != NULL ? p -> known_err_token : p -> tokens [p -> fill - 1 ];
1185
1182
Py_ssize_t current_err_line = current_token -> lineno ;
1186
1183
1187
- // Save the tokenizer buffers to restore them later in case we found nothing
1184
+ // Save the tokenizer state to restore them later in case we found nothing
1188
1185
struct tok_state saved_tok ;
1189
1186
memcpy (& saved_tok , p -> tok , sizeof (struct tok_state ));
1190
1187
1191
- while (1 ) {
1192
- type = PyTokenizer_Get (p -> tok , & start , & end );
1193
- if (type == ERRORTOKEN ) {
1194
- if (p -> tok -> level != 0 ) {
1195
- int error_lineno = p -> tok -> parenlinenostack [p -> tok -> level - 1 ];
1196
- if (current_err_line > error_lineno ) {
1197
- raise_unclosed_parentheses_error (p );
1198
- return -1 ;
1188
+ for (;;) {
1189
+ const char * start ;
1190
+ const char * end ;
1191
+ switch (PyTokenizer_Get (p -> tok , & start , & end )) {
1192
+ case ERRORTOKEN :
1193
+ if (p -> tok -> level != 0 ) {
1194
+ int error_lineno = p -> tok -> parenlinenostack [p -> tok -> level - 1 ];
1195
+ if (current_err_line > error_lineno ) {
1196
+ raise_unclosed_parentheses_error (p );
1197
+ return -1 ;
1198
+ }
1199
1199
}
1200
- }
1201
- break ;
1202
- }
1203
- if ( type == ENDMARKER ) {
1204
- break ;
1200
+ break ;
1201
+ case ENDMARKER :
1202
+ break ;
1203
+ default :
1204
+ continue ;
1205
1205
}
1206
+ break ;
1206
1207
}
1208
+
1209
+ // Restore the tokenizer state
1207
1210
memcpy (p -> tok , & saved_tok , sizeof (struct tok_state ));
1208
1211
return 0 ;
1209
1212
}
0 commit comments