@@ -249,8 +249,8 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
249
249
case ZEND_FETCH_STATIC_PROP_FUNC_ARG :
250
250
case ZEND_FETCH_OBJ_FUNC_ARG :
251
251
case ZEND_FETCH_DIM_FUNC_ARG :
252
- if (call_stack [call - 1 ].func
253
- && call_stack [call - 1 ]. func_arg_num != ( uint32_t ) -1 ) {
252
+ if (call_stack [call - 1 ].func_arg_num != ( uint32_t ) -1
253
+ && has_known_send_mode ( & call_stack [call - 1 ], call_stack [ call - 1 ]. func_arg_num ) ) {
254
254
if (ARG_SHOULD_BE_SENT_BY_REF (call_stack [call - 1 ].func , call_stack [call - 1 ].func_arg_num )) {
255
255
if (opline -> opcode != ZEND_FETCH_STATIC_PROP_FUNC_ARG ) {
256
256
opline -> opcode -= 9 ;
@@ -275,12 +275,12 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
275
275
}
276
276
break ;
277
277
case ZEND_SEND_VAL_EX :
278
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
279
- if (opline -> op2_type == IS_CONST ) {
280
- call_stack [call - 1 ].try_inline = 0 ;
281
- break ;
282
- }
278
+ if (opline -> op2_type == IS_CONST ) {
279
+ call_stack [call - 1 ].try_inline = 0 ;
280
+ break ;
281
+ }
283
282
283
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
284
284
if (ARG_MUST_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
285
285
/* We won't convert it into_DO_FCALL to emit error at run-time */
286
286
call_stack [call - 1 ].opline = NULL ;
@@ -290,25 +290,25 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
290
290
}
291
291
break ;
292
292
case ZEND_CHECK_FUNC_ARG :
293
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
294
- if (opline -> op2_type == IS_CONST ) {
295
- call_stack [call - 1 ].try_inline = 0 ;
296
- call_stack [call - 1 ].func_arg_num = (uint32_t )-1 ;
297
- break ;
298
- }
293
+ if (opline -> op2_type == IS_CONST ) {
294
+ call_stack [call - 1 ].try_inline = 0 ;
295
+ call_stack [call - 1 ].func_arg_num = (uint32_t )-1 ;
296
+ break ;
297
+ }
299
298
299
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
300
300
call_stack [call - 1 ].func_arg_num = opline -> op2 .num ;
301
301
MAKE_NOP (opline );
302
302
}
303
303
break ;
304
304
case ZEND_SEND_VAR_EX :
305
305
case ZEND_SEND_FUNC_ARG :
306
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
307
- if (opline -> op2_type == IS_CONST ) {
308
- call_stack [call - 1 ].try_inline = 0 ;
309
- break ;
310
- }
306
+ if (opline -> op2_type == IS_CONST ) {
307
+ call_stack [call - 1 ].try_inline = 0 ;
308
+ break ;
309
+ }
311
310
311
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
312
312
call_stack [call - 1 ].func_arg_num = (uint32_t )-1 ;
313
313
if (ARG_SHOULD_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
314
314
opline -> opcode = ZEND_SEND_REF ;
@@ -318,12 +318,12 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
318
318
}
319
319
break ;
320
320
case ZEND_SEND_VAR_NO_REF_EX :
321
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
322
- if (opline -> op2_type == IS_CONST ) {
323
- call_stack [call - 1 ].try_inline = 0 ;
324
- break ;
325
- }
321
+ if (opline -> op2_type == IS_CONST ) {
322
+ call_stack [call - 1 ].try_inline = 0 ;
323
+ break ;
324
+ }
326
325
326
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
327
327
if (ARG_MUST_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
328
328
opline -> opcode = ZEND_SEND_VAR_NO_REF ;
329
329
} else if (ARG_MAY_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
0 commit comments