Skip to content

Commit 14da1cb

Browse files
authored
Add support for class constants in stubs (#7434)
1 parent dfb68fe commit 14da1cb

15 files changed

+1669
-422
lines changed

Zend/zend_constants.c

+2-17
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "zend_operators.h"
2626
#include "zend_globals.h"
2727
#include "zend_API.h"
28+
#include "zend_constants_arginfo.h"
2829

2930
/* Protection from recursive self-referencing class constants */
3031
#define IS_CONSTANT_VISITED_MARK 0x80
@@ -108,23 +109,7 @@ void zend_startup_constants(void)
108109

109110
void zend_register_standard_constants(void)
110111
{
111-
REGISTER_MAIN_LONG_CONSTANT("E_ERROR", E_ERROR, CONST_PERSISTENT | CONST_CS);
112-
REGISTER_MAIN_LONG_CONSTANT("E_RECOVERABLE_ERROR", E_RECOVERABLE_ERROR, CONST_PERSISTENT | CONST_CS);
113-
REGISTER_MAIN_LONG_CONSTANT("E_WARNING", E_WARNING, CONST_PERSISTENT | CONST_CS);
114-
REGISTER_MAIN_LONG_CONSTANT("E_PARSE", E_PARSE, CONST_PERSISTENT | CONST_CS);
115-
REGISTER_MAIN_LONG_CONSTANT("E_NOTICE", E_NOTICE, CONST_PERSISTENT | CONST_CS);
116-
REGISTER_MAIN_LONG_CONSTANT("E_STRICT", E_STRICT, CONST_PERSISTENT | CONST_CS);
117-
REGISTER_MAIN_LONG_CONSTANT("E_DEPRECATED", E_DEPRECATED, CONST_PERSISTENT | CONST_CS);
118-
REGISTER_MAIN_LONG_CONSTANT("E_CORE_ERROR", E_CORE_ERROR, CONST_PERSISTENT | CONST_CS);
119-
REGISTER_MAIN_LONG_CONSTANT("E_CORE_WARNING", E_CORE_WARNING, CONST_PERSISTENT | CONST_CS);
120-
REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_ERROR", E_COMPILE_ERROR, CONST_PERSISTENT | CONST_CS);
121-
REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_WARNING", E_COMPILE_WARNING, CONST_PERSISTENT | CONST_CS);
122-
REGISTER_MAIN_LONG_CONSTANT("E_USER_ERROR", E_USER_ERROR, CONST_PERSISTENT | CONST_CS);
123-
REGISTER_MAIN_LONG_CONSTANT("E_USER_WARNING", E_USER_WARNING, CONST_PERSISTENT | CONST_CS);
124-
REGISTER_MAIN_LONG_CONSTANT("E_USER_NOTICE", E_USER_NOTICE, CONST_PERSISTENT | CONST_CS);
125-
REGISTER_MAIN_LONG_CONSTANT("E_USER_DEPRECATED", E_USER_DEPRECATED, CONST_PERSISTENT | CONST_CS);
126-
127-
REGISTER_MAIN_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT | CONST_CS);
112+
register_zend_constants_consts(0);
128113

129114
REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_PROVIDE_OBJECT", DEBUG_BACKTRACE_PROVIDE_OBJECT, CONST_PERSISTENT | CONST_CS);
130115
REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT | CONST_CS);

Zend/zend_constants.stub.php

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
<?php
2+
3+
/** @generate-class-entries */
4+
5+
/**
6+
* @var int
7+
* @cname E_ERROR
8+
*/
9+
const E_ERROR = UNKNOWN;
10+
11+
/**
12+
* @var int
13+
* @cname E_WARNING
14+
*/
15+
const E_WARNING = UNKNOWN;
16+
17+
/**
18+
* @var int
19+
* @cname E_PARSE
20+
*/
21+
const E_PARSE = UNKNOWN;
22+
23+
/**
24+
* @var int
25+
* @cname E_NOTICE
26+
*/
27+
const E_NOTICE = UNKNOWN;
28+
29+
/**
30+
* @var int
31+
* @cname E_CORE_ERROR
32+
*/
33+
const E_CORE_ERROR = UNKNOWN;
34+
35+
/**
36+
* @var int
37+
* @cname E_CORE_WARNING
38+
*/
39+
const E_CORE_WARNING = UNKNOWN;
40+
41+
/**
42+
* @var int
43+
* @cname E_COMPILE_ERROR
44+
*/
45+
const E_COMPILE_ERROR = UNKNOWN;
46+
47+
/**
48+
* @var int
49+
* @cname E_COMPILE_WARNING
50+
*/
51+
const E_COMPILE_WARNING = UNKNOWN;
52+
53+
/**
54+
* @var int
55+
* @cname E_USER_ERROR
56+
*/
57+
const E_USER_ERROR = UNKNOWN;
58+
59+
/**
60+
* @var int
61+
* @cname E_USER_WARNING
62+
*/
63+
const E_USER_WARNING = UNKNOWN;
64+
65+
/**
66+
* @var int
67+
* @cname E_USER_NOTICE
68+
*/
69+
const E_USER_NOTICE = UNKNOWN;
70+
71+
/**
72+
* @var int
73+
* @cname E_STRICT
74+
*/
75+
const E_STRICT = UNKNOWN;
76+
77+
/**
78+
* @var int
79+
* @cname E_RECOVERABLE_ERROR
80+
*/
81+
const E_RECOVERABLE_ERROR = UNKNOWN;
82+
83+
/**
84+
* @var int
85+
* @cname E_DEPRECATED
86+
*/
87+
const E_DEPRECATED = UNKNOWN;
88+
89+
/**
90+
* @var int
91+
* @cname E_USER_DEPRECATED
92+
*/
93+
const E_USER_DEPRECATED = UNKNOWN;
94+
95+
/**
96+
* @var int
97+
* @cname E_ALL
98+
*/
99+
const E_ALL = UNKNOWN;

Zend/zend_constants_arginfo.h

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/* This is a generated file, edit the .stub.php file instead.
2+
* Stub hash: f417ea0f3a43036f0abc87856c83f4c93395405a */
3+
4+
5+
6+
static void register_zend_constants_consts(int module_number)
7+
{
8+
REGISTER_LONG_CONSTANT("E_ERROR", E_ERROR, CONST_CS | CONST_PERSISTENT);
9+
REGISTER_LONG_CONSTANT("E_WARNING", E_WARNING, CONST_CS | CONST_PERSISTENT);
10+
REGISTER_LONG_CONSTANT("E_PARSE", E_PARSE, CONST_CS | CONST_PERSISTENT);
11+
REGISTER_LONG_CONSTANT("E_NOTICE", E_NOTICE, CONST_CS | CONST_PERSISTENT);
12+
REGISTER_LONG_CONSTANT("E_CORE_ERROR", E_CORE_ERROR, CONST_CS | CONST_PERSISTENT);
13+
REGISTER_LONG_CONSTANT("E_CORE_WARNING", E_CORE_WARNING, CONST_CS | CONST_PERSISTENT);
14+
REGISTER_LONG_CONSTANT("E_COMPILE_ERROR", E_COMPILE_ERROR, CONST_CS | CONST_PERSISTENT);
15+
REGISTER_LONG_CONSTANT("E_COMPILE_WARNING", E_COMPILE_WARNING, CONST_CS | CONST_PERSISTENT);
16+
REGISTER_LONG_CONSTANT("E_USER_ERROR", E_USER_ERROR, CONST_CS | CONST_PERSISTENT);
17+
REGISTER_LONG_CONSTANT("E_USER_WARNING", E_USER_WARNING, CONST_CS | CONST_PERSISTENT);
18+
REGISTER_LONG_CONSTANT("E_USER_NOTICE", E_USER_NOTICE, CONST_CS | CONST_PERSISTENT);
19+
REGISTER_LONG_CONSTANT("E_STRICT", E_STRICT, CONST_CS | CONST_PERSISTENT);
20+
REGISTER_LONG_CONSTANT("E_RECOVERABLE_ERROR", E_RECOVERABLE_ERROR, CONST_CS | CONST_PERSISTENT);
21+
REGISTER_LONG_CONSTANT("E_DEPRECATED", E_DEPRECATED, CONST_CS | CONST_PERSISTENT);
22+
REGISTER_LONG_CONSTANT("E_USER_DEPRECATED", E_USER_DEPRECATED, CONST_CS | CONST_PERSISTENT);
23+
REGISTER_LONG_CONSTANT("E_ALL", E_ALL, CONST_CS | CONST_PERSISTENT);
24+
}

Zend/zend_exceptions.c

-5
Original file line numberDiff line numberDiff line change
@@ -753,11 +753,6 @@ void zend_register_default_exception(void) /* {{{ */
753753
zend_ce_error_exception = register_class_ErrorException(zend_ce_exception);
754754
zend_ce_error_exception->create_object = zend_error_exception_new;
755755

756-
/* Declared manually because it uses constant E_ERROR. */
757-
zval severity_default_value;
758-
ZVAL_LONG(&severity_default_value, E_ERROR);
759-
zend_declare_typed_property(zend_ce_error_exception, ZSTR_KNOWN(ZEND_STR_SEVERITY), &severity_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
760-
761756
zend_ce_error = register_class_Error(zend_ce_throwable);
762757
zend_ce_error->create_object = zend_default_exception_new;
763758

Zend/zend_exceptions_arginfo.h

+6
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,12 @@ static zend_class_entry *register_class_ErrorException(zend_class_entry *class_e
259259
INIT_CLASS_ENTRY(ce, "ErrorException", class_ErrorException_methods);
260260
class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception);
261261

262+
zval property_severity_default_value;
263+
ZVAL_LONG(&property_severity_default_value, E_ERROR);
264+
zend_string *property_severity_name = zend_string_init("severity", sizeof("severity") - 1, 1);
265+
zend_declare_typed_property(class_entry, property_severity_name, &property_severity_default_value, ZEND_ACC_PROTECTED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
266+
zend_string_release(property_severity_name);
267+
262268
return class_entry;
263269
}
264270

0 commit comments

Comments
 (0)