Skip to content

Commit 776f58d

Browse files
committed
Generate class entries via stubs
1 parent e77efd3 commit 776f58d

File tree

4 files changed

+87
-27
lines changed

4 files changed

+87
-27
lines changed

Zend/zend_exceptions.h

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ extern ZEND_API zend_class_entry *zend_ce_value_error;
3636
extern ZEND_API zend_class_entry *zend_ce_arithmetic_error;
3737
extern ZEND_API zend_class_entry *zend_ce_division_by_zero_error;
3838
extern ZEND_API zend_class_entry *zend_ce_unhandled_match_error;
39+
extern ZEND_API zend_class_entry *zend_ce_io;
3940

4041
ZEND_API void zend_exception_set_previous(zend_object *exception, zend_object *add_previous);
4142
ZEND_API void zend_exception_save(void);

ext/standard/io_exceptions.c

+7-25
Original file line numberDiff line numberDiff line change
@@ -30,35 +30,17 @@ PHPAPI zend_class_entry *zend_ce_insufficient_permissions;
3030
PHPAPI zend_class_entry *zend_ce_temporary_failure;
3131

3232
PHP_MINIT_FUNCTION(io_exceptions) {
33-
zend_class_entry ce;
34-
3533
/* Register interfaces */
36-
INIT_CLASS_ENTRY(ce, "FileSystem", class_FileSystem_methods);
37-
zend_ce_filesystem = zend_register_internal_interface(&ce);
38-
39-
INIT_CLASS_ENTRY(ce, "Network", class_Network_methods);
40-
zend_ce_network = zend_register_internal_interface(&ce);
34+
zend_ce_filesystem = register_class_FileSystem(zend_ce_io);
35+
zend_ce_network = register_class_Network(zend_ce_io);
4136

4237
/* Register exceptions */
43-
INIT_CLASS_ENTRY(ce, "FileSystemError", class_FileSystemError_methods);
44-
zend_ce_filesystem_error = zend_register_internal_class_ex(&ce, zend_ce_exception);
45-
zend_class_implements(zend_ce_filesystem_error, 1, zend_ce_filesystem);
46-
47-
INIT_CLASS_ENTRY(ce, "FileNotFound", class_FileNotFound_methods);
48-
zend_ce_file_not_found = zend_register_internal_class_ex(&ce, zend_ce_exception);
49-
zend_class_implements(zend_ce_file_not_found, 1, zend_ce_filesystem);
50-
51-
INIT_CLASS_ENTRY(ce, "NotDirectory", class_FileNotFound_methods);
52-
zend_ce_not_directory = zend_register_internal_class_ex(&ce, zend_ce_exception);
53-
zend_class_implements(zend_ce_not_directory, 1, zend_ce_filesystem);
54-
55-
INIT_CLASS_ENTRY(ce, "InsufficientPermissions", class_InsufficientPermissions_methods);
56-
zend_ce_insufficient_permissions = zend_register_internal_class_ex(&ce, zend_ce_exception);
57-
zend_class_implements(zend_ce_insufficient_permissions, 1, zend_ce_filesystem);
38+
zend_ce_filesystem_error = register_class_FileSystemError(zend_ce_exception, zend_ce_filesystem);
39+
zend_ce_file_not_found = register_class_FileNotFound(zend_ce_exception, zend_ce_filesystem);
40+
zend_ce_not_directory = register_class_NotDirectory(zend_ce_exception, zend_ce_filesystem);
41+
zend_ce_insufficient_permissions = register_class_InsufficientPermissions(zend_ce_exception, zend_ce_filesystem);
5842

59-
INIT_CLASS_ENTRY(ce, "TemporaryFailure", class_TemporaryFailure_methods);
60-
zend_ce_temporary_failure = zend_register_internal_class_ex(&ce, zend_ce_exception);
61-
zend_class_implements(zend_ce_temporary_failure, 1, zend_ce_network);
43+
zend_ce_temporary_failure = register_class_TemporaryFailure(zend_ce_exception, zend_ce_network);
6244

6345
return SUCCESS;
6446
}

ext/standard/io_exceptions.stub.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
/** @generate-function-entries */
3+
/** @generate-class-entries */
44

55
interface FileSystem extends IO {}
66

ext/standard/io_exceptions_arginfo.h

+78-1
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: c4ecc9d6fb58a424dc63d5c5a039843b89273142 */
2+
* Stub hash: a253c10f25a4e0cd8243881a3144a4f913c4b38f */
33

44

55

@@ -37,3 +37,80 @@ static const zend_function_entry class_InsufficientPermissions_methods[] = {
3737
static const zend_function_entry class_TemporaryFailure_methods[] = {
3838
ZEND_FE_END
3939
};
40+
41+
static zend_class_entry *register_class_FileSystem(zend_class_entry *class_entry_IO)
42+
{
43+
zend_class_entry ce, *class_entry;
44+
45+
INIT_CLASS_ENTRY(ce, "FileSystem", class_FileSystem_methods);
46+
class_entry = zend_register_internal_interface(&ce);
47+
zend_class_implements(class_entry, 1, class_entry_IO);
48+
49+
return class_entry;
50+
}
51+
52+
static zend_class_entry *register_class_Network(zend_class_entry *class_entry_IO)
53+
{
54+
zend_class_entry ce, *class_entry;
55+
56+
INIT_CLASS_ENTRY(ce, "Network", class_Network_methods);
57+
class_entry = zend_register_internal_interface(&ce);
58+
zend_class_implements(class_entry, 1, class_entry_IO);
59+
60+
return class_entry;
61+
}
62+
63+
static zend_class_entry *register_class_FileSystemError(zend_class_entry *class_entry_Exception, zend_class_entry *class_entry_FileSystem)
64+
{
65+
zend_class_entry ce, *class_entry;
66+
67+
INIT_CLASS_ENTRY(ce, "FileSystemError", class_FileSystemError_methods);
68+
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
69+
zend_class_implements(class_entry, 1, class_entry_FileSystem);
70+
71+
return class_entry;
72+
}
73+
74+
static zend_class_entry *register_class_FileNotFound(zend_class_entry *class_entry_Exception, zend_class_entry *class_entry_FileSystem)
75+
{
76+
zend_class_entry ce, *class_entry;
77+
78+
INIT_CLASS_ENTRY(ce, "FileNotFound", class_FileNotFound_methods);
79+
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
80+
zend_class_implements(class_entry, 1, class_entry_FileSystem);
81+
82+
return class_entry;
83+
}
84+
85+
static zend_class_entry *register_class_NotDirectory(zend_class_entry *class_entry_Exception, zend_class_entry *class_entry_FileSystem)
86+
{
87+
zend_class_entry ce, *class_entry;
88+
89+
INIT_CLASS_ENTRY(ce, "NotDirectory", class_NotDirectory_methods);
90+
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
91+
zend_class_implements(class_entry, 1, class_entry_FileSystem);
92+
93+
return class_entry;
94+
}
95+
96+
static zend_class_entry *register_class_InsufficientPermissions(zend_class_entry *class_entry_Exception, zend_class_entry *class_entry_FileSystem)
97+
{
98+
zend_class_entry ce, *class_entry;
99+
100+
INIT_CLASS_ENTRY(ce, "InsufficientPermissions", class_InsufficientPermissions_methods);
101+
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
102+
zend_class_implements(class_entry, 1, class_entry_FileSystem);
103+
104+
return class_entry;
105+
}
106+
107+
static zend_class_entry *register_class_TemporaryFailure(zend_class_entry *class_entry_Exception, zend_class_entry *class_entry_Network)
108+
{
109+
zend_class_entry ce, *class_entry;
110+
111+
INIT_CLASS_ENTRY(ce, "TemporaryFailure", class_TemporaryFailure_methods);
112+
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
113+
zend_class_implements(class_entry, 1, class_entry_Network);
114+
115+
return class_entry;
116+
}

0 commit comments

Comments
 (0)