@@ -239,8 +239,8 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
239
239
case ZEND_FETCH_STATIC_PROP_FUNC_ARG :
240
240
case ZEND_FETCH_OBJ_FUNC_ARG :
241
241
case ZEND_FETCH_DIM_FUNC_ARG :
242
- if (call_stack [call - 1 ].func
243
- && call_stack [call - 1 ]. func_arg_num != ( uint32_t ) -1 ) {
242
+ if (call_stack [call - 1 ].func_arg_num != ( uint32_t ) -1
243
+ && has_known_send_mode ( & call_stack [call - 1 ], call_stack [ call - 1 ]. func_arg_num ) ) {
244
244
if (ARG_SHOULD_BE_SENT_BY_REF (call_stack [call - 1 ].func , call_stack [call - 1 ].func_arg_num )) {
245
245
if (opline -> opcode != ZEND_FETCH_STATIC_PROP_FUNC_ARG ) {
246
246
opline -> opcode -= 9 ;
@@ -265,12 +265,12 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
265
265
}
266
266
break ;
267
267
case ZEND_SEND_VAL_EX :
268
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
269
- if (opline -> op2_type == IS_CONST ) {
270
- call_stack [call - 1 ].try_inline = 0 ;
271
- break ;
272
- }
268
+ if (opline -> op2_type == IS_CONST ) {
269
+ call_stack [call - 1 ].try_inline = 0 ;
270
+ break ;
271
+ }
273
272
273
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
274
274
if (ARG_MUST_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
275
275
/* We won't convert it into_DO_FCALL to emit error at run-time */
276
276
call_stack [call - 1 ].opline = NULL ;
@@ -280,25 +280,25 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
280
280
}
281
281
break ;
282
282
case ZEND_CHECK_FUNC_ARG :
283
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
284
- if (opline -> op2_type == IS_CONST ) {
285
- call_stack [call - 1 ].try_inline = 0 ;
286
- call_stack [call - 1 ].func_arg_num = (uint32_t )-1 ;
287
- break ;
288
- }
283
+ if (opline -> op2_type == IS_CONST ) {
284
+ call_stack [call - 1 ].try_inline = 0 ;
285
+ call_stack [call - 1 ].func_arg_num = (uint32_t )-1 ;
286
+ break ;
287
+ }
289
288
289
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
290
290
call_stack [call - 1 ].func_arg_num = opline -> op2 .num ;
291
291
MAKE_NOP (opline );
292
292
}
293
293
break ;
294
294
case ZEND_SEND_VAR_EX :
295
295
case ZEND_SEND_FUNC_ARG :
296
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
297
- if (opline -> op2_type == IS_CONST ) {
298
- call_stack [call - 1 ].try_inline = 0 ;
299
- break ;
300
- }
296
+ if (opline -> op2_type == IS_CONST ) {
297
+ call_stack [call - 1 ].try_inline = 0 ;
298
+ break ;
299
+ }
301
300
301
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
302
302
call_stack [call - 1 ].func_arg_num = (uint32_t )-1 ;
303
303
if (ARG_SHOULD_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
304
304
opline -> opcode = ZEND_SEND_REF ;
@@ -308,12 +308,12 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
308
308
}
309
309
break ;
310
310
case ZEND_SEND_VAR_NO_REF_EX :
311
- if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
312
- if (opline -> op2_type == IS_CONST ) {
313
- call_stack [call - 1 ].try_inline = 0 ;
314
- break ;
315
- }
311
+ if (opline -> op2_type == IS_CONST ) {
312
+ call_stack [call - 1 ].try_inline = 0 ;
313
+ break ;
314
+ }
316
315
316
+ if (has_known_send_mode (& call_stack [call - 1 ], opline -> op2 .num )) {
317
317
if (ARG_MUST_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
318
318
opline -> opcode = ZEND_SEND_VAR_NO_REF ;
319
319
} else if (ARG_MAY_BE_SENT_BY_REF (call_stack [call - 1 ].func , opline -> op2 .num )) {
0 commit comments