Skip to content

Commit e446f0f

Browse files
committed
Support parsing php 8.1 enum doc comments
Requires php/php-src#6984 (php 8.1 has no public alphas yet)
1 parent b8fa288 commit e446f0f

File tree

7 files changed

+44
-21
lines changed

7 files changed

+44
-21
lines changed

ast_data.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ const zend_ast_kind ast_kinds[] = {
9797
ZEND_AST_MATCH,
9898
ZEND_AST_MATCH_ARM,
9999
ZEND_AST_NAMED_ARG,
100-
ZEND_AST_ENUM_CASE,
101100
ZEND_AST_METHOD_CALL,
102101
ZEND_AST_NULLSAFE_METHOD_CALL,
103102
ZEND_AST_STATIC_CALL,
@@ -106,6 +105,7 @@ const zend_ast_kind ast_kinds[] = {
106105
ZEND_AST_CATCH,
107106
ZEND_AST_FOR,
108107
ZEND_AST_FOREACH,
108+
ZEND_AST_ENUM_CASE,
109109
ZEND_AST_PARAM,
110110
};
111111

@@ -209,7 +209,6 @@ const char *ast_kind_to_name(zend_ast_kind kind) {
209209
case ZEND_AST_MATCH: return "AST_MATCH";
210210
case ZEND_AST_MATCH_ARM: return "AST_MATCH_ARM";
211211
case ZEND_AST_NAMED_ARG: return "AST_NAMED_ARG";
212-
case ZEND_AST_ENUM_CASE: return "AST_ENUM_CASE";
213212
case ZEND_AST_METHOD_CALL: return "AST_METHOD_CALL";
214213
case ZEND_AST_NULLSAFE_METHOD_CALL: return "AST_NULLSAFE_METHOD_CALL";
215214
case ZEND_AST_STATIC_CALL: return "AST_STATIC_CALL";
@@ -218,6 +217,7 @@ const char *ast_kind_to_name(zend_ast_kind kind) {
218217
case ZEND_AST_CATCH: return "AST_CATCH";
219218
case ZEND_AST_FOR: return "AST_FOR";
220219
case ZEND_AST_FOREACH: return "AST_FOREACH";
220+
case ZEND_AST_ENUM_CASE: return "AST_ENUM_CASE";
221221
case ZEND_AST_PARAM: return "AST_PARAM";
222222
}
223223

@@ -654,13 +654,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
654654
case 1: return AST_STR(str_expr);
655655
}
656656
return NULL;
657-
case ZEND_AST_ENUM_CASE:
658-
switch (child) {
659-
case 0: return AST_STR(str_name);
660-
case 1: return AST_STR(str_expr);
661-
case 2: return AST_STR(str_attributes);
662-
}
663-
return NULL;
664657
case ZEND_AST_METHOD_CALL:
665658
switch (child) {
666659
case 0: return AST_STR(str_expr);
@@ -719,6 +712,14 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
719712
case 3: return AST_STR(str_stmts);
720713
}
721714
return NULL;
715+
case ZEND_AST_ENUM_CASE:
716+
switch (child) {
717+
case 0: return AST_STR(str_name);
718+
case 1: return AST_STR(str_expr);
719+
case 2: return AST_STR(str_docComment);
720+
case 3: return AST_STR(str_attributes);
721+
}
722+
return NULL;
722723
case ZEND_AST_PARAM:
723724
switch (child) {
724725
case 0: return AST_STR(str_type);
@@ -830,7 +831,6 @@ void ast_register_kind_constants(INIT_FUNC_ARGS) {
830831
REGISTER_NS_LONG_CONSTANT("ast", "AST_MATCH", ZEND_AST_MATCH, CONST_CS | CONST_PERSISTENT);
831832
REGISTER_NS_LONG_CONSTANT("ast", "AST_MATCH_ARM", ZEND_AST_MATCH_ARM, CONST_CS | CONST_PERSISTENT);
832833
REGISTER_NS_LONG_CONSTANT("ast", "AST_NAMED_ARG", ZEND_AST_NAMED_ARG, CONST_CS | CONST_PERSISTENT);
833-
REGISTER_NS_LONG_CONSTANT("ast", "AST_ENUM_CASE", ZEND_AST_ENUM_CASE, CONST_CS | CONST_PERSISTENT);
834834
REGISTER_NS_LONG_CONSTANT("ast", "AST_METHOD_CALL", ZEND_AST_METHOD_CALL, CONST_CS | CONST_PERSISTENT);
835835
REGISTER_NS_LONG_CONSTANT("ast", "AST_NULLSAFE_METHOD_CALL", ZEND_AST_NULLSAFE_METHOD_CALL, CONST_CS | CONST_PERSISTENT);
836836
REGISTER_NS_LONG_CONSTANT("ast", "AST_STATIC_CALL", ZEND_AST_STATIC_CALL, CONST_CS | CONST_PERSISTENT);
@@ -839,5 +839,6 @@ void ast_register_kind_constants(INIT_FUNC_ARGS) {
839839
REGISTER_NS_LONG_CONSTANT("ast", "AST_CATCH", ZEND_AST_CATCH, CONST_CS | CONST_PERSISTENT);
840840
REGISTER_NS_LONG_CONSTANT("ast", "AST_FOR", ZEND_AST_FOR, CONST_CS | CONST_PERSISTENT);
841841
REGISTER_NS_LONG_CONSTANT("ast", "AST_FOREACH", ZEND_AST_FOREACH, CONST_CS | CONST_PERSISTENT);
842+
REGISTER_NS_LONG_CONSTANT("ast", "AST_ENUM_CASE", ZEND_AST_ENUM_CASE, CONST_CS | CONST_PERSISTENT);
842843
REGISTER_NS_LONG_CONSTANT("ast", "AST_PARAM", ZEND_AST_PARAM, CONST_CS | CONST_PERSISTENT);
843844
}

ast_stub.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@
103103
const AST_MATCH = 548;
104104
const AST_MATCH_ARM = 549;
105105
const AST_NAMED_ARG = 550;
106-
const AST_ENUM_CASE = 777;
107106
const AST_METHOD_CALL = 768;
108107
const AST_NULLSAFE_METHOD_CALL = 769;
109108
const AST_STATIC_CALL = 770;
@@ -112,6 +111,7 @@
112111
const AST_CATCH = 773;
113112
const AST_FOR = 1024;
114113
const AST_FOREACH = 1025;
114+
const AST_ENUM_CASE = 1026;
115115
const AST_PARAM = 1280;
116116
// END AST KIND CONSTANTS
117117

package.xml

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,18 @@
1818
<email>tandre@php.net</email>
1919
<active>yes</active>
2020
</lead>
21-
<date>2021-04-20</date>
21+
<date>2021-05-14</date>
2222
<version>
23-
<release>1.0.11</release>
24-
<api>1.0.11</api>
23+
<release>1.0.12dev</release>
24+
<api>1.0.12dev</api>
2525
</version>
2626
<stability>
27-
<release>stable</release>
27+
<release>alpha</release>
2828
<api>stable</api>
2929
</stability>
3030
<license uri="https://github.com/nikic/php-ast/blob/master/LICENSE">BSD-3-Clause</license>
3131
<notes>
32-
- Add the experimental AST version 85.
33-
- Support php 8.1 enums, add 'type' (for enum type) to AST_CLASS nodes in AST version 85+.
34-
- Support php 8.1 'never' return type.
32+
- Support parsing 'docComment' on php 8.1 enums
3533
</notes>
3634
<contents>
3735
<dir name="/">
@@ -140,6 +138,23 @@
140138
<providesextension>ast</providesextension>
141139
<extsrcrelease />
142140
<changelog>
141+
<release>
142+
<date>2021-04-20</date>
143+
<version>
144+
<release>1.0.11</release>
145+
<api>1.0.11</api>
146+
</version>
147+
<stability>
148+
<release>stable</release>
149+
<api>stable</api>
150+
</stability>
151+
<license uri="https://github.com/nikic/php-ast/blob/master/LICENSE">BSD-3-Clause</license>
152+
<notes>
153+
- Add the experimental AST version 85.
154+
- Support php 8.1 enums, add 'type' (for enum type) to AST_CLASS nodes in AST version 85+.
155+
- Support php 8.1 'never' return type.
156+
</notes>
157+
</release>
143158
<release>
144159
<date>2020-09-12</date>
145160
<version>

php_ast.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
extern zend_module_entry ast_module_entry;
88
#define phpext_ast_ptr &ast_module_entry
99

10-
#define PHP_AST_VERSION "1.0.11"
10+
#define PHP_AST_VERSION "1.0.12dev"
1111

1212
#ifdef PHP_WIN32
1313
# define PHP_AST_API __declspec(dllexport)

scripts/generate_ast_data.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@
134134
'ZEND_AST_MATCH' => ['cond', 'stmts'],
135135
'ZEND_AST_MATCH_ARM' => ['cond', 'expr'],
136136
'ZEND_AST_NAMED_ARG' => ['name', 'expr'],
137-
'ZEND_AST_ENUM_CASE' => ['name', 'expr', 'attributes'],
138137

139138
/* 3 child nodes */
140139
'ZEND_AST_METHOD_CALL' => ['expr', 'method', 'args'],
@@ -148,6 +147,7 @@
148147
/* 4 child nodes */
149148
'ZEND_AST_FOR' => ['init', 'cond', 'loop', 'stmts'],
150149
'ZEND_AST_FOREACH' => ['expr', 'value', 'key', 'stmts'],
150+
'ZEND_AST_ENUM_CASE' => ['name', 'expr', 'docComment', 'attributes'],
151151

152152
/* 5 child nodes */
153153
'ZEND_AST_PARAM' => ['type', 'name', 'default', 'attributes', 'docComment'],

tests/metadata.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ AST_ATTRIBUTE: []
122122
AST_MATCH: []
123123
AST_MATCH_ARM: []
124124
AST_NAMED_ARG: []
125-
AST_ENUM_CASE: []
126125
AST_METHOD_CALL: []
127126
AST_NULLSAFE_METHOD_CALL: []
128127
AST_STATIC_CALL: []
@@ -131,4 +130,5 @@ AST_TRY: []
131130
AST_CATCH: []
132131
AST_FOR: []
133132
AST_FOREACH: []
133+
AST_ENUM_CASE: []
134134
AST_PARAM: (combinable) [PARAM_REF, PARAM_VARIADIC, PARAM_MODIFIER_PUBLIC, PARAM_MODIFIER_PROTECTED, PARAM_MODIFIER_PRIVATE]

tests/php81_enums.phpt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ enum HasValue: int {
1616
1717
#[MyAttribute(1)]
1818
enum NoValue {
19+
/** Case doc comment */
1920
#[OtherAttribute()]
2021
case FOO;
2122
}
@@ -39,6 +40,7 @@ AST_STMT_LIST
3940
0: AST_ENUM_CASE
4041
name: "FOO"
4142
expr: 42
43+
docComment: null
4244
attributes: null
4345
1: AST_CLASS_CONST_DECL
4446
flags: MODIFIER_PUBLIC (%d)
@@ -61,6 +63,7 @@ AST_STMT_LIST
6163
0: AST_ENUM_CASE
6264
name: "FOO"
6365
expr: null
66+
docComment: "/** Case doc comment */"
6467
attributes: AST_ATTRIBUTE_LIST
6568
0: AST_ATTRIBUTE_GROUP
6669
0: AST_ATTRIBUTE
@@ -80,6 +83,7 @@ AST_STMT_LIST
8083
0: AST_ENUM_CASE
8184
name: "FOO"
8285
expr: 42
86+
docComment: null
8387
attributes: null
8488
1: AST_CLASS_CONST_GROUP
8589
flags: MODIFIER_PUBLIC (%d)
@@ -106,6 +110,7 @@ AST_STMT_LIST
106110
0: AST_ENUM_CASE
107111
name: "FOO"
108112
expr: null
113+
docComment: "/** Case doc comment */"
109114
attributes: AST_ATTRIBUTE_LIST
110115
0: AST_ATTRIBUTE_GROUP
111116
0: AST_ATTRIBUTE
@@ -133,6 +138,7 @@ AST_STMT_LIST
133138
0: AST_ENUM_CASE
134139
name: "FOO"
135140
expr: 42
141+
docComment: null
136142
attributes: null
137143
1: AST_CLASS_CONST_GROUP
138144
flags: MODIFIER_PUBLIC (%d)
@@ -161,6 +167,7 @@ AST_STMT_LIST
161167
0: AST_ENUM_CASE
162168
name: "FOO"
163169
expr: null
170+
docComment: "/** Case doc comment */"
164171
attributes: AST_ATTRIBUTE_LIST
165172
0: AST_ATTRIBUTE_GROUP
166173
0: AST_ATTRIBUTE

0 commit comments

Comments
 (0)