diff options
Diffstat (limited to 'Zend/zend_ast.c')
-rw-r--r-- | Zend/zend_ast.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 2532018274..1a8be00395 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -130,9 +130,11 @@ ZEND_API zend_ast *zend_ast_create(zend_ast_kind kind, ...) { return ast; } -ZEND_API zend_ast_list *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...) { +ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...) { TSRMLS_FETCH(); - zend_ast_list *list = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC); + zend_ast *ast = zend_ast_alloc(zend_ast_list_size(4) TSRMLS_CC); + + zend_ast_list *list = (zend_ast_list *) ast; list->kind = kind; list->attr = 0; 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 uint32_t i; va_start(va, kind); for (i = 0; i < init_children; ++i) { - list = zend_ast_list_add(list, va_arg(va, zend_ast *)); + ast = zend_ast_list_add(ast, va_arg(va, zend_ast *)); } va_end(va); } - return list; + return ast; } static inline zend_bool is_power_of_two(uint32_t n) { return n == (n & -n); } -ZEND_API zend_ast_list *zend_ast_list_add(zend_ast_list *list, zend_ast *op) { +ZEND_API zend_ast *zend_ast_list_add(zend_ast *ast, zend_ast *op) { + zend_ast_list *list = zend_ast_get_list(ast); if (list->children >= 4 && is_power_of_two(list->children)) { TSRMLS_FETCH(); list = zend_ast_realloc(list, zend_ast_list_size(list->children), zend_ast_list_size(list->children * 2) TSRMLS_CC); } list->child[list->children++] = op; - return list; + return (zend_ast *) list; } static void zend_ast_add_array_element(zval *result, zval *offset, zval *expr TSRMLS_DC) |