@@ -5495,18 +5495,16 @@ ZEND_METHOD(reflection_property, getValue)
5495
5495
return ;
5496
5496
}
5497
5497
5498
- if ((ref -> prop .flags & ZEND_ACC_STATIC )) {
5499
- if (UNEXPECTED (zend_update_class_constants (intern -> ce ) != SUCCESS )) {
5500
- return ;
5501
- }
5502
- if (Z_TYPE (CE_STATIC_MEMBERS (intern -> ce )[ref -> prop .offset ]) == IS_UNDEF ) {
5503
- zend_throw_error (NULL , "Internal error: Could not find the property %s::%s" , ZSTR_VAL (intern -> ce -> name ), ZSTR_VAL (ref -> prop .name ));
5504
- return ;
5498
+ if (ref -> prop .flags & ZEND_ACC_STATIC ) {
5499
+ zend_class_entry * old_scope = EG (fake_scope );
5500
+ EG (fake_scope ) = ref -> ce ;
5501
+ member_p = zend_std_get_static_property (ref -> ce , ref -> unmangled_name , 0 );
5502
+ EG (fake_scope ) = old_scope ;
5503
+
5504
+ if (member_p ) {
5505
+ ZVAL_DEREF (member_p );
5506
+ ZVAL_COPY (return_value , member_p );
5505
5507
}
5506
- member_p = & CE_STATIC_MEMBERS (intern -> ce )[ref -> prop .offset ];
5507
- ZVAL_DEINDIRECT (member_p );
5508
- ZVAL_DEREF (member_p );
5509
- ZVAL_COPY (return_value , member_p );
5510
5508
} else {
5511
5509
zval rv ;
5512
5510
@@ -5554,34 +5552,27 @@ ZEND_METHOD(reflection_property, setValue)
5554
5552
return ;
5555
5553
}
5556
5554
5557
- if ((ref -> prop .flags & ZEND_ACC_STATIC )) {
5555
+ if (ref -> prop .flags & ZEND_ACC_STATIC ) {
5556
+ zend_class_entry * old_scope ;
5557
+ zval garbage ;
5558
+
5558
5559
if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , ZEND_NUM_ARGS (), "z" , & value ) == FAILURE ) {
5559
5560
if (zend_parse_parameters (ZEND_NUM_ARGS (), "zz" , & tmp , & value ) == FAILURE ) {
5560
5561
return ;
5561
5562
}
5562
5563
}
5563
- if (UNEXPECTED (zend_update_class_constants (intern -> ce ) != SUCCESS )) {
5564
- return ;
5565
- }
5566
5564
5567
- if (Z_TYPE (CE_STATIC_MEMBERS (intern -> ce )[ref -> prop .offset ]) == IS_UNDEF ) {
5568
- zend_throw_error (NULL , "Internal error: Could not find the property %s::%s" , ZSTR_VAL (intern -> ce -> name ), ZSTR_VAL (ref -> prop .name ));
5569
- return ;
5570
- }
5571
- variable_ptr = & CE_STATIC_MEMBERS (intern -> ce )[ref -> prop .offset ];
5572
- ZVAL_DEINDIRECT (variable_ptr );
5573
- if (variable_ptr != value ) {
5574
- zval garbage ;
5565
+ old_scope = EG (fake_scope );
5566
+ EG (fake_scope ) = ref -> ce ;
5567
+ variable_ptr = zend_std_get_static_property (ref -> ce , ref -> unmangled_name , 0 );
5568
+ EG (fake_scope ) = old_scope ;
5575
5569
5576
- ZVAL_DEREF (variable_ptr );
5577
- ZVAL_DEREF (value );
5570
+ ZVAL_DEREF (variable_ptr );
5571
+ ZVAL_DEREF (value );
5578
5572
5579
- ZVAL_COPY_VALUE (& garbage , variable_ptr );
5580
-
5581
- ZVAL_COPY (variable_ptr , value );
5582
-
5583
- zval_ptr_dtor (& garbage );
5584
- }
5573
+ ZVAL_COPY_VALUE (& garbage , variable_ptr );
5574
+ ZVAL_COPY (variable_ptr , value );
5575
+ zval_ptr_dtor (& garbage );
5585
5576
} else {
5586
5577
if (zend_parse_parameters (ZEND_NUM_ARGS (), "oz" , & object , & value ) == FAILURE ) {
5587
5578
return ;
0 commit comments