Lines Matching refs:ce

2998 static void do_inherit_parent_constructor(zend_class_entry *ce) /* {{{ */  in do_inherit_parent_constructor()  argument
3002 if (!ce->parent) { in do_inherit_parent_constructor()
3007 ce->create_object = ce->parent->create_object; in do_inherit_parent_constructor()
3010 if (!ce->get_iterator) { in do_inherit_parent_constructor()
3011 ce->get_iterator = ce->parent->get_iterator; in do_inherit_parent_constructor()
3013 if (!ce->iterator_funcs.funcs) { in do_inherit_parent_constructor()
3014 ce->iterator_funcs.funcs = ce->parent->iterator_funcs.funcs; in do_inherit_parent_constructor()
3016 if (!ce->__get) { in do_inherit_parent_constructor()
3017 ce->__get = ce->parent->__get; in do_inherit_parent_constructor()
3019 if (!ce->__set) { in do_inherit_parent_constructor()
3020 ce->__set = ce->parent->__set; in do_inherit_parent_constructor()
3022 if (!ce->__unset) { in do_inherit_parent_constructor()
3023 ce->__unset = ce->parent->__unset; in do_inherit_parent_constructor()
3025 if (!ce->__isset) { in do_inherit_parent_constructor()
3026 ce->__isset = ce->parent->__isset; in do_inherit_parent_constructor()
3028 if (!ce->__call) { in do_inherit_parent_constructor()
3029 ce->__call = ce->parent->__call; in do_inherit_parent_constructor()
3031 if (!ce->__callstatic) { in do_inherit_parent_constructor()
3032 ce->__callstatic = ce->parent->__callstatic; in do_inherit_parent_constructor()
3034 if (!ce->__tostring) { in do_inherit_parent_constructor()
3035 ce->__tostring = ce->parent->__tostring; in do_inherit_parent_constructor()
3037 if (!ce->clone) { in do_inherit_parent_constructor()
3038 ce->clone = ce->parent->clone; in do_inherit_parent_constructor()
3040 if(!ce->serialize) { in do_inherit_parent_constructor()
3041 ce->serialize = ce->parent->serialize; in do_inherit_parent_constructor()
3043 if(!ce->unserialize) { in do_inherit_parent_constructor()
3044 ce->unserialize = ce->parent->unserialize; in do_inherit_parent_constructor()
3046 if (!ce->destructor) { in do_inherit_parent_constructor()
3047 ce->destructor = ce->parent->destructor; in do_inherit_parent_constructor()
3049 if (ce->constructor) { in do_inherit_parent_constructor()
3050 if (ce->parent->constructor && ce->parent->constructor->common.fn_flags & ZEND_ACC_FINAL) { in do_inherit_parent_constructor()
3052 ce->parent->name, ce->parent->constructor->common.function_name, in do_inherit_parent_constructor()
3053 ce->name, ce->constructor->common.function_name in do_inherit_parent_constructor()
3059 …if (zend_hash_find(&ce->parent->function_table, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTO… in do_inherit_parent_constructor()
3061 …zend_hash_update(&ce->function_table, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAM… in do_inherit_parent_constructor()
3068 lc_class_name = zend_str_tolower_dup(ce->name, ce->name_length); in do_inherit_parent_constructor()
3069 if (!zend_hash_exists(&ce->function_table, lc_class_name, ce->name_length+1)) { in do_inherit_parent_constructor()
3070 lc_parent_class_name = zend_str_tolower_dup(ce->parent->name, ce->parent->name_length); in do_inherit_parent_constructor()
3071 if (!zend_hash_exists(&ce->function_table, lc_parent_class_name, ce->parent->name_length+1) && in do_inherit_parent_constructor()
3072 …zend_hash_find(&ce->parent->function_table, lc_parent_class_name, ce->parent->name_length+1, (void… in do_inherit_parent_constructor()
3075 …zend_hash_update(&ce->function_table, lc_parent_class_name, ce->parent->name_length+1, function, s… in do_inherit_parent_constructor()
3083 ce->constructor = ce->parent->constructor; in do_inherit_parent_constructor()
3497 …ht, zend_property_info *parent_info, const zend_hash_key *hash_key, zend_class_entry *ce) /* {{{ */ in do_inherit_property_access_check() argument
3500 zend_class_entry *parent_ce = ce->parent; in do_inherit_property_access_check()
3503 …if (zend_hash_quick_find(&ce->properties_info, hash_key->arKey, hash_key->nKeyLength, hash_key->h,… in do_inherit_property_access_check()
3506 …zend_hash_quick_update(&ce->properties_info, hash_key->arKey, hash_key->nKeyLength, hash_key->h, p… in do_inherit_property_access_check()
3507 if(ce->type & ZEND_INTERNAL_CLASS) { in do_inherit_property_access_check()
3518 …if (zend_hash_quick_find(&ce->properties_info, hash_key->arKey, hash_key->nKeyLength, hash_key->h,… in do_inherit_property_access_check()
3522 (child_info->flags & ZEND_ACC_STATIC) ? "static " : "non static ", ce->name, hash_key->arKey); in do_inherit_property_access_check()
3531 …zend_error(E_COMPILE_ERROR, "Access level to %s::$%s must be %s (as in class %s)%s", ce->name, has… in do_inherit_property_access_check()
3533 zval_ptr_dtor(&(ce->default_properties_table[parent_info->offset])); in do_inherit_property_access_check()
3534ce->default_properties_table[parent_info->offset] = ce->default_properties_table[child_info->offse… in do_inherit_property_access_check()
3535 ce->default_properties_table[child_info->offset] = NULL; in do_inherit_property_access_check()
3545 static inline void do_implement_interface(zend_class_entry *ce, zend_class_entry *iface TSRMLS_DC) … in do_implement_interface() argument
3547 …if (!(ce->ce_flags & ZEND_ACC_INTERFACE) && iface->interface_gets_implemented && iface->interface_… in do_implement_interface()
3548 zend_error(E_CORE_ERROR, "Class %s could not implement interface %s", ce->name, iface->name); in do_implement_interface()
3550 if (ce == iface) { in do_implement_interface()
3551 zend_error(E_ERROR, "Interface %s cannot implement itself", ce->name); in do_implement_interface()
3556 ZEND_API void zend_do_inherit_interfaces(zend_class_entry *ce, const zend_class_entry *iface TSRMLS… in zend_do_inherit_interfaces() argument
3565 ce_num = ce->num_interfaces; in zend_do_inherit_interfaces()
3567 if (ce->type == ZEND_INTERNAL_CLASS) { in zend_do_inherit_interfaces()
3568ce->interfaces = (zend_class_entry **) realloc(ce->interfaces, sizeof(zend_class_entry *) * (ce_nu… in zend_do_inherit_interfaces()
3570ce->interfaces = (zend_class_entry **) erealloc(ce->interfaces, sizeof(zend_class_entry *) * (ce_n… in zend_do_inherit_interfaces()
3577 if (ce->interfaces[i] == entry) { in zend_do_inherit_interfaces()
3582 ce->interfaces[ce->num_interfaces++] = entry; in zend_do_inherit_interfaces()
3587 while (ce_num < ce->num_interfaces) { in zend_do_inherit_interfaces()
3588 do_implement_interface(ce, ce->interfaces[ce_num++] TSRMLS_CC); in zend_do_inherit_interfaces()
3603 # define zval_property_ctor(parent_ce, ce) \ argument
3604 ((void (*)(void *)) (((parent_ce)->type != (ce)->type) ? zval_internal_ctor : zval_add_ref))
3606 # define zval_property_ctor(parent_ce, ce) \ argument
3610 ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce TSRMLS_DC) /* {… in zend_do_inheritance() argument
3614 if ((ce->ce_flags & ZEND_ACC_INTERFACE) in zend_do_inheritance()
3616 …zend_error(E_COMPILE_ERROR, "Interface %s may not inherit from class (%s)", ce->name, parent_ce->n… in zend_do_inheritance()
3619 …zend_error(E_COMPILE_ERROR, "Class %s may not inherit from final class (%s)", ce->name, parent_ce-… in zend_do_inheritance()
3622 ce->parent = parent_ce; in zend_do_inheritance()
3624 if (!ce->serialize) { in zend_do_inheritance()
3625 ce->serialize = parent_ce->serialize; in zend_do_inheritance()
3627 if (!ce->unserialize) { in zend_do_inheritance()
3628 ce->unserialize = parent_ce->unserialize; in zend_do_inheritance()
3632 zend_do_inherit_interfaces(ce, parent_ce TSRMLS_CC); in zend_do_inheritance()
3636 int i = ce->default_properties_count + parent_ce->default_properties_count; in zend_do_inheritance()
3638ce->default_properties_table = perealloc(ce->default_properties_table, sizeof(void*) * i, ce->type… in zend_do_inheritance()
3639 if (ce->default_properties_count) { in zend_do_inheritance()
3641ce->default_properties_table[i] = ce->default_properties_table[i - parent_ce->default_properties_c… in zend_do_inheritance()
3645 ce->default_properties_table[i] = parent_ce->default_properties_table[i]; in zend_do_inheritance()
3646 if (ce->default_properties_table[i]) { in zend_do_inheritance()
3648 if (parent_ce->type != ce->type) { in zend_do_inheritance()
3652 MAKE_COPY_ZVAL(&ce->default_properties_table[i], p); in zend_do_inheritance()
3653 ce->default_properties_table[i] = p; in zend_do_inheritance()
3655 Z_ADDREF_P(ce->default_properties_table[i]); in zend_do_inheritance()
3658 Z_ADDREF_P(ce->default_properties_table[i]); in zend_do_inheritance()
3662 ce->default_properties_count += parent_ce->default_properties_count; in zend_do_inheritance()
3665 if (parent_ce->type != ce->type) { in zend_do_inheritance()
3669 int i = ce->default_static_members_count + parent_ce->default_static_members_count; in zend_do_inheritance()
3671 ce->default_static_members_table = erealloc(ce->default_static_members_table, sizeof(void*) * i); in zend_do_inheritance()
3672 if (ce->default_static_members_count) { in zend_do_inheritance()
3674ce->default_static_members_table[i] = ce->default_static_members_table[i - parent_ce->default_stat… in zend_do_inheritance()
3679 ce->default_static_members_table[i] = CE_STATIC_MEMBERS(parent_ce)[i]; in zend_do_inheritance()
3680 Z_ADDREF_P(ce->default_static_members_table[i]); in zend_do_inheritance()
3682 ce->default_static_members_count += parent_ce->default_static_members_count; in zend_do_inheritance()
3683 ce->static_members_table = ce->default_static_members_table; in zend_do_inheritance()
3687 int i = ce->default_static_members_count + parent_ce->default_static_members_count; in zend_do_inheritance()
3689ce->default_static_members_table = perealloc(ce->default_static_members_table, sizeof(void*) * i, in zend_do_inheritance()
3690 if (ce->default_static_members_count) { in zend_do_inheritance()
3692ce->default_static_members_table[i] = ce->default_static_members_table[i - parent_ce->default_stat… in zend_do_inheritance()
3697 ce->default_static_members_table[i] = parent_ce->default_static_members_table[i]; in zend_do_inheritance()
3698 Z_ADDREF_P(ce->default_static_members_table[i]); in zend_do_inheritance()
3700 ce->default_static_members_count += parent_ce->default_static_members_count; in zend_do_inheritance()
3701 if (ce->type == ZEND_USER_CLASS) { in zend_do_inheritance()
3702 ce->static_members_table = ce->default_static_members_table; in zend_do_inheritance()
3707 for (zend_hash_internal_pointer_reset(&ce->properties_info); in zend_do_inheritance()
3708 zend_hash_get_current_data(&ce->properties_info, (void *) &property_info) == SUCCESS; in zend_do_inheritance()
3709 zend_hash_move_forward(&ce->properties_info)) { in zend_do_inheritance()
3710 if (property_info->ce == ce) { in zend_do_inheritance()
3719ce->properties_info, &parent_ce->properties_info, (copy_ctor_func_t) (ce->type & ZEND_INTERNAL_CLA… in zend_do_inheritance()
3721 …zend_hash_merge(&ce->constants_table, &parent_ce->constants_table, zval_property_ctor(parent_ce, c… in zend_do_inheritance()
3722ce->function_table, &parent_ce->function_table, (copy_ctor_func_t) do_inherit_method, sizeof(zend_… in zend_do_inheritance()
3723 do_inherit_parent_constructor(ce); in zend_do_inheritance()
3725 if (ce->ce_flags & ZEND_ACC_IMPLICIT_ABSTRACT_CLASS && ce->type == ZEND_INTERNAL_CLASS) { in zend_do_inheritance()
3726 ce->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; in zend_do_inheritance()
3727 } else if (!(ce->ce_flags & (ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) { in zend_do_inheritance()
3729 zend_verify_abstract_class(ce TSRMLS_CC); in zend_do_inheritance()
3731 ce->ce_flags |= parent_ce->ce_flags & ZEND_HAS_STATIC_IN_METHODS; in zend_do_inheritance()
3759 ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry *iface TSRMLS_DC) … in zend_do_implement_interface() argument
3762 zend_uint current_iface_num = ce->num_interfaces; in zend_do_implement_interface()
3763 zend_uint parent_iface_num = ce->parent ? ce->parent->num_interfaces : 0; in zend_do_implement_interface()
3765 for (i = 0; i < ce->num_interfaces; i++) { in zend_do_implement_interface()
3766 if (ce->interfaces[i] == NULL) { in zend_do_implement_interface()
3767 …memmove(ce->interfaces + i, ce->interfaces + i + 1, sizeof(zend_class_entry*) * (--ce->num_interfa… in zend_do_implement_interface()
3769 } else if (ce->interfaces[i] == iface) { in zend_do_implement_interface()
3773 …zend_error(E_COMPILE_ERROR, "Class %s cannot implement previously implemented interface %s", ce->n… in zend_do_implement_interface()
3779 …zend_hash_apply_with_arguments(&ce->constants_table TSRMLS_CC, (apply_func_args_t) do_interface_co… in zend_do_implement_interface()
3781 if (ce->num_interfaces >= current_iface_num) { in zend_do_implement_interface()
3782 if (ce->type == ZEND_INTERNAL_CLASS) { in zend_do_implement_interface()
3783ce->interfaces = (zend_class_entry **) realloc(ce->interfaces, sizeof(zend_class_entry *) * (++cur… in zend_do_implement_interface()
3785ce->interfaces = (zend_class_entry **) erealloc(ce->interfaces, sizeof(zend_class_entry *) * (++cu… in zend_do_implement_interface()
3788 ce->interfaces[ce->num_interfaces++] = iface; in zend_do_implement_interface()
3790 …zend_hash_merge_ex(&ce->constants_table, &iface->constants_table, (copy_ctor_func_t) zval_add_ref,… in zend_do_implement_interface()
3791ce->function_table, &iface->function_table, (copy_ctor_func_t) do_inherit_method, sizeof(zend_func… in zend_do_implement_interface()
3793 do_implement_interface(ce, iface TSRMLS_CC); in zend_do_implement_interface()
3794 zend_do_inherit_interfaces(ce, iface TSRMLS_CC); in zend_do_implement_interface()
3799 ZEND_API void zend_do_implement_trait(zend_class_entry *ce, zend_class_entry *trait TSRMLS_DC) /* {… in zend_do_implement_trait() argument
3802 zend_uint current_trait_num = ce->num_traits; in zend_do_implement_trait()
3803 zend_uint parent_trait_num = ce->parent ? ce->parent->num_traits : 0; in zend_do_implement_trait()
3805 for (i = 0; i < ce->num_traits; i++) { in zend_do_implement_trait()
3806 if (ce->traits[i] == NULL) { in zend_do_implement_trait()
3807 memmove(ce->traits + i, ce->traits + i + 1, sizeof(zend_class_entry*) * (--ce->num_traits - i)); in zend_do_implement_trait()
3809 } else if (ce->traits[i] == trait) { in zend_do_implement_trait()
3816 if (ce->num_traits >= current_trait_num) { in zend_do_implement_trait()
3817 if (ce->type == ZEND_INTERNAL_CLASS) { in zend_do_implement_trait()
3818ce->traits = (zend_class_entry **) realloc(ce->traits, sizeof(zend_class_entry *) * (++current_tra… in zend_do_implement_trait()
3820ce->traits = (zend_class_entry **) erealloc(ce->traits, sizeof(zend_class_entry *) * (++current_tr… in zend_do_implement_trait()
3823 ce->traits[ce->num_traits++] = trait; in zend_do_implement_trait()
3840 static void zend_add_magic_methods(zend_class_entry* ce, const char* mname, uint mname_len, zend_fu… in zend_add_magic_methods() argument
3843 ce->clone = fe; fe->common.fn_flags |= ZEND_ACC_CLONE; in zend_add_magic_methods()
3845 if (ce->constructor && (!ce->parent || ce->constructor != ce->parent->constructor)) { in zend_add_magic_methods()
3846 …zend_error(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ce->nam… in zend_add_magic_methods()
3848 ce->constructor = fe; fe->common.fn_flags |= ZEND_ACC_CTOR; in zend_add_magic_methods()
3850 ce->destructor = fe; fe->common.fn_flags |= ZEND_ACC_DTOR; in zend_add_magic_methods()
3852 ce->__get = fe; in zend_add_magic_methods()
3854 ce->__set = fe; in zend_add_magic_methods()
3856 ce->__call = fe; in zend_add_magic_methods()
3858 ce->__unset = fe; in zend_add_magic_methods()
3860 ce->__isset = fe; in zend_add_magic_methods()
3862 ce->__callstatic = fe; in zend_add_magic_methods()
3864 ce->__tostring = fe; in zend_add_magic_methods()
3865 } else if (ce->name_length + 1 == mname_len) { in zend_add_magic_methods()
3866 char *lowercase_name = emalloc(ce->name_length + 1); in zend_add_magic_methods()
3867 zend_str_tolower_copy(lowercase_name, ce->name, ce->name_length); in zend_add_magic_methods()
3868 …lowercase_name = (char*)zend_new_interned_string(lowercase_name, ce->name_length + 1, 1 TSRMLS_CC); in zend_add_magic_methods()
3870 if (ce->constructor && (!ce->parent || ce->constructor != ce->parent->constructor)) { in zend_add_magic_methods()
3871 …zend_error(E_COMPILE_ERROR, "%s has colliding constructor definitions coming from traits", ce->nam… in zend_add_magic_methods()
3873 ce->constructor = fe; in zend_add_magic_methods()
3881 static void zend_add_trait_method(zend_class_entry *ce, const char *name, const char *arKey, uint n… in zend_add_trait_method() argument
3886 …if (zend_hash_quick_find(&ce->function_table, arKey, nKeyLength, h, (void**) &existing_fn) == SUCC… in zend_add_trait_method()
3887 if (existing_fn->common.scope == ce) { in zend_add_trait_method()
3935 name, ce->name); in zend_add_trait_method()
3939 ce->name, name, in zend_add_trait_method()
3951 …zend_hash_quick_update(&ce->function_table, arKey, nKeyLength, h, fn, sizeof(zend_function), (void… in zend_add_trait_method()
3952 zend_add_magic_methods(ce, arKey, nKeyLength, fn TSRMLS_CC); in zend_add_trait_method()
3956 static int zend_fixup_trait_method(zend_function *fn, zend_class_entry *ce TSRMLS_DC) /* {{{ */ in zend_fixup_trait_method()
3960 fn->common.scope = ce; in zend_fixup_trait_method()
3963 ce->ce_flags |= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS; in zend_fixup_trait_method()
3966 ce->ce_flags |= ZEND_HAS_STATIC_IN_METHODS; in zend_fixup_trait_method()
3975 zend_class_entry *ce; in zend_traits_copy_functions() local
3984 ce = va_arg(args, zend_class_entry*); in zend_traits_copy_functions()
3991 if (ce->trait_aliases) { in zend_traits_copy_functions()
3992 alias_ptr = ce->trait_aliases; in zend_traits_copy_functions()
3997 && (!alias->trait_method->ce || fn->common.scope == alias->trait_method->ce) in zend_traits_copy_functions()
4008 …zend_add_trait_method(ce, alias->alias, lcname, alias->alias_len+1, &fn_copy, overriden TSRMLS_CC); in zend_traits_copy_functions()
4012 if (!alias->trait_method->ce) { in zend_traits_copy_functions()
4013 alias->trait_method->ce = fn->common.scope; in zend_traits_copy_functions()
4028 if (ce->trait_aliases) { in zend_traits_copy_functions()
4029 alias_ptr = ce->trait_aliases; in zend_traits_copy_functions()
4034 && (!alias->trait_method->ce || fn->common.scope == alias->trait_method->ce) in zend_traits_copy_functions()
4041 if (!alias->trait_method->ce) { in zend_traits_copy_functions()
4042 alias->trait_method->ce = fn->common.scope; in zend_traits_copy_functions()
4050 …zend_add_trait_method(ce, fn->common.function_name, lcname, fnname_len+1, &fn_copy, overriden TSRM… in zend_traits_copy_functions()
4057 static void zend_check_trait_usage(zend_class_entry *ce, zend_class_entry *trait TSRMLS_DC) /* {{{ … in zend_check_trait_usage() argument
4065 for (i = 0; i < ce->num_traits; i++) { in zend_check_trait_usage()
4066 if (ce->traits[i] == trait) { in zend_check_trait_usage()
4070 zend_error(E_COMPILE_ERROR, "Required Trait %s wasn't added to %s", trait->name, ce->name); in zend_check_trait_usage()
4074 static void zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /* {{{ */ in zend_traits_init_trait_structures()
4084 if (ce->trait_precedences) { in zend_traits_init_trait_structures()
4086 precedences = ce->trait_precedences; in zend_traits_init_trait_structures()
4087 ce->trait_precedences = NULL; in zend_traits_init_trait_structures()
4092 …if (!(cur_precedence->trait_method->ce = zend_fetch_class(cur_method_ref->class_name, cur_method_r… in zend_traits_init_trait_structures()
4096 zend_check_trait_usage(ce, cur_precedence->trait_method->ce TSRMLS_CC); in zend_traits_init_trait_structures()
4101 method_exists = zend_hash_exists(&cur_method_ref->ce->function_table, in zend_traits_init_trait_structures()
4108 cur_method_ref->ce->name, in zend_traits_init_trait_structures()
4126 zend_check_trait_usage(ce, cur_precedence->exclude_from_classes[j] TSRMLS_CC); in zend_traits_init_trait_structures()
4130 if (cur_precedence->trait_method->ce == cur_precedence->exclude_from_classes[j]) { in zend_traits_init_trait_structures()
4135 cur_precedence->trait_method->ce->name, in zend_traits_init_trait_structures()
4136 cur_precedence->trait_method->ce->name); in zend_traits_init_trait_structures()
4145 ce->trait_precedences = precedences; in zend_traits_init_trait_structures()
4148 if (ce->trait_aliases) { in zend_traits_init_trait_structures()
4150 while (ce->trait_aliases[i]) { in zend_traits_init_trait_structures()
4152 if (ce->trait_aliases[i]->trait_method->class_name) { in zend_traits_init_trait_structures()
4153 cur_method_ref = ce->trait_aliases[i]->trait_method; in zend_traits_init_trait_structures()
4154 …if (!(cur_method_ref->ce = zend_fetch_class(cur_method_ref->class_name, cur_method_ref->cname_len,… in zend_traits_init_trait_structures()
4157 zend_check_trait_usage(ce, cur_method_ref->ce TSRMLS_CC); in zend_traits_init_trait_structures()
4162 method_exists = zend_hash_exists(&cur_method_ref->ce->function_table, in zend_traits_init_trait_structures()
4167 …as was defined for %s::%s but this method does not exist", cur_method_ref->ce->name, cur_method_re… in zend_traits_init_trait_structures()
4205 static void zend_do_traits_method_binding(zend_class_entry *ce TSRMLS_DC) /* {{{ */ in zend_do_traits_method_binding()
4210 for (i = 0; i < ce->num_traits; i++) { in zend_do_traits_method_binding()
4211 if (ce->trait_precedences) { in zend_do_traits_method_binding()
4218 precedences = ce->trait_precedences; in zend_do_traits_method_binding()
4219 ce->trait_precedences = NULL; in zend_do_traits_method_binding()
4220 zend_traits_compile_exclude_table(&exclude_table, precedences, ce->traits[i]); in zend_do_traits_method_binding()
4223 …nd_hash_apply_with_arguments(&ce->traits[i]->function_table TSRMLS_CC, (apply_func_args_t)zend_tra… in zend_do_traits_method_binding()
4226 ce->trait_precedences = precedences; in zend_do_traits_method_binding()
4228 …nd_hash_apply_with_arguments(&ce->traits[i]->function_table TSRMLS_CC, (apply_func_args_t)zend_tra… in zend_do_traits_method_binding()
4232 …zend_hash_apply_with_argument(&ce->function_table, (apply_func_arg_t)zend_fixup_trait_method, ce T… in zend_do_traits_method_binding()
4234 if (ce->trait_precedences) { in zend_do_traits_method_binding()
4236 while (ce->trait_precedences[i]) { in zend_do_traits_method_binding()
4237 if (ce->trait_precedences[i]->exclude_from_classes) { in zend_do_traits_method_binding()
4238 efree(ce->trait_precedences[i]->exclude_from_classes); in zend_do_traits_method_binding()
4239 ce->trait_precedences[i]->exclude_from_classes = NULL; in zend_do_traits_method_binding()
4252 static zend_class_entry* find_first_definition(zend_class_entry *ce, size_t current_trait, const ch… in find_first_definition() argument
4256 if (coliding_ce == ce) { in find_first_definition()
4258 …if (zend_hash_quick_exists(&ce->traits[i]->properties_info, prop_name, prop_name_length+1, prop_ha… in find_first_definition()
4259 return ce->traits[i]; in find_first_definition()
4268 static void zend_do_traits_property_binding(zend_class_entry *ce TSRMLS_DC) /* {{{ */ in zend_do_traits_property_binding()
4288 for (i = 0; i < ce->num_traits; i++) { in zend_do_traits_property_binding()
4289 for (zend_hash_internal_pointer_reset(&ce->traits[i]->properties_info); in zend_do_traits_property_binding()
4290 zend_hash_get_current_data(&ce->traits[i]->properties_info, (void *) &property_info) == SUCCESS; in zend_do_traits_property_binding()
4291 zend_hash_move_forward(&ce->traits[i]->properties_info)) { in zend_do_traits_property_binding()
4308 …if (zend_hash_quick_find(&ce->properties_info, prop_name, prop_name_length+1, prop_hash, (void **)… in zend_do_traits_property_binding()
4310 zend_hash_quick_del(&ce->properties_info, prop_name, prop_name_length+1, prop_hash); in zend_do_traits_property_binding()
4318 ce->default_static_members_table[coliding_prop->offset], in zend_do_traits_property_binding()
4319 ce->traits[i]->default_static_members_table[property_info->offset] TSRMLS_CC)) in zend_do_traits_property_binding()
4323 ce->default_properties_table[coliding_prop->offset], in zend_do_traits_property_binding()
4324 ce->traits[i]->default_properties_table[property_info->offset] TSRMLS_CC)) in zend_do_traits_property_binding()
4335 … find_first_definition(ce, i, prop_name, prop_name_length, prop_hash, coliding_prop->ce)->name, in zend_do_traits_property_binding()
4336 property_info->ce->name, in zend_do_traits_property_binding()
4338 ce->name); in zend_do_traits_property_binding()
4342 … find_first_definition(ce, i, prop_name, prop_name_length, prop_hash, coliding_prop->ce)->name, in zend_do_traits_property_binding()
4343 property_info->ce->name, in zend_do_traits_property_binding()
4345 ce->name); in zend_do_traits_property_binding()
4353 prop_value = ce->traits[i]->default_static_members_table[property_info->offset]; in zend_do_traits_property_binding()
4355 prop_value = ce->traits[i]->default_properties_table[property_info->offset]; in zend_do_traits_property_binding()
4360 zend_declare_property_ex(ce, prop_name, prop_name_length, in zend_do_traits_property_binding()
4368 static void zend_do_check_for_inconsistent_traits_aliasing(zend_class_entry *ce TSRMLS_DC) /* {{{ */ in zend_do_check_for_inconsistent_traits_aliasing()
4374 if (ce->trait_aliases) { in zend_do_check_for_inconsistent_traits_aliasing()
4375 while (ce->trait_aliases[i]) { in zend_do_check_for_inconsistent_traits_aliasing()
4376 cur_alias = ce->trait_aliases[i]; in zend_do_check_for_inconsistent_traits_aliasing()
4379 if (!cur_alias->trait_method->ce) { in zend_do_check_for_inconsistent_traits_aliasing()
4397 if (zend_hash_exists(&ce->function_table, in zend_do_check_for_inconsistent_traits_aliasing()
4419 ZEND_API void zend_do_bind_traits(zend_class_entry *ce TSRMLS_DC) /* {{{ */ in zend_do_bind_traits()
4422 if (ce->num_traits <= 0) { in zend_do_bind_traits()
4427 zend_traits_init_trait_structures(ce TSRMLS_CC); in zend_do_bind_traits()
4430 zend_do_traits_method_binding(ce TSRMLS_CC); in zend_do_bind_traits()
4433 zend_do_check_for_inconsistent_traits_aliasing(ce TSRMLS_CC); in zend_do_bind_traits()
4436 zend_do_traits_property_binding(ce TSRMLS_CC); in zend_do_bind_traits()
4439 zend_verify_abstract_class(ce TSRMLS_CC); in zend_do_bind_traits()
4442 if (ce->ce_flags & ZEND_ACC_IMPLICIT_ABSTRACT_CLASS) { in zend_do_bind_traits()
4443 ce->ce_flags -= ZEND_ACC_IMPLICIT_ABSTRACT_CLASS; in zend_do_bind_traits()
4488 method_ref->ce = NULL; in zend_prepare_reference()
4511 zend_class_entry *ce = CG(active_class_entry); in zend_add_trait_alias() local
4534 zend_add_to_list(&ce->trait_aliases, trait_alias TSRMLS_CC); in zend_add_trait_alias()
4540 zend_class_entry *ce = CG(active_class_entry); in zend_add_trait_precedence() local
4546 zend_add_to_list(&ce->trait_precedences, trait_precedence TSRMLS_CC); in zend_add_trait_precedence()
4552 zend_class_entry *ce, **pce; in do_bind_class() local
4566 ce = *pce; in do_bind_class()
4568 ce->refcount++; in do_bind_class()
4569 …if (zend_hash_quick_add(class_table, Z_STRVAL_P(op2), Z_STRLEN_P(op2)+1, Z_HASH_P(op2), &ce, sizeo… in do_bind_class()
4570 ce->refcount--; in do_bind_class()
4577 zend_error(E_COMPILE_ERROR, "Cannot redeclare class %s", ce->name); in do_bind_class()
4581 …if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))… in do_bind_class()
4582 zend_verify_abstract_class(ce TSRMLS_CC); in do_bind_class()
4584 return ce; in do_bind_class()
4591 zend_class_entry *ce, **pce; in do_bind_inherited_class() local
4616 ce = *pce; in do_bind_inherited_class()
4620 …zend_error(E_COMPILE_ERROR, "Class %s cannot extend from interface %s", ce->name, parent_ce->name); in do_bind_inherited_class()
4622 zend_error(E_COMPILE_ERROR, "Class %s cannot extend from trait %s", ce->name, parent_ce->name); in do_bind_inherited_class()
4625 zend_do_inheritance(ce, parent_ce TSRMLS_CC); in do_bind_inherited_class()
4627 ce->refcount++; in do_bind_inherited_class()
4631 zend_error(E_COMPILE_ERROR, "Cannot redeclare class %s", ce->name); in do_bind_inherited_class()
4633 return ce; in do_bind_inherited_class()
5110 zend_class_entry *ce = CG(active_class_entry); in zend_do_end_class_declaration() local
5112 if (ce->constructor) { in zend_do_end_class_declaration()
5113 ce->constructor->common.fn_flags |= ZEND_ACC_CTOR; in zend_do_end_class_declaration()
5114 if (ce->constructor->common.fn_flags & ZEND_ACC_STATIC) { in zend_do_end_class_declaration()
5115 …zend_error(E_COMPILE_ERROR, "Constructor %s::%s() cannot be static", ce->name, ce->constructor->co… in zend_do_end_class_declaration()
5118 if (ce->destructor) { in zend_do_end_class_declaration()
5119 ce->destructor->common.fn_flags |= ZEND_ACC_DTOR; in zend_do_end_class_declaration()
5120 if (ce->destructor->common.fn_flags & ZEND_ACC_STATIC) { in zend_do_end_class_declaration()
5121 …zend_error(E_COMPILE_ERROR, "Destructor %s::%s() cannot be static", ce->name, ce->destructor->comm… in zend_do_end_class_declaration()
5124 if (ce->clone) { in zend_do_end_class_declaration()
5125 ce->clone->common.fn_flags |= ZEND_ACC_CLONE; in zend_do_end_class_declaration()
5126 if (ce->clone->common.fn_flags & ZEND_ACC_STATIC) { in zend_do_end_class_declaration()
5127 …zend_error(E_COMPILE_ERROR, "Clone method %s::%s() cannot be static", ce->name, ce->clone->common.… in zend_do_end_class_declaration()
5131 ce->info.user.line_end = zend_get_compiled_lineno(TSRMLS_C); in zend_do_end_class_declaration()
5136 if (ce->num_traits > 0) { in zend_do_end_class_declaration()
5139 ce->traits = NULL; in zend_do_end_class_declaration()
5140 ce->num_traits = 0; in zend_do_end_class_declaration()
5141 ce->ce_flags |= ZEND_ACC_IMPLEMENT_TRAITS; in zend_do_end_class_declaration()
5149 if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) in zend_do_end_class_declaration()
5150 && (parent_token || (ce->num_interfaces > 0))) { in zend_do_end_class_declaration()
5151 zend_verify_abstract_class(ce TSRMLS_CC); in zend_do_end_class_declaration()
5152 if (ce->num_interfaces && !(ce->ce_flags & ZEND_ACC_IMPLEMENT_TRAITS)) { in zend_do_end_class_declaration()
5160 if (ce->num_interfaces > 0) { in zend_do_end_class_declaration()
5161 ce->interfaces = NULL; in zend_do_end_class_declaration()
5162 ce->num_interfaces = 0; in zend_do_end_class_declaration()
5163 ce->ce_flags |= ZEND_ACC_IMPLEMENT_INTERFACES; in zend_do_end_class_declaration()
6816 ZEND_API void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify_handlers TSRMLS_DC… in zend_initialize_class_data() argument
6818 zend_bool persistent_hashes = (ce->type == ZEND_INTERNAL_CLASS) ? 1 : 0; in zend_initialize_class_data()
6821 ce->refcount = 1; in zend_initialize_class_data()
6822 ce->ce_flags = 0; in zend_initialize_class_data()
6824 ce->default_properties_table = NULL; in zend_initialize_class_data()
6825 ce->default_static_members_table = NULL; in zend_initialize_class_data()
6826 …zend_hash_init_ex(&ce->properties_info, 0, NULL, (dtor_func_t) (persistent_hashes ? zend_destroy_p… in zend_initialize_class_data()
6827 zend_hash_init_ex(&ce->constants_table, 0, NULL, zval_ptr_dtor_func, persistent_hashes, 0); in zend_initialize_class_data()
6828 zend_hash_init_ex(&ce->function_table, 0, NULL, ZEND_FUNCTION_DTOR, persistent_hashes, 0); in zend_initialize_class_data()
6830 if (ce->type == ZEND_INTERNAL_CLASS) { in zend_initialize_class_data()
6840 ce->static_members_table = (zval**)(zend_intptr_t)n; in zend_initialize_class_data()
6842 ce->static_members_table = NULL; in zend_initialize_class_data()
6845 ce->static_members_table = ce->default_static_members_table; in zend_initialize_class_data()
6846 ce->info.user.doc_comment = NULL; in zend_initialize_class_data()
6847 ce->info.user.doc_comment_len = 0; in zend_initialize_class_data()
6850 ce->default_properties_count = 0; in zend_initialize_class_data()
6851 ce->default_static_members_count = 0; in zend_initialize_class_data()
6854 ce->constructor = NULL; in zend_initialize_class_data()
6855 ce->destructor = NULL; in zend_initialize_class_data()
6856 ce->clone = NULL; in zend_initialize_class_data()
6857 ce->__get = NULL; in zend_initialize_class_data()
6858 ce->__set = NULL; in zend_initialize_class_data()
6859 ce->__unset = NULL; in zend_initialize_class_data()
6860 ce->__isset = NULL; in zend_initialize_class_data()
6861 ce->__call = NULL; in zend_initialize_class_data()
6862 ce->__callstatic = NULL; in zend_initialize_class_data()
6863 ce->__tostring = NULL; in zend_initialize_class_data()
6864 ce->create_object = NULL; in zend_initialize_class_data()
6865 ce->get_iterator = NULL; in zend_initialize_class_data()
6866 ce->iterator_funcs.funcs = NULL; in zend_initialize_class_data()
6867 ce->interface_gets_implemented = NULL; in zend_initialize_class_data()
6868 ce->get_static_method = NULL; in zend_initialize_class_data()
6869 ce->parent = NULL; in zend_initialize_class_data()
6870 ce->num_interfaces = 0; in zend_initialize_class_data()
6871 ce->interfaces = NULL; in zend_initialize_class_data()
6872 ce->num_traits = 0; in zend_initialize_class_data()
6873 ce->traits = NULL; in zend_initialize_class_data()
6874 ce->trait_aliases = NULL; in zend_initialize_class_data()
6875 ce->trait_precedences = NULL; in zend_initialize_class_data()
6876 ce->serialize = NULL; in zend_initialize_class_data()
6877 ce->unserialize = NULL; in zend_initialize_class_data()
6878 ce->serialize_func = NULL; in zend_initialize_class_data()
6879 ce->unserialize_func = NULL; in zend_initialize_class_data()
6880 if (ce->type == ZEND_INTERNAL_CLASS) { in zend_initialize_class_data()
6881 ce->info.internal.module = NULL; in zend_initialize_class_data()
6882 ce->info.internal.builtin_functions = NULL; in zend_initialize_class_data()