@@ -1237,6 +1237,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETV
1237
1237
ret = 0 ? EX_VAR(opline->result.var) : &retval;
1238
1238
ZVAL_NULL(ret);
1239
1239
1240
+ /* TODO: Don't use the ICALL specialization if named params are used? */
1240
1241
if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF)) {
1241
1242
if (zend_handle_icall_undef_args(call) == FAILURE) {
1242
1243
goto do_icall_cleanup;
@@ -1260,6 +1261,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETV
1260
1261
do_icall_cleanup:
1261
1262
EG(current_execute_data) = execute_data;
1262
1263
zend_vm_stack_free_args(call);
1264
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1265
+ zend_array_destroy(call->extra_named_params);
1266
+ }
1263
1267
zend_vm_stack_free_call_frame(call);
1264
1268
1265
1269
if (!0) {
@@ -1296,6 +1300,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETV
1296
1300
ret = 1 ? EX_VAR(opline->result.var) : &retval;
1297
1301
ZVAL_NULL(ret);
1298
1302
1303
+ /* TODO: Don't use the ICALL specialization if named params are used? */
1299
1304
if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF)) {
1300
1305
if (zend_handle_icall_undef_args(call) == FAILURE) {
1301
1306
goto do_icall_cleanup;
@@ -1319,6 +1324,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETV
1319
1324
do_icall_cleanup:
1320
1325
EG(current_execute_data) = execute_data;
1321
1326
zend_vm_stack_free_args(call);
1327
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1328
+ zend_array_destroy(call->extra_named_params);
1329
+ }
1322
1330
zend_vm_stack_free_call_frame(call);
1323
1331
1324
1332
if (!1) {
@@ -1453,6 +1461,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S
1453
1461
1454
1462
fcall_by_name_end:
1455
1463
zend_vm_stack_free_args(call);
1464
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1465
+ zend_array_destroy(call->extra_named_params);
1466
+ }
1456
1467
zend_vm_stack_free_call_frame(call);
1457
1468
1458
1469
if (!0) {
@@ -1541,6 +1552,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S
1541
1552
1542
1553
fcall_by_name_end:
1543
1554
zend_vm_stack_free_args(call);
1555
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1556
+ zend_array_destroy(call->extra_named_params);
1557
+ }
1544
1558
zend_vm_stack_free_call_frame(call);
1545
1559
1546
1560
if (!1) {
@@ -2572,7 +2586,6 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try
2572
2586
{
2573
2587
/* May be NULL during generator closing (only finally blocks are executed) */
2574
2588
zend_object *ex = EG(exception);
2575
- zend_bool is_unwind_exit = ex && zend_is_unwind_exit(ex);
2576
2589
2577
2590
/* Walk try/catch/finally structures upwards, performing the necessary actions */
2578
2591
for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
@@ -2585,7 +2598,7 @@ static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try
2585
2598
ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
2586
2599
2587
2600
} else if (op_num < try_catch->finally_op) {
2588
- if (is_unwind_exit ) {
2601
+ if (ex && zend_is_unwind_exit(ex) ) {
2589
2602
/* Don't execute finally blocks on exit (for now) */
2590
2603
continue;
2591
2604
}
0 commit comments