diff --git a/Zend/zend_attributes.c b/Zend/zend_attributes.c index 9921e6adb0c53..7d9cb617f533a 100644 --- a/Zend/zend_attributes.c +++ b/Zend/zend_attributes.c @@ -263,15 +263,12 @@ ZEND_API zend_internal_attribute *zend_internal_attribute_get(zend_string *lcnam void zend_register_attribute_ce(void) { zend_internal_attribute *attr; - zend_class_entry ce; - zend_string *str; - zval tmp; zend_hash_init(&internal_attributes, 8, NULL, free_internal_attribute, 1); - INIT_CLASS_ENTRY(ce, "Attribute", class_Attribute_methods); - zend_ce_attribute = zend_register_internal_class(&ce); - zend_ce_attribute->ce_flags |= ZEND_ACC_FINAL; + zend_ce_attribute = register_class_Attribute(); + attr = zend_internal_attribute_register(zend_ce_attribute, ZEND_ATTRIBUTE_TARGET_CLASS); + attr->validator = validate_attribute; zend_declare_class_constant_long(zend_ce_attribute, ZEND_STRL("TARGET_CLASS"), ZEND_ATTRIBUTE_TARGET_CLASS); zend_declare_class_constant_long(zend_ce_attribute, ZEND_STRL("TARGET_FUNCTION"), ZEND_ATTRIBUTE_TARGET_FUNCTION); @@ -281,14 +278,6 @@ void zend_register_attribute_ce(void) zend_declare_class_constant_long(zend_ce_attribute, ZEND_STRL("TARGET_PARAMETER"), ZEND_ATTRIBUTE_TARGET_PARAMETER); zend_declare_class_constant_long(zend_ce_attribute, ZEND_STRL("TARGET_ALL"), ZEND_ATTRIBUTE_TARGET_ALL); zend_declare_class_constant_long(zend_ce_attribute, ZEND_STRL("IS_REPEATABLE"), ZEND_ATTRIBUTE_IS_REPEATABLE); - - ZVAL_UNDEF(&tmp); - str = zend_string_init(ZEND_STRL("flags"), 1); - zend_declare_typed_property(zend_ce_attribute, str, &tmp, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_CODE(IS_LONG, 0, 0)); - zend_string_release(str); - - attr = zend_internal_attribute_register(zend_ce_attribute, ZEND_ATTRIBUTE_TARGET_CLASS); - attr->validator = validate_attribute; } void zend_attributes_shutdown(void) diff --git a/Zend/zend_attributes.stub.php b/Zend/zend_attributes.stub.php index 90f1a171db0b0..26defa8d4db60 100644 --- a/Zend/zend_attributes.stub.php +++ b/Zend/zend_attributes.stub.php @@ -1,8 +1,10 @@ ce_flags |= ZEND_ACC_FINAL; + + zval property_flags_default_value; + ZVAL_UNDEF(&property_flags_default_value); + zend_string *property_flags_name = zend_string_init("flags", sizeof("flags") - 1, 1); + zend_declare_typed_property(class_entry, property_flags_name, &property_flags_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); + zend_string_release(property_flags_name); + + return class_entry; +} + diff --git a/Zend/zend_builtin_functions.stub.php b/Zend/zend_builtin_functions.stub.php index 187e789d235bb..6e6175a693dc6 100644 --- a/Zend/zend_builtin_functions.stub.php +++ b/Zend/zend_builtin_functions.stub.php @@ -1,6 +1,6 @@ ce_flags |= ZEND_ACC_FINAL; + zend_ce_closure = register_class_Closure(); zend_ce_closure->create_object = zend_closure_new; zend_ce_closure->serialize = zend_class_serialize_deny; zend_ce_closure->unserialize = zend_class_unserialize_deny; diff --git a/Zend/zend_closures.stub.php b/Zend/zend_closures.stub.php index 906dedc5cfe9e..4bd93e241fa6e 100644 --- a/Zend/zend_closures.stub.php +++ b/Zend/zend_closures.stub.php @@ -1,6 +1,6 @@ ce_flags |= ZEND_ACC_FINAL; + + return class_entry; +} + diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index 35e8ebe7e0b28..275026f7382c8 100644 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -596,31 +596,25 @@ ZEND_METHOD(InternalIterator, rewind) { /* {{{ zend_register_interfaces */ ZEND_API void zend_register_interfaces(void) { - zend_class_entry ce; + zend_ce_traversable = register_class_Traversable(); + zend_ce_traversable->interface_gets_implemented = zend_implement_traversable; - REGISTER_MAGIC_INTERFACE(traversable, Traversable); + zend_ce_aggregate = register_class_IteratorAggregate(zend_ce_traversable); + zend_ce_aggregate->interface_gets_implemented = zend_implement_aggregate; - REGISTER_MAGIC_INTERFACE(aggregate, IteratorAggregate); - REGISTER_MAGIC_IMPLEMENT(aggregate, traversable); + zend_ce_iterator = register_class_Iterator(zend_ce_traversable); + zend_ce_iterator->interface_gets_implemented = zend_implement_iterator; - REGISTER_MAGIC_INTERFACE(iterator, Iterator); - REGISTER_MAGIC_IMPLEMENT(iterator, traversable); + zend_ce_serializable = register_class_Serializable(); + zend_ce_serializable->interface_gets_implemented = zend_implement_serializable; - REGISTER_MAGIC_INTERFACE(serializable, Serializable); + zend_ce_arrayaccess = register_class_ArrayAccess(); - INIT_CLASS_ENTRY(ce, "ArrayAccess", class_ArrayAccess_methods); - zend_ce_arrayaccess = zend_register_internal_interface(&ce); + zend_ce_countable = register_class_Countable(); - INIT_CLASS_ENTRY(ce, "Countable", class_Countable_methods); - zend_ce_countable = zend_register_internal_interface(&ce); + zend_ce_stringable = register_class_Stringable(); - INIT_CLASS_ENTRY(ce, "Stringable", class_Stringable_methods); - zend_ce_stringable = zend_register_internal_interface(&ce); - - INIT_CLASS_ENTRY(ce, "InternalIterator", class_InternalIterator_methods); - zend_ce_internal_iterator = zend_register_internal_class(&ce); - zend_class_implements(zend_ce_internal_iterator, 1, zend_ce_iterator); - zend_ce_internal_iterator->ce_flags |= ZEND_ACC_FINAL; + zend_ce_internal_iterator = register_class_InternalIterator(zend_ce_iterator); zend_ce_internal_iterator->create_object = zend_internal_iterator_create; zend_ce_internal_iterator->serialize = zend_class_serialize_deny; zend_ce_internal_iterator->unserialize = zend_class_unserialize_deny; diff --git a/Zend/zend_interfaces.h b/Zend/zend_interfaces.h index ecdc9b0e1b278..78aee0d39fc93 100644 --- a/Zend/zend_interfaces.h +++ b/Zend/zend_interfaces.h @@ -49,17 +49,6 @@ ZEND_API zval* zend_call_method(zend_object *object, zend_class_entry *obj_ce, z #define zend_call_method_with_2_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2) \ zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2) -#define REGISTER_MAGIC_INTERFACE(class_name, class_name_str) \ - {\ - zend_class_entry ce;\ - INIT_CLASS_ENTRY(ce, # class_name_str, class_ ## class_name_str ## _methods) \ - zend_ce_ ## class_name = zend_register_internal_interface(&ce);\ - zend_ce_ ## class_name->interface_gets_implemented = zend_implement_ ## class_name;\ - } - -#define REGISTER_MAGIC_IMPLEMENT(class_name, interface_name) \ - zend_class_implements(zend_ce_ ## class_name, 1, zend_ce_ ## interface_name) - ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter); ZEND_API zend_result zend_user_it_valid(zend_object_iterator *_iter); ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key); diff --git a/Zend/zend_interfaces.stub.php b/Zend/zend_interfaces.stub.php index 8b2cdae981389..d1bd4a5037a2d 100644 --- a/Zend/zend_interfaces.stub.php +++ b/Zend/zend_interfaces.stub.php @@ -1,6 +1,6 @@ ce_flags |= ZEND_ACC_FINAL; + zend_class_implements(class_entry, 1, class_entry_Iterator); + + return class_entry; +} + diff --git a/Zend/zend_weakrefs.c b/Zend/zend_weakrefs.c index 757d081349b65..13ab6c3bb8315 100644 --- a/Zend/zend_weakrefs.c +++ b/Zend/zend_weakrefs.c @@ -597,11 +597,7 @@ ZEND_METHOD(WeakMap, getIterator) void zend_register_weakref_ce(void) /* {{{ */ { - zend_class_entry ce; - - INIT_CLASS_ENTRY(ce, "WeakReference", class_WeakReference_methods); - zend_ce_weakref = zend_register_internal_class(&ce); - zend_ce_weakref->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + zend_ce_weakref = register_class_WeakReference(); zend_ce_weakref->create_object = zend_weakref_new; zend_ce_weakref->serialize = zend_class_serialize_deny; @@ -613,11 +609,7 @@ void zend_register_weakref_ce(void) /* {{{ */ zend_weakref_handlers.free_obj = zend_weakref_free; zend_weakref_handlers.clone_obj = NULL; - INIT_CLASS_ENTRY(ce, "WeakMap", class_WeakMap_methods); - zend_ce_weakmap = zend_register_internal_class(&ce); - zend_ce_weakmap->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; - zend_class_implements( - zend_ce_weakmap, 3, zend_ce_arrayaccess, zend_ce_countable, zend_ce_aggregate); + zend_ce_weakmap = register_class_WeakMap(zend_ce_arrayaccess, zend_ce_countable, zend_ce_aggregate); zend_ce_weakmap->create_object = zend_weakmap_create_object; zend_ce_weakmap->get_iterator = zend_weakmap_get_iterator; diff --git a/Zend/zend_weakrefs.stub.php b/Zend/zend_weakrefs.stub.php index c341e0a463664..e8c0c3c92d46c 100644 --- a/Zend/zend_weakrefs.stub.php +++ b/Zend/zend_weakrefs.stub.php @@ -1,7 +1,8 @@ ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES; + + return class_entry; +} + +zend_class_entry *register_class_WeakMap(zend_class_entry *class_entry_ArrayAccess, zend_class_entry *class_entry_Countable, zend_class_entry *class_entry_IteratorAggregate) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "WeakMap", class_WeakMap_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES; + zend_class_implements(class_entry, 3, class_entry_ArrayAccess, class_entry_Countable, class_entry_IteratorAggregate); + + return class_entry; +} +