@@ -1030,7 +1030,6 @@ ZEND_API void zend_merge_properties(zval *obj, HashTable *properties) /* {{{ */
1030
1030
ZEND_API int zend_update_class_constants (zend_class_entry * class_type ) /* {{{ */
1031
1031
{
1032
1032
if (!(class_type -> ce_flags & ZEND_ACC_CONSTANTS_UPDATED )) {
1033
- zend_class_entry * ce ;
1034
1033
zend_class_constant * c ;
1035
1034
zval * val ;
1036
1035
zend_property_info * prop_info ;
@@ -1056,39 +1055,33 @@ ZEND_API int zend_update_class_constants(zend_class_entry *class_type) /* {{{ */
1056
1055
}
1057
1056
}
1058
1057
1059
- ce = class_type ;
1060
- while (ce ) {
1061
- ZEND_HASH_FOREACH_PTR (& ce -> properties_info , prop_info ) {
1062
- if (prop_info -> ce == ce ) {
1063
- if (prop_info -> flags & ZEND_ACC_STATIC ) {
1064
- val = CE_STATIC_MEMBERS (class_type ) + prop_info -> offset ;
1065
- } else {
1066
- val = (zval * )((char * )class_type -> default_properties_table + prop_info -> offset - OBJ_PROP_TO_OFFSET (0 ));
1058
+ ZEND_HASH_FOREACH_PTR (& class_type -> properties_info , prop_info ) {
1059
+ if (prop_info -> flags & ZEND_ACC_STATIC ) {
1060
+ val = CE_STATIC_MEMBERS (class_type ) + prop_info -> offset ;
1061
+ } else {
1062
+ val = (zval * )((char * )class_type -> default_properties_table + prop_info -> offset - OBJ_PROP_TO_OFFSET (0 ));
1063
+ }
1064
+ if (Z_TYPE_P (val ) == IS_CONSTANT_AST ) {
1065
+ if (ZEND_TYPE_IS_SET (prop_info -> type )) {
1066
+ zval tmp ;
1067
+
1068
+ ZVAL_COPY (& tmp , val );
1069
+ if (UNEXPECTED (zval_update_constant_ex (& tmp , prop_info -> ce ) != SUCCESS )) {
1070
+ zval_ptr_dtor (& tmp );
1071
+ return FAILURE ;
1067
1072
}
1068
- if (Z_TYPE_P (val ) == IS_CONSTANT_AST ) {
1069
- if (ZEND_TYPE_IS_SET (prop_info -> type )) {
1070
- zval tmp ;
1071
-
1072
- ZVAL_COPY (& tmp , val );
1073
- if (UNEXPECTED (zval_update_constant_ex (& tmp , ce ) != SUCCESS )) {
1074
- zval_ptr_dtor (& tmp );
1075
- return FAILURE ;
1076
- }
1077
- /* property initializers must always be evaluated with strict types */ ;
1078
- if (UNEXPECTED (!zend_verify_property_type (prop_info , & tmp , /* strict */ 1 ))) {
1079
- zval_ptr_dtor (& tmp );
1080
- return FAILURE ;
1081
- }
1082
- zval_ptr_dtor (val );
1083
- ZVAL_COPY_VALUE (val , & tmp );
1084
- } else if (UNEXPECTED (zval_update_constant_ex (val , ce ) != SUCCESS )) {
1085
- return FAILURE ;
1086
- }
1073
+ /* property initializers must always be evaluated with strict types */ ;
1074
+ if (UNEXPECTED (!zend_verify_property_type (prop_info , & tmp , /* strict */ 1 ))) {
1075
+ zval_ptr_dtor (& tmp );
1076
+ return FAILURE ;
1087
1077
}
1078
+ zval_ptr_dtor (val );
1079
+ ZVAL_COPY_VALUE (val , & tmp );
1080
+ } else if (UNEXPECTED (zval_update_constant_ex (val , prop_info -> ce ) != SUCCESS )) {
1081
+ return FAILURE ;
1088
1082
}
1089
- } ZEND_HASH_FOREACH_END ();
1090
- ce = ce -> parent ;
1091
- }
1083
+ }
1084
+ } ZEND_HASH_FOREACH_END ();
1092
1085
1093
1086
class_type -> ce_flags |= ZEND_ACC_CONSTANTS_UPDATED ;
1094
1087
}
0 commit comments