@@ -1237,45 +1237,41 @@ scanner_filter_arguments (parser_context_t *context_p, /**< context */
1237
1237
1238
1238
JERRY_ASSERT (SCANNER_LITERAL_POOL_MAY_HAVE_ARGUMENTS (literal_pool_p -> status_flags ));
1239
1239
1240
- if (can_eval )
1240
+ if (JERRY_UNLIKELY ( can_eval ) )
1241
1241
{
1242
1242
if (prev_literal_pool_p != NULL )
1243
1243
{
1244
1244
prev_literal_pool_p -> status_flags |= SCANNER_LITERAL_POOL_CAN_EVAL ;
1245
1245
}
1246
1246
1247
- if (has_arguments )
1248
- {
1249
- /* Force the lexically stored arguments object creation */
1250
- literal_pool_p -> status_flags |= (SCANNER_LITERAL_POOL_ARGUMENTS_IN_ARGS | SCANNER_LITERAL_POOL_NO_ARGUMENTS );
1251
- }
1247
+ literal_pool_p -> status_flags &= (uint16_t ) ~SCANNER_LITERAL_POOL_CAN_EVAL ;
1252
1248
}
1253
-
1254
- literal_pool_p -> status_flags &= (uint16_t ) ~SCANNER_LITERAL_POOL_CAN_EVAL ;
1255
-
1256
- parser_list_iterator_init (& literal_pool_p -> literal_pool , & literal_iterator );
1257
-
1258
- while (true)
1249
+ else
1259
1250
{
1260
- literal_p = ( lexer_lit_location_t * ) parser_list_iterator_next ( & literal_iterator );
1251
+ parser_list_iterator_init ( & literal_pool_p -> literal_pool , & literal_iterator );
1261
1252
1262
- if ( literal_p == NULL )
1253
+ while (true )
1263
1254
{
1264
- return ;
1265
- }
1255
+ literal_p = (lexer_lit_location_t * ) parser_list_iterator_next (& literal_iterator );
1266
1256
1267
- if ( can_eval || (literal_p -> type & SCANNER_LITERAL_EARLY_CREATE ) )
1268
- {
1269
- literal_p -> type |= SCANNER_LITERAL_NO_REG | SCANNER_LITERAL_EARLY_CREATE ;
1270
- }
1257
+ if (literal_p == NULL )
1258
+ {
1259
+ return ;
1260
+ }
1271
1261
1272
- uint8_t type = literal_p -> type ;
1273
- const uint8_t mask =
1274
- (SCANNER_LITERAL_IS_ARG | SCANNER_LITERAL_IS_DESTRUCTURED_ARG | SCANNER_LITERAL_IS_ARROW_DESTRUCTURED_ARG );
1262
+ if (can_eval || (literal_p -> type & SCANNER_LITERAL_EARLY_CREATE ))
1263
+ {
1264
+ literal_p -> type |= SCANNER_LITERAL_NO_REG | SCANNER_LITERAL_EARLY_CREATE ;
1265
+ }
1275
1266
1276
- if ((type & mask ) != SCANNER_LITERAL_IS_ARG )
1277
- {
1278
- break ;
1267
+ uint8_t type = literal_p -> type ;
1268
+ const uint8_t mask =
1269
+ (SCANNER_LITERAL_IS_ARG | SCANNER_LITERAL_IS_DESTRUCTURED_ARG | SCANNER_LITERAL_IS_ARROW_DESTRUCTURED_ARG );
1270
+
1271
+ if ((type & mask ) != SCANNER_LITERAL_IS_ARG )
1272
+ {
1273
+ break ;
1274
+ }
1279
1275
}
1280
1276
}
1281
1277
@@ -1309,10 +1305,7 @@ scanner_filter_arguments (parser_context_t *context_p, /**< context */
1309
1305
1310
1306
if (has_arguments && scanner_literal_is_arguments (literal_p ))
1311
1307
{
1312
- /* 'arguments' function argument existence should prevent the arguments object construction */
1313
- new_literal_pool_p -> status_flags =
1314
- (uint16_t ) (new_literal_pool_p -> status_flags
1315
- & ~(SCANNER_LITERAL_POOL_ARGUMENTS_IN_ARGS | SCANNER_LITERAL_POOL_NO_ARGUMENTS ));
1308
+ has_arguments = false;
1316
1309
}
1317
1310
1318
1311
if (type & (SCANNER_LITERAL_IS_DESTRUCTURED_ARG | SCANNER_LITERAL_IS_ARROW_DESTRUCTURED_ARG ))
@@ -1371,6 +1364,12 @@ scanner_filter_arguments (parser_context_t *context_p, /**< context */
1371
1364
}
1372
1365
}
1373
1366
1367
+ if (has_arguments )
1368
+ {
1369
+ /* Force the lexically stored arguments object creation */
1370
+ new_literal_pool_p -> status_flags |= (SCANNER_LITERAL_POOL_ARGUMENTS_IN_ARGS | SCANNER_LITERAL_POOL_NO_ARGUMENTS );
1371
+ }
1372
+
1374
1373
new_literal_pool_p -> prev_p = prev_literal_pool_p ;
1375
1374
1376
1375
parser_list_free (& literal_pool_p -> literal_pool );
0 commit comments