@@ -7422,39 +7422,44 @@ ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMP|VAR|CV, JMP_ADDR)
7422
7422
ZEND_VM_NEXT_OPCODE ();
7423
7423
}
7424
7424
7425
- ZEND_VM_HOT_NOCONST_HANDLER (198 , ZEND_JMP_NULL , CONST |TMPVARCV , JMP_ADDR )
7425
+ ZEND_VM_HOT_NOCONST_HANDLER (198 , ZEND_JMP_NULL , CONST |TMP | VAR | CV , JMP_ADDR )
7426
7426
{
7427
7427
USE_OPLINE
7428
- zval * val ;
7428
+ zval * val , * result ;
7429
7429
7430
7430
val = GET_OP1_ZVAL_PTR_UNDEF (BP_VAR_R );
7431
- if (OP1_TYPE != IS_CONST ) {
7432
- ZVAL_DEREF (val );
7433
- }
7434
-
7435
- if (Z_TYPE_INFO_P (val ) > IS_NULL ) {
7436
- ZEND_VM_NEXT_OPCODE ();
7437
- } else {
7438
- zval * result = EX_VAR (opline -> result .var );
7439
7431
7440
- if (EXPECTED ( opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR ) ) {
7441
- ZVAL_NULL ( result );
7442
- if (UNEXPECTED ( Z_TYPE_INFO_P (val ) == IS_UNDEF ) ) {
7443
- SAVE_OPLINE ( );
7444
- ZVAL_UNDEFINED_OP1 ();
7445
- if ( UNEXPECTED ( EG ( exception ) != NULL )) {
7446
- HANDLE_EXCEPTION () ;
7432
+ if (Z_TYPE_P ( val ) > IS_NULL ) {
7433
+ do {
7434
+ if (( OP1_TYPE == IS_CV || OP1_TYPE == IS_VAR ) && Z_TYPE_P (val ) == IS_REFERENCE ) {
7435
+ val = Z_REFVAL_P ( val );
7436
+ if ( Z_TYPE_P ( val ) <= IS_NULL ) {
7437
+ FREE_OP1 ();
7438
+ break ;
7447
7439
}
7448
7440
}
7449
- } else if (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET ) {
7450
- ZVAL_FALSE (result );
7451
- } else {
7452
- ZEND_ASSERT (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY );
7453
- ZVAL_TRUE (result );
7454
- }
7441
+ ZEND_VM_NEXT_OPCODE ();
7442
+ } while (0 );
7443
+ }
7455
7444
7456
- ZEND_VM_JMP_EX (OP_JMP_ADDR (opline , opline -> op2 ), 0 );
7445
+ result = EX_VAR (opline -> result .var );
7446
+ if (EXPECTED (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EXPR )) {
7447
+ ZVAL_NULL (result );
7448
+ if (OP1_TYPE == IS_CV && UNEXPECTED (Z_TYPE_P (val ) == IS_UNDEF )) {
7449
+ SAVE_OPLINE ();
7450
+ ZVAL_UNDEFINED_OP1 ();
7451
+ if (UNEXPECTED (EG (exception ) != NULL )) {
7452
+ HANDLE_EXCEPTION ();
7453
+ }
7454
+ }
7455
+ } else if (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_ISSET ) {
7456
+ ZVAL_FALSE (result );
7457
+ } else {
7458
+ ZEND_ASSERT (opline -> extended_value == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY );
7459
+ ZVAL_TRUE (result );
7457
7460
}
7461
+
7462
+ ZEND_VM_JMP_EX (OP_JMP_ADDR (opline , opline -> op2 ), 0 );
7458
7463
}
7459
7464
7460
7465
ZEND_VM_HOT_HANDLER (31 , ZEND_QM_ASSIGN , CONST |TMP |VAR |CV , ANY )
0 commit comments