@@ -1774,7 +1774,6 @@ void zend_do_end_accessor_declaration(znode *function_token, znode *var_name, zn
1774
1774
}
1775
1775
/* }}} */
1776
1776
1777
-
1778
1777
void zend_finalize_accessor (znode * var_name TSRMLS_DC ) { /* {{{ */
1779
1778
zend_property_info * property_info ;
1780
1779
@@ -3745,6 +3744,16 @@ static zend_bool do_inherit_method_check(HashTable *child_function_table, zend_f
3745
3744
TSRMLS_FETCH ();
3746
3745
3747
3746
if (zend_hash_quick_find (child_function_table , hash_key -> arKey , hash_key -> nKeyLength , hash_key -> h , (void * * ) & child )== FAILURE ) {
3747
+ if (IS_ACCESSOR_FN (parent )) {
3748
+ zend_property_info * property_info ;
3749
+ const char * acc_name = ZEND_ACC_NAME (parent );
3750
+ zend_uint acc_name_len = strlen (acc_name );
3751
+
3752
+ if (zend_hash_find (& child_ce -> properties_info , acc_name , acc_name_len + 1 , (void * * ) & property_info ) == SUCCESS ) {
3753
+ if (!property_info -> ai )
3754
+ return 0 ; /* Do not copy */
3755
+ }
3756
+ }
3748
3757
if (parent_flags & (ZEND_ACC_ABSTRACT )) {
3749
3758
child_ce -> ce_flags |= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS ;
3750
3759
}
@@ -4057,6 +4066,24 @@ static int do_interface_constant_check(zval **val TSRMLS_DC, int num_args, va_li
4057
4066
}
4058
4067
/* }}} */
4059
4068
4069
+
4070
+
4071
+ /*static int prune_dangling_accessors(zend_function *zf, zend_class_entry *ce TSRMLS_DC) { {{{
4072
+ if(IS_ACCESSOR_FN(zf)) {
4073
+ zend_property_info *property_info;
4074
+ const char *acc_name = ZEND_ACC_NAME(zf);
4075
+ zend_uint acc_name_len = strlen(acc_name);
4076
+
4077
+ if(zend_hash_find(&ce->properties_info, acc_name, acc_name_len+1, (void **) &property_info) == SUCCESS) {
4078
+ if(property_info->ai)
4079
+ return ZEND_HASH_APPLY_KEEP;
4080
+ return ZEND_HASH_APPLY_REMOVE;
4081
+ }
4082
+ }
4083
+ return ZEND_HASH_APPLY_KEEP;
4084
+ }
4085
+ }}} */
4086
+
4060
4087
ZEND_API void zend_do_implement_interface (zend_class_entry * ce , zend_class_entry * iface TSRMLS_DC ) /* {{{ */
4061
4088
{
4062
4089
zend_uint i , ignore = 0 ;
@@ -4093,6 +4120,8 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
4093
4120
4094
4121
do_implement_interface (ce , iface TSRMLS_CC );
4095
4122
zend_do_inherit_interfaces (ce , iface TSRMLS_CC );
4123
+
4124
+ //zend_hash_apply_with_argument(&ce->function_table, (apply_func_arg_t) prune_dangling_accessors, (void*)ce);
4096
4125
}
4097
4126
}
4098
4127
/* }}} */
0 commit comments