@@ -206,7 +206,6 @@ initialize_token(Parser *p, Token *parser_token, struct token *new_token, int to
206206 parser_token -> metadata = NULL ;
207207 if (new_token -> metadata != NULL ) {
208208 if (_PyArena_AddPyObject (p -> arena , new_token -> metadata ) < 0 ) {
209- Py_DECREF (new_token -> metadata );
210209 return -1 ;
211210 }
212211 parser_token -> metadata = new_token -> metadata ;
@@ -260,10 +259,10 @@ _PyPegen_fill_token(Parser *p)
260259{
261260 struct token new_token ;
262261 _PyToken_Init (& new_token );
263- int type = _PyTokenizer_Get (p -> tok , & new_token );
262+ _PyTokenizer_Get (p -> tok , & new_token );
264263
265264 // Record and skip '# type: ignore' comments
266- while (type == TYPE_IGNORE ) {
265+ while (new_token . type == TYPE_IGNORE ) {
267266 Py_ssize_t len ;
268267 const char * text = _PyToken_TextView (p -> tok , & new_token , & len );
269268 char * tag = PyMem_Malloc ((size_t )len + 1 );
@@ -278,9 +277,11 @@ _PyPegen_fill_token(Parser *p)
278277 PyErr_NoMemory ();
279278 goto error ;
280279 }
281- type = _PyTokenizer_Get (p -> tok , & new_token );
280+ _PyTokenizer_Get (p -> tok , & new_token );
282281 }
283282
283+ int type = new_token .type ;
284+
284285 // If we have reached the end and we are in single input mode we need to insert a newline and reset the parsing
285286 if (p -> start_rule == Py_single_input && type == ENDMARKER && p -> parsing_started ) {
286287 type = NEWLINE ; /* Add an extra newline */
@@ -300,7 +301,9 @@ _PyPegen_fill_token(Parser *p)
300301 }
301302
302303 Token * t = p -> tokens [p -> fill ];
303- return initialize_token (p , t , & new_token , type );
304+ int result = initialize_token (p , t , & new_token , type );
305+ _PyToken_Free (& new_token );
306+ return result ;
304307error :
305308 _PyToken_Free (& new_token );
306309 return -1 ;
0 commit comments