@@ -1538,100 +1538,21 @@ ZEND_VM_HELPER(zend_fetch_static_prop_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR,
1538
1538
zend_free_op free_op1 ;
1539
1539
zval * varname ;
1540
1540
zval * retval ;
1541
- zend_string * name ;
1542
- zend_class_entry * ce ;
1543
1541
1544
1542
SAVE_OPLINE ();
1545
1543
varname = GET_OP1_ZVAL_PTR_UNDEF (BP_VAR_R );
1546
1544
1547
- if (OP1_TYPE == IS_CONST ) {
1548
- name = Z_STR_P (varname );
1549
- } else if (EXPECTED (Z_TYPE_P (varname ) == IS_STRING )) {
1550
- name = Z_STR_P (varname );
1551
- zend_string_addref (name );
1552
- } else {
1553
- if (OP1_TYPE == IS_CV && UNEXPECTED (Z_TYPE_P (varname ) == IS_UNDEF )) {
1554
- GET_OP1_UNDEF_CV (varname , BP_VAR_R );
1555
- }
1556
- name = zval_get_string (varname );
1557
- }
1558
-
1559
- if (OP2_TYPE == IS_CONST ) {
1560
- if (OP1_TYPE == IS_CONST && EXPECTED ((ce = CACHED_PTR (Z_CACHE_SLOT_P (EX_CONSTANT (opline -> op1 )))) != NULL )) {
1561
- retval = CACHED_PTR (Z_CACHE_SLOT_P (EX_CONSTANT (opline -> op1 )) + sizeof (void * ));
1562
-
1563
- /* check if static properties were destoyed */
1564
- if (UNEXPECTED (CE_STATIC_MEMBERS (ce ) == NULL )) {
1565
- zend_throw_error (NULL , "Access to undeclared static property: %s::$%s" , ZSTR_VAL (ce -> name ), ZSTR_VAL (name ));
1566
- FREE_OP1 ();
1567
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
1568
- HANDLE_EXCEPTION ();
1569
- }
1570
-
1571
- ZEND_VM_C_GOTO (fetch_static_prop_return );
1572
- } else if (UNEXPECTED ((ce = CACHED_PTR (Z_CACHE_SLOT_P (EX_CONSTANT (opline -> op2 )))) == NULL )) {
1573
- ce = zend_fetch_class_by_name (Z_STR_P (EX_CONSTANT (opline -> op2 )), EX_CONSTANT (opline -> op2 ) + 1 , ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION );
1574
- if (UNEXPECTED (ce == NULL )) {
1575
- ZEND_ASSERT (EG (exception ));
1576
- if (OP1_TYPE != IS_CONST ) {
1577
- zend_string_release (name );
1578
- }
1579
- FREE_OP1 ();
1580
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
1581
- HANDLE_EXCEPTION ();
1582
- }
1583
- CACHE_PTR (Z_CACHE_SLOT_P (EX_CONSTANT (opline -> op2 )), ce );
1584
- }
1585
- } else {
1586
- if (OP2_TYPE == IS_UNUSED ) {
1587
- ce = zend_fetch_class (NULL , opline -> op2 .num );
1588
- if (UNEXPECTED (ce == NULL )) {
1589
- ZEND_ASSERT (EG (exception ));
1590
- if (OP1_TYPE != IS_CONST ) {
1591
- zend_string_release (name );
1592
- }
1593
- FREE_OP1 ();
1594
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
1595
- HANDLE_EXCEPTION ();
1596
- }
1597
- } else {
1598
- ce = Z_CE_P (EX_VAR (opline -> op2 .var ));
1599
- }
1600
- if (OP1_TYPE == IS_CONST &&
1601
- (retval = CACHED_POLYMORPHIC_PTR (Z_CACHE_SLOT_P (EX_CONSTANT (opline -> op1 )), ce )) != NULL ) {
1602
-
1603
- /* check if static properties were destoyed */
1604
- if (UNEXPECTED (CE_STATIC_MEMBERS (ce ) == NULL )) {
1605
- zend_throw_error (NULL , "Access to undeclared static property: %s::$%s" , ZSTR_VAL (ce -> name ), ZSTR_VAL (name ));
1606
- FREE_OP1 ();
1607
- ZVAL_UNDEF (EX_VAR (opline -> result .var ));
1608
- HANDLE_EXCEPTION ();
1609
- }
1545
+ retval = zend_fetch_static_property_address (execute_data , varname , OP1_TYPE , opline -> op2 , OP2_TYPE );
1610
1546
1611
- ZEND_VM_C_GOTO (fetch_static_prop_return );
1612
- }
1613
- }
1614
- retval = zend_std_get_static_property (ce , name , 0 );
1615
1547
if (UNEXPECTED (retval == NULL )) {
1616
1548
ZEND_ASSERT (EG (exception ));
1617
- if (OP1_TYPE != IS_CONST ) {
1618
- zend_string_release (name );
1619
- }
1620
1549
FREE_OP1 ();
1621
1550
ZVAL_UNDEF (EX_VAR (opline -> result .var ));
1622
1551
HANDLE_EXCEPTION ();
1623
1552
}
1624
- if (OP1_TYPE == IS_CONST && retval ) {
1625
- CACHE_POLYMORPHIC_PTR (Z_CACHE_SLOT_P (EX_CONSTANT (opline -> op1 )), ce , retval );
1626
- }
1627
1553
1628
1554
FREE_OP1 ();
1629
1555
1630
- if (OP1_TYPE != IS_CONST ) {
1631
- zend_string_release (name );
1632
- }
1633
-
1634
- ZEND_VM_C_LABEL (fetch_static_prop_return ):
1635
1556
if (type == BP_VAR_R || type == BP_VAR_IS ) {
1636
1557
ZVAL_COPY_UNREF (EX_VAR (opline -> result .var ), retval );
1637
1558
} else {
0 commit comments