Skip to content

Commit 545fd51

Browse files
committed
Don't distinguish between ast/list in parser
This removes the need to use $<ast>{n} or $<list>$ casts in the reduction actions. Keeping the distinction in the parser doesn't really give us any benefit and only makes changing the grammar harder.
1 parent 25d57aa commit 545fd51

File tree

5 files changed

+96
-115
lines changed

5 files changed

+96
-115
lines changed

Diff for: Zend/zend_ast.c

+9-6
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,11 @@ ZEND_API zend_ast *zend_ast_create(zend_ast_kind kind, ...) {
130130
return ast;
131131
}
132132

133-
ZEND_API zend_ast_list *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...) {
133+
ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...) {
134134
TSRMLS_FETCH();
135-
zend_ast_list *list = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC);
135+
zend_ast *ast = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC);
136+
137+
zend_ast_list *list = (zend_ast_list *) ast;
136138
list->kind = kind;
137139
list->attr = 0;
138140
list->lineno = CG(zend_lineno);
@@ -143,26 +145,27 @@ ZEND_API zend_ast_list *zend_ast_create_list(uint32_t init_children, zend_ast_ki
143145
uint32_t i;
144146
va_start(va, kind);
145147
for (i = 0; i < init_children; ++i) {
146-
list = zend_ast_list_add(list, va_arg(va, zend_ast *));
148+
ast = zend_ast_list_add(ast, va_arg(va, zend_ast *));
147149
}
148150
va_end(va);
149151
}
150152

151-
return list;
153+
return ast;
152154
}
153155

154156
static inline zend_bool is_power_of_two(uint32_t n) {
155157
return n == (n & -n);
156158
}
157159

158-
ZEND_API zend_ast_list *zend_ast_list_add(zend_ast_list *list, zend_ast *op) {
160+
ZEND_API zend_ast *zend_ast_list_add(zend_ast *ast, zend_ast *op) {
161+
zend_ast_list *list = zend_ast_get_list(ast);
159162
if (list->children >= 4 && is_power_of_two(list->children)) {
160163
TSRMLS_FETCH();
161164
list = zend_ast_realloc(list,
162165
zend_ast_list_size(list->children), zend_ast_list_size(list->children * 2) TSRMLS_CC);
163166
}
164167
list->child[list->children++] = op;
165-
return list;
168+
return (zend_ast *) list;
166169
}
167170

168171
static void zend_ast_add_array_element(zval *result, zval *offset, zval *expr TSRMLS_DC)

Diff for: Zend/zend_ast.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ ZEND_API zend_ast *zend_ast_create_decl(
195195
zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2
196196
);
197197

198-
ZEND_API zend_ast_list *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...);
199-
ZEND_API zend_ast_list *zend_ast_list_add(zend_ast_list *list, zend_ast *op);
198+
ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...);
199+
ZEND_API zend_ast *zend_ast_list_add(zend_ast *list, zend_ast *op);
200200

201201
ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *scope TSRMLS_DC);
202202

Diff for: Zend/zend_compile.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -3091,7 +3091,7 @@ zend_ast *zend_ast_append_str(zend_ast *left_ast, zend_ast *right_ast) /* {{{ */
30913091
/* }}} */
30923092

30933093
/* A hacky way that is used to store the doc comment for properties */
3094-
zend_ast_list *zend_ast_append_doc_comment(zend_ast_list *list TSRMLS_DC) /* {{{ */
3094+
zend_ast *zend_ast_append_doc_comment(zend_ast *list TSRMLS_DC) /* {{{ */
30953095
{
30963096
if (CG(doc_comment)) {
30973097
list = zend_ast_list_add(list, zend_ast_create_zval_from_str(CG(doc_comment)));
@@ -5267,8 +5267,9 @@ void zend_compile_try(zend_ast *ast TSRMLS_DC) /* {{{ */
52675267
/* }}} */
52685268

52695269
/* Encoding declarations must already be handled during parsing */
5270-
void zend_handle_encoding_declaration(zend_ast_list *declares TSRMLS_DC) /* {{{ */
5270+
void zend_handle_encoding_declaration(zend_ast *ast TSRMLS_DC) /* {{{ */
52715271
{
5272+
zend_ast_list *declares = zend_ast_get_list(ast);
52725273
uint32_t i;
52735274
for (i = 0; i < declares->children; ++i) {
52745275
zend_ast *declare_ast = declares->child[i];
@@ -7166,7 +7167,7 @@ void zend_compile_shell_exec(znode *result, zend_ast *ast TSRMLS_DC) /* {{{ */
71667167

71677168
ZVAL_STRING(&fn_name, "shell_exec");
71687169
name_ast = zend_ast_create_zval(&fn_name);
7169-
args_ast = (zend_ast *) zend_ast_create_list(1, ZEND_AST_ARG_LIST, expr_ast);
7170+
args_ast = zend_ast_create_list(1, ZEND_AST_ARG_LIST, expr_ast);
71707171
call_ast = zend_ast_create(ZEND_AST_CALL, name_ast, args_ast);
71717172

71727173
zend_compile_expr(result, call_ast TSRMLS_CC);

Diff for: Zend/zend_compile.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ static inline znode *zend_ast_get_znode(zend_ast *ast) {
8989

9090
typedef union _zend_parser_stack_elem {
9191
zend_ast *ast;
92-
zend_ast_list *list;
9392
zend_string *str;
9493
zend_ulong num;
9594
} zend_parser_stack_elem;
@@ -447,8 +446,8 @@ void zend_stop_lexing(TSRMLS_D);
447446
void zend_emit_final_return(zval *zv TSRMLS_DC);
448447
zend_ast *zend_ast_append_str(zend_ast *left, zend_ast *right);
449448
uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag);
450-
zend_ast_list *zend_ast_append_doc_comment(zend_ast_list *list TSRMLS_DC);
451-
void zend_handle_encoding_declaration(zend_ast_list *declares TSRMLS_DC);
449+
zend_ast *zend_ast_append_doc_comment(zend_ast *list TSRMLS_DC);
450+
void zend_handle_encoding_declaration(zend_ast *ast TSRMLS_DC);
452451

453452
/* parser-driven code generators */
454453
void zend_do_free(znode *op1 TSRMLS_DC);

0 commit comments

Comments
 (0)