Skip to content

Commit 443d3fd

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 443d3fd

File tree

4 files changed

+20
-12
lines changed

4 files changed

+20
-12
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

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/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)