Skip to content

Commit 66de07d

Browse files
committed
Revert "Support php 8.0 "Constructor Promotion" and attributes"
This reverts commit b0370e6.
1 parent 426e7ea commit 66de07d

16 files changed

+36
-516
lines changed

.travis.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ php:
99
- 7.4
1010
- nightly
1111

12-
matrix:
13-
allow_failures:
14-
- php: master
15-
1612
before_script:
1713
- phpize
1814
- ./configure

README.md

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,9 @@ ast\flags\CLASS_TRAIT
253253
ast\flags\CLASS_INTERFACE
254254
ast\flags\CLASS_ANONYMOUS
255255
256-
// Used by ast\AST_PARAM (combinable)
256+
// Used by ast\AST_PARAM (cominable)
257257
ast\flags\PARAM_REF
258258
ast\flags\PARAM_VARIADIC
259-
ast\flags\MODIFIER_PUBLIC
260-
ast\flags\MODIFIER_PROTECTED
261-
ast\flags\MODIFIER_PRIVATE
262259
263260
// Used by ast\AST_TYPE (exclusive)
264261
ast\flags\TYPE_ARRAY
@@ -364,22 +361,20 @@ This section lists the AST node kinds that are supported and the names of their
364361

365362
```
366363
AST_ARRAY_ELEM: value, key
367-
AST_ARROW_FUNC: name, docComment, params, stmts, returnType, attributes
364+
AST_ARROW_FUNC: name, docComment, params, stmts, returnType
368365
AST_ASSIGN: var, expr
369366
AST_ASSIGN_OP: var, expr
370367
AST_ASSIGN_REF: var, expr
371-
AST_ATTRIBUTE: class, args // php 8.0+ attributes
372368
AST_BINARY_OP: left, right
373369
AST_BREAK: depth
374370
AST_CALL: expr, args
375371
AST_CAST: expr
376372
AST_CATCH: class, var, stmts
377373
AST_CLASS: name, docComment, extends, implements, stmts
378374
AST_CLASS_CONST: class, const
379-
AST_CLASS_CONST_GROUP class, attributes // version 80+
380375
AST_CLASS_NAME: class // version 70+
381376
AST_CLONE: expr
382-
AST_CLOSURE: name, docComment, params, uses, stmts, returnType, attributes
377+
AST_CLOSURE: name, docComment, params, uses, stmts, returnType
383378
AST_CLOSURE_VAR: name
384379
AST_CONDITIONAL: cond, true, false
385380
AST_CONST: name
@@ -393,7 +388,7 @@ AST_EMPTY: expr
393388
AST_EXIT: expr
394389
AST_FOR: init, cond, loop, stmts
395390
AST_FOREACH: expr, value, key, stmts
396-
AST_FUNC_DECL: name, docComment, params, stmts, returnType, attributes
391+
AST_FUNC_DECL: name, docComment, params, stmts, returnType
397392
uses // prior to version 60
398393
AST_GLOBAL: var
399394
AST_GOTO: label
@@ -405,23 +400,23 @@ AST_INSTANCEOF: expr, class
405400
AST_ISSET: var
406401
AST_LABEL: name
407402
AST_MAGIC_CONST:
408-
AST_METHOD: name, docComment, params, stmts, returnType, attributes
403+
AST_METHOD: name, docComment, params, stmts, returnType
409404
uses // prior to version 60
410405
AST_METHOD_CALL: expr, method, args
411406
AST_METHOD_REFERENCE: class, method
412407
AST_NAME: name
413408
AST_NAMESPACE: name, stmts
414409
AST_NEW: class, args
415410
AST_NULLABLE_TYPE: type // Used only since PHP 7.1
416-
AST_PARAM: type, name, default, attributes, docComment
411+
AST_PARAM: type, name, default
417412
AST_POST_DEC: var
418413
AST_POST_INC: var
419414
AST_PRE_DEC: var
420415
AST_PRE_INC: var
421416
AST_PRINT: expr
422417
AST_PROP: expr, prop
423418
AST_PROP_ELEM: name, default, docComment
424-
AST_PROP_GROUP: type, props, attributes // version 70+
419+
AST_PROP_GROUP: type, props // version 70+
425420
AST_REF: var // only used in foreach ($a as &$v)
426421
AST_RETURN: expr
427422
AST_SHELL_EXEC: expr
@@ -448,7 +443,6 @@ AST_YIELD_FROM: expr
448443
// List nodes (numerically indexed children):
449444
AST_ARG_LIST
450445
AST_ARRAY
451-
AST_ATTRIBUTE_LIST // php 8.0+ attributes
452446
AST_CATCH_LIST
453447
AST_CLASS_CONST_DECL
454448
AST_CLOSURE_USES
@@ -489,7 +483,6 @@ are listed.
489483
Available since 1.0.7 (XXX).
490484

491485
* `mixed` type hints are now reported as an `AST_TYPE` with type `TYPE_MIXED` instead of an `AST_NAME`.
492-
* `AST_CLASS_CONST_GROUP` nodes are emitted for php 8.0 class constant declarations with a `const` and an optional `attributes` node.
493486

494487
### 70 (current)
495488

ast.c

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,6 @@ static const char *class_flags[] = {
107107
static const char *param_flags[] = {
108108
AST_FLAG(PARAM_REF),
109109
AST_FLAG(PARAM_VARIADIC),
110-
#if PHP_VERSION_ID >= 80000
111-
AST_FLAG(MODIFIER_PUBLIC),
112-
AST_FLAG(MODIFIER_PROTECTED),
113-
AST_FLAG(MODIFIER_PRIVATE),
114-
#endif
115110
NULL
116111
};
117112

@@ -292,8 +287,6 @@ static const ast_flag_info flag_info[] = {
292287
{ ZEND_AST_CONDITIONAL, 1, conditional_flags },
293288
};
294289

295-
// NOTE(tandre) in php 8, to get a writeable pointer to a property, Z_OBJ_HT_P(zv)->get_property_ptr_ptr(Z_OBJ_P(zv), AST_STR(str_propname), BP_VAR_RW, AST_CACHE_SLOT_PROPNAME); can be used.
296-
297290
static inline void ast_update_property(zval *object, zend_string *name, zval *value, void **cache_slot) {
298291
#if PHP_VERSION_ID < 80000
299292
zval name_zv;
@@ -375,7 +368,7 @@ static inline zend_bool ast_is_name(zend_ast *ast, zend_ast *parent, uint32_t i)
375368
return 1;
376369
}
377370
#if PHP_VERSION_ID >= 80000
378-
if (parent->kind == ZEND_AST_TYPE_UNION || parent->kind == ZEND_AST_ATTRIBUTE) {
371+
if (parent->kind == ZEND_AST_TYPE_UNION) {
379372
return 1;
380373
}
381374
#endif
@@ -514,11 +507,7 @@ static inline zend_ast_attr ast_assign_op_to_binary_op(zend_ast_attr attr) {
514507
static inline zend_ast **ast_get_children(zend_ast *ast, uint32_t *count) {
515508
if (ast_kind_is_decl(ast->kind)) {
516509
zend_ast_decl *decl = (zend_ast_decl *) ast;
517-
#if PHP_VERSION_ID >= 80000
518-
*count = decl->kind == ZEND_AST_CLASS ? 4 : 5;
519-
#else
520510
*count = decl->kind == ZEND_AST_CLASS ? 3 : 4;
521-
#endif
522511
return decl->child;
523512
} else if (zend_ast_is_list(ast)) {
524513
zend_ast_list *list = zend_ast_get_list(ast);
@@ -633,23 +622,6 @@ static void ast_fill_children_ht(HashTable *ht, zend_ast *ast, ast_state_info_t
633622
}
634623
}
635624

636-
#if PHP_VERSION_ID >= 80000
637-
if (child == NULL) {
638-
if (i == 4) {
639-
if (ast_kind == ZEND_AST_PARAM || ast_kind == ZEND_AST_METHOD || ast_kind == ZEND_AST_FUNC_DECL || ast_kind == ZEND_AST_CLOSURE || ast_kind == ZEND_AST_ARROW_FUNC) {
640-
continue;
641-
}
642-
} else if (i == 3) {
643-
if (ast_kind == ZEND_AST_PARAM || ast_kind == ZEND_AST_CLASS) {
644-
continue;
645-
}
646-
} else if (i == 2) {
647-
if (ast_kind == ZEND_AST_PROP_GROUP) {
648-
continue;
649-
}
650-
}
651-
}
652-
#endif
653625
/* This AST_CATCH check should occur before ast_is_name() */
654626
#if PHP_VERSION_ID < 70100
655627
if (ast_kind == ZEND_AST_CATCH && i == 0) {
@@ -783,15 +755,6 @@ static void ast_to_zval(zval *zv, zend_ast *ast, ast_state_info_t *state) {
783755
ast->kind = ZEND_AST_UNARY_OP;
784756
ast->attr = AST_MINUS;
785757
break;
786-
#if PHP_VERSION_ID >= 80000
787-
case ZEND_AST_CLASS_CONST_GROUP:
788-
// ast->child is [AST_CLASS_CONST_DECL, optional attributes_list]
789-
if (state->version < 80) {
790-
// Keep class constants as a list of numerically indexed values in php 8
791-
ast_to_zval(zv, ast->child[0], state);
792-
return;
793-
}
794-
#endif
795758
#if PHP_VERSION_ID >= 70400
796759
case ZEND_AST_PROP_GROUP:
797760
if (state->version < 70) {
@@ -921,16 +884,6 @@ static void ast_to_zval(zval *zv, zend_ast *ast, ast_state_info_t *state) {
921884
ast_update_property_long(&prop_group_zval, AST_STR(str_flags), 0, AST_CACHE_SLOT_FLAGS);
922885
}
923886
#endif
924-
#if PHP_VERSION_ID < 80000
925-
if (ast->kind == ZEND_AST_CLASS_CONST_DECL && state->version >= 80) {
926-
zval const_decl_zval = *zv;
927-
zval attributes_zval = *zv;
928-
ZVAL_NULL(&attributes_zval);
929-
// For version 80, create an AST_CLASS_CONST_GROUP wrapping the created AST_CLASS_CONST_DECL
930-
ast_create_virtual_node_ex(
931-
zv, ZEND_AST_CLASS_CONST_GROUP, 0, zend_ast_get_lineno(ast), state, 2, &const_decl_zval, &attributes_zval);
932-
}
933-
#endif
934887
}
935888

936889
static const zend_long versions[] = {50, 60, 70, 80};

ast_data.c

Lines changed: 10 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ const zend_ast_kind ast_kinds[] = {
1919
ZEND_AST_TRAIT_ADAPTATIONS,
2020
ZEND_AST_USE,
2121
ZEND_AST_TYPE_UNION,
22-
ZEND_AST_ATTRIBUTE_LIST,
2322
AST_NAME,
2423
AST_CLOSURE_VAR,
2524
AST_NULLABLE_TYPE,
@@ -59,7 +58,6 @@ const zend_ast_kind ast_kinds[] = {
5958
ZEND_AST_BREAK,
6059
ZEND_AST_CONTINUE,
6160
ZEND_AST_CLASS_NAME,
62-
ZEND_AST_CLASS_CONST_GROUP,
6361
ZEND_AST_DIM,
6462
ZEND_AST_PROP,
6563
ZEND_AST_STATIC_PROP,
@@ -90,15 +88,14 @@ const zend_ast_kind ast_kinds[] = {
9088
ZEND_AST_USE_ELEM,
9189
ZEND_AST_TRAIT_ALIAS,
9290
ZEND_AST_GROUP_USE,
93-
ZEND_AST_ATTRIBUTE,
9491
ZEND_AST_METHOD_CALL,
9592
ZEND_AST_STATIC_CALL,
9693
ZEND_AST_CONDITIONAL,
9794
ZEND_AST_TRY,
9895
ZEND_AST_CATCH,
96+
ZEND_AST_PARAM,
9997
ZEND_AST_FOR,
10098
ZEND_AST_FOREACH,
101-
ZEND_AST_PARAM,
10299
};
103100

104101
const size_t ast_kinds_count = sizeof(ast_kinds) / sizeof(ast_kinds[0]);
@@ -123,7 +120,6 @@ const char *ast_kind_to_name(zend_ast_kind kind) {
123120
case ZEND_AST_TRAIT_ADAPTATIONS: return "AST_TRAIT_ADAPTATIONS";
124121
case ZEND_AST_USE: return "AST_USE";
125122
case ZEND_AST_TYPE_UNION: return "AST_TYPE_UNION";
126-
case ZEND_AST_ATTRIBUTE_LIST: return "AST_ATTRIBUTE_LIST";
127123
case AST_NAME: return "AST_NAME";
128124
case AST_CLOSURE_VAR: return "AST_CLOSURE_VAR";
129125
case AST_NULLABLE_TYPE: return "AST_NULLABLE_TYPE";
@@ -163,7 +159,6 @@ const char *ast_kind_to_name(zend_ast_kind kind) {
163159
case ZEND_AST_BREAK: return "AST_BREAK";
164160
case ZEND_AST_CONTINUE: return "AST_CONTINUE";
165161
case ZEND_AST_CLASS_NAME: return "AST_CLASS_NAME";
166-
case ZEND_AST_CLASS_CONST_GROUP: return "AST_CLASS_CONST_GROUP";
167162
case ZEND_AST_DIM: return "AST_DIM";
168163
case ZEND_AST_PROP: return "AST_PROP";
169164
case ZEND_AST_STATIC_PROP: return "AST_STATIC_PROP";
@@ -194,15 +189,14 @@ const char *ast_kind_to_name(zend_ast_kind kind) {
194189
case ZEND_AST_USE_ELEM: return "AST_USE_ELEM";
195190
case ZEND_AST_TRAIT_ALIAS: return "AST_TRAIT_ALIAS";
196191
case ZEND_AST_GROUP_USE: return "AST_GROUP_USE";
197-
case ZEND_AST_ATTRIBUTE: return "AST_ATTRIBUTE";
198192
case ZEND_AST_METHOD_CALL: return "AST_METHOD_CALL";
199193
case ZEND_AST_STATIC_CALL: return "AST_STATIC_CALL";
200194
case ZEND_AST_CONDITIONAL: return "AST_CONDITIONAL";
201195
case ZEND_AST_TRY: return "AST_TRY";
202196
case ZEND_AST_CATCH: return "AST_CATCH";
197+
case ZEND_AST_PARAM: return "AST_PARAM";
203198
case ZEND_AST_FOR: return "AST_FOR";
204199
case ZEND_AST_FOREACH: return "AST_FOREACH";
205-
case ZEND_AST_PARAM: return "AST_PARAM";
206200
}
207201

208202
return NULL;
@@ -231,7 +225,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
231225
case 1: return AST_STR(str_uses);
232226
case 2: return AST_STR(str_stmts);
233227
case 3: return AST_STR(str_returnType);
234-
case 4: return AST_STR(str_attributes);
235228
}
236229
return NULL;
237230
case ZEND_AST_CLOSURE:
@@ -240,7 +233,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
240233
case 1: return AST_STR(str_uses);
241234
case 2: return AST_STR(str_stmts);
242235
case 3: return AST_STR(str_returnType);
243-
case 4: return AST_STR(str_attributes);
244236
}
245237
return NULL;
246238
case ZEND_AST_METHOD:
@@ -249,7 +241,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
249241
case 1: return AST_STR(str_uses);
250242
case 2: return AST_STR(str_stmts);
251243
case 3: return AST_STR(str_returnType);
252-
case 4: return AST_STR(str_attributes);
253244
}
254245
return NULL;
255246
case ZEND_AST_ARROW_FUNC:
@@ -258,7 +249,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
258249
case 1: return AST_STR(str_uses);
259250
case 2: return AST_STR(str_stmts);
260251
case 3: return AST_STR(str_returnType);
261-
case 4: return AST_STR(str_attributes);
262252
}
263253
return NULL;
264254
case ZEND_AST_CLASS:
@@ -417,12 +407,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
417407
case 0: return AST_STR(str_class);
418408
}
419409
return NULL;
420-
case ZEND_AST_CLASS_CONST_GROUP:
421-
switch (child) {
422-
case 0: return AST_STR(str_const);
423-
case 1: return AST_STR(str_attributes);
424-
}
425-
return NULL;
426410
case ZEND_AST_DIM:
427411
switch (child) {
428412
case 0: return AST_STR(str_expr);
@@ -605,12 +589,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
605589
case 1: return AST_STR(str_uses);
606590
}
607591
return NULL;
608-
case ZEND_AST_ATTRIBUTE:
609-
switch (child) {
610-
case 0: return AST_STR(str_class);
611-
case 1: return AST_STR(str_args);
612-
}
613-
return NULL;
614592
case ZEND_AST_METHOD_CALL:
615593
switch (child) {
616594
case 0: return AST_STR(str_expr);
@@ -646,6 +624,13 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
646624
case 2: return AST_STR(str_stmts);
647625
}
648626
return NULL;
627+
case ZEND_AST_PARAM:
628+
switch (child) {
629+
case 0: return AST_STR(str_type);
630+
case 1: return AST_STR(str_name);
631+
case 2: return AST_STR(str_default);
632+
}
633+
return NULL;
649634
case ZEND_AST_FOR:
650635
switch (child) {
651636
case 0: return AST_STR(str_init);
@@ -662,15 +647,6 @@ zend_string *ast_kind_child_name(zend_ast_kind kind, uint32_t child) {
662647
case 3: return AST_STR(str_stmts);
663648
}
664649
return NULL;
665-
case ZEND_AST_PARAM:
666-
switch (child) {
667-
case 0: return AST_STR(str_type);
668-
case 1: return AST_STR(str_name);
669-
case 2: return AST_STR(str_default);
670-
case 3: return AST_STR(str_attributes);
671-
case 4: return AST_STR(str_docComment);
672-
}
673-
return NULL;
674650
}
675651

676652
return NULL;
@@ -695,7 +671,6 @@ void ast_register_kind_constants(INIT_FUNC_ARGS) {
695671
REGISTER_NS_LONG_CONSTANT("ast", "AST_TRAIT_ADAPTATIONS", ZEND_AST_TRAIT_ADAPTATIONS, CONST_CS | CONST_PERSISTENT);
696672
REGISTER_NS_LONG_CONSTANT("ast", "AST_USE", ZEND_AST_USE, CONST_CS | CONST_PERSISTENT);
697673
REGISTER_NS_LONG_CONSTANT("ast", "AST_TYPE_UNION", ZEND_AST_TYPE_UNION, CONST_CS | CONST_PERSISTENT);
698-
REGISTER_NS_LONG_CONSTANT("ast", "AST_ATTRIBUTE_LIST", ZEND_AST_ATTRIBUTE_LIST, CONST_CS | CONST_PERSISTENT);
699674
REGISTER_NS_LONG_CONSTANT("ast", "AST_NAME", AST_NAME, CONST_CS | CONST_PERSISTENT);
700675
REGISTER_NS_LONG_CONSTANT("ast", "AST_CLOSURE_VAR", AST_CLOSURE_VAR, CONST_CS | CONST_PERSISTENT);
701676
REGISTER_NS_LONG_CONSTANT("ast", "AST_NULLABLE_TYPE", AST_NULLABLE_TYPE, CONST_CS | CONST_PERSISTENT);
@@ -735,7 +710,6 @@ void ast_register_kind_constants(INIT_FUNC_ARGS) {
735710
REGISTER_NS_LONG_CONSTANT("ast", "AST_BREAK", ZEND_AST_BREAK, CONST_CS | CONST_PERSISTENT);
736711
REGISTER_NS_LONG_CONSTANT("ast", "AST_CONTINUE", ZEND_AST_CONTINUE, CONST_CS | CONST_PERSISTENT);
737712
REGISTER_NS_LONG_CONSTANT("ast", "AST_CLASS_NAME", ZEND_AST_CLASS_NAME, CONST_CS | CONST_PERSISTENT);
738-
REGISTER_NS_LONG_CONSTANT("ast", "AST_CLASS_CONST_GROUP", ZEND_AST_CLASS_CONST_GROUP, CONST_CS | CONST_PERSISTENT);
739713
REGISTER_NS_LONG_CONSTANT("ast", "AST_DIM", ZEND_AST_DIM, CONST_CS | CONST_PERSISTENT);
740714
REGISTER_NS_LONG_CONSTANT("ast", "AST_PROP", ZEND_AST_PROP, CONST_CS | CONST_PERSISTENT);
741715
REGISTER_NS_LONG_CONSTANT("ast", "AST_STATIC_PROP", ZEND_AST_STATIC_PROP, CONST_CS | CONST_PERSISTENT);
@@ -766,13 +740,12 @@ void ast_register_kind_constants(INIT_FUNC_ARGS) {
766740
REGISTER_NS_LONG_CONSTANT("ast", "AST_USE_ELEM", ZEND_AST_USE_ELEM, CONST_CS | CONST_PERSISTENT);
767741
REGISTER_NS_LONG_CONSTANT("ast", "AST_TRAIT_ALIAS", ZEND_AST_TRAIT_ALIAS, CONST_CS | CONST_PERSISTENT);
768742
REGISTER_NS_LONG_CONSTANT("ast", "AST_GROUP_USE", ZEND_AST_GROUP_USE, CONST_CS | CONST_PERSISTENT);
769-
REGISTER_NS_LONG_CONSTANT("ast", "AST_ATTRIBUTE", ZEND_AST_ATTRIBUTE, CONST_CS | CONST_PERSISTENT);
770743
REGISTER_NS_LONG_CONSTANT("ast", "AST_METHOD_CALL", ZEND_AST_METHOD_CALL, CONST_CS | CONST_PERSISTENT);
771744
REGISTER_NS_LONG_CONSTANT("ast", "AST_STATIC_CALL", ZEND_AST_STATIC_CALL, CONST_CS | CONST_PERSISTENT);
772745
REGISTER_NS_LONG_CONSTANT("ast", "AST_CONDITIONAL", ZEND_AST_CONDITIONAL, CONST_CS | CONST_PERSISTENT);
773746
REGISTER_NS_LONG_CONSTANT("ast", "AST_TRY", ZEND_AST_TRY, CONST_CS | CONST_PERSISTENT);
774747
REGISTER_NS_LONG_CONSTANT("ast", "AST_CATCH", ZEND_AST_CATCH, CONST_CS | CONST_PERSISTENT);
748+
REGISTER_NS_LONG_CONSTANT("ast", "AST_PARAM", ZEND_AST_PARAM, CONST_CS | CONST_PERSISTENT);
775749
REGISTER_NS_LONG_CONSTANT("ast", "AST_FOR", ZEND_AST_FOR, CONST_CS | CONST_PERSISTENT);
776750
REGISTER_NS_LONG_CONSTANT("ast", "AST_FOREACH", ZEND_AST_FOREACH, CONST_CS | CONST_PERSISTENT);
777-
REGISTER_NS_LONG_CONSTANT("ast", "AST_PARAM", ZEND_AST_PARAM, CONST_CS | CONST_PERSISTENT);
778751
}

0 commit comments

Comments
 (0)