Skip to content

Commit 6f795fe

Browse files
committed
Generate class entries for a few iterators
1 parent d358740 commit 6f795fe

16 files changed

+148
-60
lines changed

Zend/zend_generators.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1228,17 +1228,11 @@ zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval *ob
12281228

12291229
void zend_register_generator_ce(void) /* {{{ */
12301230
{
1231-
zend_class_entry ce;
1232-
1233-
INIT_CLASS_ENTRY(ce, "Generator", class_Generator_methods);
1234-
zend_ce_generator = zend_register_internal_class(&ce);
1235-
zend_ce_generator->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES;
1231+
zend_ce_generator = register_class_Generator(zend_ce_iterator);
12361232
zend_ce_generator->create_object = zend_generator_create;
12371233
zend_ce_generator->serialize = zend_class_serialize_deny;
12381234
zend_ce_generator->unserialize = zend_class_unserialize_deny;
1239-
12401235
/* get_iterator has to be assigned *after* implementing the interface */
1241-
zend_class_implements(zend_ce_generator, 1, zend_ce_iterator);
12421236
zend_ce_generator->get_iterator = zend_generator_get_iterator;
12431237

12441238
memcpy(&zend_generator_handlers, &std_object_handlers, sizeof(zend_object_handlers));
@@ -1248,7 +1242,6 @@ void zend_register_generator_ce(void) /* {{{ */
12481242
zend_generator_handlers.clone_obj = NULL;
12491243
zend_generator_handlers.get_constructor = zend_generator_get_constructor;
12501244

1251-
INIT_CLASS_ENTRY(ce, "ClosedGeneratorException", NULL);
1252-
zend_ce_ClosedGeneratorException = zend_register_internal_class_ex(&ce, zend_ce_exception);
1245+
zend_ce_ClosedGeneratorException = register_class_ClosedGeneratorException(zend_ce_exception);
12531246
}
12541247
/* }}} */

Zend/zend_generators.stub.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
<?php
22

3-
/** @generate-function-entries */
3+
/**
4+
* @generate-function-entries
5+
* @generate-class-entries
6+
*/
47

8+
/** @strict-properties */
59
final class Generator implements Iterator
610
{
711
public function rewind(): void {}
@@ -20,3 +24,7 @@ public function throw(Throwable $exception): mixed {}
2024

2125
public function getReturn(): mixed {}
2226
}
27+
28+
class ClosedGeneratorException extends Exception
29+
{
30+
}

Zend/zend_generators_arginfo.h

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 18d2bb68729ff622a5c0c124a8822f7ee882c2ec */
2+
* Stub hash: 9d6c2801abbb78d402efb2b2ccdd5242438bd6a1 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Generator_rewind, 0, 0, IS_VOID, 0)
55
ZEND_END_ARG_INFO()
@@ -46,3 +46,31 @@ static const zend_function_entry class_Generator_methods[] = {
4646
ZEND_ME(Generator, getReturn, arginfo_class_Generator_getReturn, ZEND_ACC_PUBLIC)
4747
ZEND_FE_END
4848
};
49+
50+
51+
static const zend_function_entry class_ClosedGeneratorException_methods[] = {
52+
ZEND_FE_END
53+
};
54+
55+
zend_class_entry *register_class_Generator(zend_class_entry *class_entry_Iterator)
56+
{
57+
zend_class_entry ce, *class_entry;
58+
59+
INIT_CLASS_ENTRY(ce, "Generator", class_Generator_methods);
60+
class_entry = zend_register_internal_class_ex(&ce, NULL);
61+
class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES;
62+
zend_class_implements(class_entry, 1, class_entry_Iterator);
63+
64+
return class_entry;
65+
}
66+
67+
zend_class_entry *register_class_ClosedGeneratorException(zend_class_entry *class_entry_Exception)
68+
{
69+
zend_class_entry ce, *class_entry;
70+
71+
INIT_CLASS_ENTRY(ce, "ClosedGeneratorException", class_ClosedGeneratorException_methods);
72+
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
73+
74+
return class_entry;
75+
}
76+

build/gen_stub.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,14 +1009,15 @@ public function getRegistration(): string
10091009
$code .= "\tclass_entry->ce_flags |= " . $this->getFlagsAsString() . ";\n";
10101010
}
10111011

1012-
foreach ($this->implements as $implements) {
1013-
$code .= "\tzend_class_implements(class_entry, 1, class_entry_" . implode("_", $implements->parts) . ");\n";
1014-
}
1012+
$implements = array_map(
1013+
function (Name $item) {
1014+
return "class_entry_" . implode("_", $item->parts);
1015+
},
1016+
$this->type === "interface" ? $this->extends : $this->implements
1017+
);
10151018

1016-
if ($this->type === "interface" && $this->extends) {
1017-
foreach ($this->extends as $extends) {
1018-
$code .= "\tzend_class_implements(class_entry, 1, class_entry_" . implode("_", $extends->parts) . ");\n";
1019-
}
1019+
if (!empty($implements)) {
1020+
$code .= "\tzend_class_implements(class_entry, " . count($implements) . ", " . implode(", ", $implements) . ");\n";
10201021
}
10211022

10221023
if ($this->alias) {

ext/intl/common/common.stub.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<?php
22

3-
/** @generate-function-entries */
3+
/**
4+
* @generate-function-entries
5+
* @generate-class-entries
6+
*/
47

58
class IntlIterator implements Iterator
69
{

ext/intl/common/common_arginfo.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: cf905a693064ae31b6434e84f6c63bf7c9b804a6 */
2+
* Stub hash: 88ed89560edf65b73b27618d3dafa40d54432c2d */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_IntlIterator_current, 0, 0, 0)
55
ZEND_END_ARG_INFO()
@@ -28,3 +28,15 @@ static const zend_function_entry class_IntlIterator_methods[] = {
2828
ZEND_ME(IntlIterator, valid, arginfo_class_IntlIterator_valid, ZEND_ACC_PUBLIC)
2929
ZEND_FE_END
3030
};
31+
32+
zend_class_entry *register_class_IntlIterator(zend_class_entry *class_entry_Iterator)
33+
{
34+
zend_class_entry ce, *class_entry;
35+
36+
INIT_CLASS_ENTRY(ce, "IntlIterator", class_IntlIterator_methods);
37+
class_entry = zend_register_internal_class_ex(&ce, NULL);
38+
zend_class_implements(class_entry, 1, class_entry_Iterator);
39+
40+
return class_entry;
41+
}
42+

ext/intl/common/common_enum.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -286,15 +286,10 @@ PHP_METHOD(IntlIterator, valid)
286286
*/
287287
U_CFUNC void intl_register_IntlIterator_class(void)
288288
{
289-
zend_class_entry ce;
290-
291289
/* Create and register 'IntlIterator' class. */
292-
INIT_CLASS_ENTRY(ce, "IntlIterator", class_IntlIterator_methods);
293-
ce.create_object = IntlIterator_object_create;
294-
IntlIterator_ce_ptr = zend_register_internal_class(&ce);
290+
IntlIterator_ce_ptr = register_class_IntlIterator(zend_ce_iterator);
291+
IntlIterator_ce_ptr->create_object = IntlIterator_object_create;
295292
IntlIterator_ce_ptr->get_iterator = IntlIterator_get_iterator;
296-
zend_class_implements(IntlIterator_ce_ptr, 1,
297-
zend_ce_iterator);
298293

299294
memcpy(&IntlIterator_handlers, &std_object_handlers,
300295
sizeof IntlIterator_handlers);

ext/intl/resourcebundle/resourcebundle.stub.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<?php
22

3-
/** @generate-function-entries */
3+
/**
4+
* @generate-function-entries
5+
* @generate-class-entries
6+
*/
47

58
class ResourceBundle implements IteratorAggregate, Countable
69
{

ext/intl/resourcebundle/resourcebundle_arginfo.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: ba5e5a57404b44d2be662e9a6b5abb1a44ccfb22 */
2+
* Stub hash: 474a5f2d63f94aaf68c92839bb343d74179111a7 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ResourceBundle___construct, 0, 0, 2)
55
ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 1)
@@ -50,3 +50,15 @@ static const zend_function_entry class_ResourceBundle_methods[] = {
5050
ZEND_ME(ResourceBundle, getIterator, arginfo_class_ResourceBundle_getIterator, ZEND_ACC_PUBLIC)
5151
ZEND_FE_END
5252
};
53+
54+
zend_class_entry *register_class_ResourceBundle(zend_class_entry *class_entry_IteratorAggregate, zend_class_entry *class_entry_Countable)
55+
{
56+
zend_class_entry ce, *class_entry;
57+
58+
INIT_CLASS_ENTRY(ce, "ResourceBundle", class_ResourceBundle_methods);
59+
class_entry = zend_register_internal_class_ex(&ce, NULL);
60+
zend_class_implements(class_entry, 2, class_entry_IteratorAggregate, class_entry_Countable);
61+
62+
return class_entry;
63+
}
64+

ext/intl/resourcebundle/resourcebundle_class.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -365,22 +365,15 @@ PHP_METHOD(ResourceBundle, getIterator) {
365365
*/
366366
void resourcebundle_register_class( void )
367367
{
368-
zend_class_entry ce;
369-
370-
INIT_CLASS_ENTRY( ce, "ResourceBundle", class_ResourceBundle_methods );
371-
372-
ce.create_object = ResourceBundle_object_create;
373-
ce.get_iterator = resourcebundle_get_iterator;
374-
375-
ResourceBundle_ce_ptr = zend_register_internal_class( &ce );
368+
ResourceBundle_ce_ptr = register_class_ResourceBundle(zend_ce_aggregate, zend_ce_countable);
369+
ResourceBundle_ce_ptr->create_object = ResourceBundle_object_create;
370+
ResourceBundle_ce_ptr->get_iterator = resourcebundle_get_iterator;
376371

377372
ResourceBundle_object_handlers = std_object_handlers;
378373
ResourceBundle_object_handlers.offset = XtOffsetOf(ResourceBundle_object, zend);
379374
ResourceBundle_object_handlers.clone_obj = NULL; /* ICU ResourceBundle has no clone implementation */
380375
ResourceBundle_object_handlers.free_obj = ResourceBundle_object_free;
381376
ResourceBundle_object_handlers.read_dimension = resourcebundle_array_get;
382377
ResourceBundle_object_handlers.count_elements = resourcebundle_array_count;
383-
384-
zend_class_implements(ResourceBundle_ce_ptr, 2, zend_ce_aggregate, zend_ce_countable);
385378
}
386379
/* }}} */

0 commit comments

Comments
 (0)