]> granicus.if.org Git - php/commitdiff
Generate zend class entries based on stubs
authorMáté Kocsis <kocsismate@woohoolabs.com>
Fri, 12 Feb 2021 22:33:09 +0000 (23:33 +0100)
committerMáté Kocsis <kocsismate@woohoolabs.com>
Sun, 14 Feb 2021 22:18:28 +0000 (23:18 +0100)
Closes GH-6685

15 files changed:
Zend/zend_attributes.c
Zend/zend_attributes.stub.php
Zend/zend_attributes_arginfo.h
Zend/zend_builtin_functions.stub.php
Zend/zend_builtin_functions_arginfo.h
Zend/zend_closures.c
Zend/zend_closures.stub.php
Zend/zend_closures_arginfo.h
Zend/zend_interfaces.c
Zend/zend_interfaces.h
Zend/zend_interfaces.stub.php
Zend/zend_interfaces_arginfo.h
Zend/zend_weakrefs.c
Zend/zend_weakrefs.stub.php
Zend/zend_weakrefs_arginfo.h

index 9921e6adb0c5353801685832433de9d123aea8b9..7d9cb617f533ac9871ba6ea39920dc96a45989a0 100644 (file)
@@ -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)
index 90f1a171db0b078c5de70d1e271e3407a03b108a..26defa8d4db6076925b4de93e0c1910bd5fca3fc 100644 (file)
@@ -1,8 +1,10 @@
 <?php
 
-/** @generate-function-entries */
+/** @generate-class-entries */
 
 final class Attribute
 {
+    public int $flags;
+
     public function __construct(int $flags = Attribute::TARGET_ALL) {}
 }
index 1b0da2ccb8dcf6054809d801b2773eae1eaf2f88..3b605ad891a074c520d610d3d164d58d2798c55f 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 54eede8541597ec2ac5c04e31d14e2db7e8c5556 */
+ * Stub hash: 0183e750e66999862a7688ecb251017110d06d1f */
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Attribute___construct, 0, 0, 0)
        ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "Attribute::TARGET_ALL")
@@ -13,3 +13,21 @@ static const zend_function_entry class_Attribute_methods[] = {
        ZEND_ME(Attribute, __construct, arginfo_class_Attribute___construct, ZEND_ACC_PUBLIC)
        ZEND_FE_END
 };
+
+zend_class_entry *register_class_Attribute()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "Attribute", class_Attribute_methods);
+       class_entry = zend_register_internal_class_ex(&ce, NULL);
+       class_entry->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;
+}
+
index 187e789d235bbdd96b3d2bf845c6da1d82cb3af3..6e6175a693dc6681e75fd89422676d5068def32d 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-/** @generate-function-entries */
+/** @generate-class-entries */
 
 function zend_version(): string {}
 
index e2d640d22fbc3742a703c42756ab1322d498b412..9124d6daf4682cd7f039297c276e3faa95f26367 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: b09e9199a21595a3b6f6c02db81c8e22c36c277f */
+ * Stub hash: b2216a294367f50c8b6208653ebf6fa43dc106d1 */
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0)
 ZEND_END_ARG_INFO()
@@ -333,3 +333,4 @@ static const zend_function_entry ext_functions[] = {
        ZEND_FE(gc_status, arginfo_gc_status)
        ZEND_FE_END
 };
+
index 8aed8622dc847d0b7c1c09e8f6794fd7777b17ac..c06f90fabc9a270fefb2dde1d0be0eae41eadea1 100644 (file)
@@ -629,11 +629,7 @@ ZEND_COLD ZEND_METHOD(Closure, __construct)
 
 void zend_register_closure_ce(void) /* {{{ */
 {
-       zend_class_entry ce;
-
-       INIT_CLASS_ENTRY(ce, "Closure", class_Closure_methods);
-       zend_ce_closure = zend_register_internal_class(&ce);
-       zend_ce_closure->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;
index 906dedc5cfe9e36f85d2ba744e9fa0ba4bbbd9dd..4bd93e241fa6e12e2115b0d038bff3ada9f24ce1 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-/** @generate-function-entries */
+/** @generate-class-entries */
 
 final class Closure
 {
index 1ccde0d6dd64884226103f240ebbe3f3744cdfa9..3295ab2cf2adbd0b105363f5ce1105b8182090db 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 0a2dd53716d30893aa5dd92a9907b2298abb3f70 */
+ * Stub hash: 62da9b1e75331f30a0c63e82c9fd366e26b5724d */
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Closure___construct, 0, 0, 0)
 ZEND_END_ARG_INFO()
@@ -40,3 +40,15 @@ static const zend_function_entry class_Closure_methods[] = {
        ZEND_ME(Closure, fromCallable, arginfo_class_Closure_fromCallable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
        ZEND_FE_END
 };
+
+zend_class_entry *register_class_Closure()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "Closure", class_Closure_methods);
+       class_entry = zend_register_internal_class_ex(&ce, NULL);
+       class_entry->ce_flags |= ZEND_ACC_FINAL;
+
+       return class_entry;
+}
+
index 35e8ebe7e0b284c9bb86577f0710c98864b1e1c8..275026f7382c80201253d6df98546f7295282444 100644 (file)
@@ -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;
index ecdc9b0e1b278d95a2b9965c3c8ffc48939045de..78aee0d39fc93a1d72c3548522d20f5c38b326c3 100644 (file)
@@ -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);
index 8b2cdae981389a41ac38f89f2710ce9c29a640c9..d1bd4a5037a2d29c2bf31955aa1fbdfdd9550ad3 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-/** @generate-function-entries */
+/** @generate-class-entries */
 
 interface Traversable {}
 
index 8a66da163607bb517b54a502f6802b9c9911d2fb..4bfe123c1da7418ad4de8156dc9240c687f99773 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: c6ef101bd3881348a74b60cecd22d1d7f80017c8 */
+ * Stub hash: 34aa50c74f10106c6abd0ed2956d41c98aae6452 */
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IteratorAggregate_getIterator, 0, 0, 0)
 ZEND_END_ARG_INFO()
@@ -119,3 +119,88 @@ static const zend_function_entry class_InternalIterator_methods[] = {
        ZEND_ME(InternalIterator, rewind, arginfo_class_InternalIterator_rewind, ZEND_ACC_PUBLIC)
        ZEND_FE_END
 };
+
+zend_class_entry *register_class_Traversable()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "Traversable", class_Traversable_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
+zend_class_entry *register_class_IteratorAggregate(zend_class_entry *class_entry_Traversable)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "IteratorAggregate", class_IteratorAggregate_methods);
+       class_entry = zend_register_internal_interface(&ce);
+       zend_class_implements(class_entry, 1, class_entry_Traversable);
+
+       return class_entry;
+}
+
+zend_class_entry *register_class_Iterator(zend_class_entry *class_entry_Traversable)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "Iterator", class_Iterator_methods);
+       class_entry = zend_register_internal_interface(&ce);
+       zend_class_implements(class_entry, 1, class_entry_Traversable);
+
+       return class_entry;
+}
+
+zend_class_entry *register_class_ArrayAccess()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "ArrayAccess", class_ArrayAccess_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
+zend_class_entry *register_class_Serializable()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "Serializable", class_Serializable_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
+zend_class_entry *register_class_Countable()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "Countable", class_Countable_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
+zend_class_entry *register_class_Stringable()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "Stringable", class_Stringable_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
+zend_class_entry *register_class_InternalIterator(zend_class_entry *class_entry_Iterator)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "InternalIterator", class_InternalIterator_methods);
+       class_entry = zend_register_internal_class_ex(&ce, NULL);
+       class_entry->ce_flags |= ZEND_ACC_FINAL;
+       zend_class_implements(class_entry, 1, class_entry_Iterator);
+
+       return class_entry;
+}
+
index 757d081349b657ce360bb85b84a5846a45f069df..13ab6c3bb8315ef426ed44f0363d839065f22d56 100644 (file)
@@ -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;
index c341e0a46366447ced76e032b7a8de4c3f7e0176..e8c0c3c92d46c752c03a4389971236f34658d674 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 
-/** @generate-function-entries */
+/** @generate-class-entries */
 
+/** @strict-properties */
 final class WeakReference
 {
     public function __construct() {}
@@ -11,6 +12,7 @@ final class WeakReference
     public function get(): ?object {}
 }
 
+/** @strict-properties */
 final class WeakMap implements ArrayAccess, Countable, IteratorAggregate
 {
     /**
index da953a9800e2bfb2b6396f61e8e0508700672e1b..43396f06287d867e0b5fae6928a08976612cacd8 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 0569bc7e10a1ec15a3a9eec481da27b647eb1d1d */
+ * Stub hash: 97fff017125955a3def85d9ed5a31746de7b808a */
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_WeakReference___construct, 0, 0, 0)
 ZEND_END_ARG_INFO()
@@ -63,3 +63,27 @@ static const zend_function_entry class_WeakMap_methods[] = {
        ZEND_ME(WeakMap, getIterator, arginfo_class_WeakMap_getIterator, ZEND_ACC_PUBLIC)
        ZEND_FE_END
 };
+
+zend_class_entry *register_class_WeakReference()
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_CLASS_ENTRY(ce, "WeakReference", class_WeakReference_methods);
+       class_entry = zend_register_internal_class_ex(&ce, NULL);
+       class_entry->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;
+}
+