@@ -7513,39 +7513,44 @@ ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
7513
7513
ZEND_VM_NEXT_OPCODE ();
7514
7514
}
7515
7515
7516
- ZEND_VM_HOT_NOCONST_HANDLER (198 , ZEND_JMP_NULL , CONST |TMPVARCV , JMP_ADDR )
7516
+ ZEND_VM_HOT_NOCONST_HANDLER (198 , ZEND_JMP_NULL , CONST |TMP | VAR | CV , JMP_ADDR )
7517
7517
{
7518
7518
USE_OPLINE
7519
- zval * val ;
7519
+ zval * val , * result ;
7520
7520
7521
7521
val = GET_OP1_ZVAL_PTR_UNDEF (BP_VAR_R );
7522
- if (OP1_TYPE != IS_CONST ) {
7523
- ZVAL_DEREF (val );
7524
- }
7525
-
7526
- if (Z_TYPE_INFO_P (val ) > IS_NULL ) {
7527
- ZEND_VM_NEXT_OPCODE ();
7528
- } else {
7529
- zval * result = EX_VAR (opline -> result .var );
7530
7522
7531
- if (EXPECTED ( opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR ) ) {
7532
- ZVAL_NULL ( result );
7533
- if (UNEXPECTED ( Z_TYPE_INFO_P (val ) == IS_UNDEF ) ) {
7534
- SAVE_OPLINE ( );
7535
- ZVAL_UNDEFINED_OP1 ();
7536
- if ( UNEXPECTED ( EG ( exception ) != NULL )) {
7537
- HANDLE_EXCEPTION () ;
7523
+ if (Z_TYPE_P ( val ) > IS_NULL ) {
7524
+ do {
7525
+ if (( OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR ) && Z_TYPE_P (val ) == IS_REFERENCE ) {
7526
+ val = Z_REFVAL_P ( val );
7527
+ if ( Z_TYPE_P ( val ) <= IS_NULL ) {
7528
+ FREE_OP1 ();
7529
+ break ;
7538
7530
}
7539
7531
}
7540
- } else if (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET ) {
7541
- ZVAL_FALSE (result );
7542
- } else {
7543
- ZEND_ASSERT (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY );
7544
- ZVAL_TRUE (result );
7545
- }
7532
+ ZEND_VM_NEXT_OPCODE ();
7533
+ } while (0 );
7534
+ }
7546
7535
7547
- ZEND_VM_JMP_EX (OP_JMP_ADDR (opline , opline -> op2 ), 0 );
7536
+ result = EX_VAR (opline -> result .var );
7537
+ if (EXPECTED (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR )) {
7538
+ ZVAL_NULL (result );
7539
+ if (OP1_TYPE == IS_CV && UNEXPECTED (Z_TYPE_P (val ) == IS_UNDEF )) {
7540
+ SAVE_OPLINE ();
7541
+ ZVAL_UNDEFINED_OP1 ();
7542
+ if (UNEXPECTED (EG (exception ) != NULL )) {
7543
+ HANDLE_EXCEPTION ();
7544
+ }
7545
+ }
7546
+ } else if (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET ) {
7547
+ ZVAL_FALSE (result );
7548
+ } else {
7549
+ ZEND_ASSERT (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY );
7550
+ ZVAL_TRUE (result );
7548
7551
}
7552
+
7553
+ ZEND_VM_JMP_EX (OP_JMP_ADDR (opline , opline -> op2 ), 0 );
7549
7554
}
7550
7555
7551
7556
ZEND_VM_HOT_HANDLER (31 , ZEND_QM_ASSIGN , CONST |TMP |VAR |CV , ANY )
0 commit comments