Commit:    152898ff2872f2bdf2123a52c37f6e64c18ab88a
Author:    Bob Weinand <bobw...@hotmail.com>         Thu, 7 Nov 2013 16:39:47 
+0100
Parents:   e0135014c3b4edaf67312677c440a93133fe6a0c
Branches:  PHP-5.6

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=152898ff2872f2bdf2123a52c37f6e64c18ab88a

Log:
Moved arrays again to "static_scalar:" & little cleanup

Changed paths:
  M  Zend/tests/static_variable.phpt
  M  Zend/zend_ast.c
  M  Zend/zend_ast.h
  M  Zend/zend_extensions.h
  M  Zend/zend_language_parser.y
  M  ext/opcache/zend_accelerator_util_funcs.c
  M  ext/opcache/zend_persist.c
  M  ext/opcache/zend_persist_calc.c

diff --git a/Zend/tests/static_variable.phpt b/Zend/tests/static_variable.phpt
index ea69a8f..62ca565 100644
--- a/Zend/tests/static_variable.phpt
+++ b/Zend/tests/static_variable.phpt
@@ -7,7 +7,7 @@ const bar = 2, baz = bar + 1;
 function foo() {
        static $a = 1 + 1;
        static $b = [bar => 1 + 1, baz * 2 => 1 << 2];
-       static $c = [1 => bar] + [3 => baz];
+       static $c = [1 => bar, 3 => baz];
        var_dump($a, $b, $c);
 }
 
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index 7495da3..fb5a7eb 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -25,42 +25,42 @@
 
 ZEND_API zend_ast *zend_ast_create_constant(zval *zv)
 {
-       zend_ast *node = emalloc(sizeof(zend_ast) + sizeof(zval));
-       node->kind = ZEND_CONST;
-       node->children = 0;
-       node->u.val = (zval*)(node + 1);
-       INIT_PZVAL_COPY(node->u.val, zv);
-       return node;
+       zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zval));
+       ast->kind = ZEND_CONST;
+       ast->children = 0;
+       ast->u.val = (zval*)(ast + 1);
+       INIT_PZVAL_COPY(ast->u.val, zv);
+       return ast;
 }
 
 ZEND_API zend_ast* zend_ast_create_unary(uint kind, zend_ast *op0)
 {
-       zend_ast *node = emalloc(sizeof(zend_ast));
-       node->kind = kind;
-       node->children = 1;
-       node->u.child[0] = op0;
-       return node;
+       zend_ast *ast = emalloc(sizeof(zend_ast));
+       ast->kind = kind;
+       ast->children = 1;
+       (&ast->u.child)[0] = op0;
+       return ast;
 }
 
 ZEND_API zend_ast* zend_ast_create_binary(uint kind, zend_ast *op0, zend_ast 
*op1)
 {
-       zend_ast *node = emalloc(sizeof(zend_ast) + sizeof(zend_ast*));
-       node->kind = kind;
-       node->children = 2;
-       node->u.child[0] = op0;
-       node->u.child[1] = op1;
-       return node;
+       zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zend_ast*));
+       ast->kind = kind;
+       ast->children = 2;
+       (&ast->u.child)[0] = op0;
+       (&ast->u.child)[1] = op1;
+       return ast;
 }
 
 ZEND_API zend_ast* zend_ast_create_ternary(uint kind, zend_ast *op0, zend_ast 
*op1, zend_ast *op2)
 {
-       zend_ast *node = emalloc(sizeof(zend_ast) + sizeof(zend_ast*) * 2);
-       node->kind = kind;
-       node->children = 3;
-       node->u.child[0] = op0;
-       node->u.child[1] = op1;
-       node->u.child[2] = op2;
-       return node;
+       zend_ast *ast = emalloc(sizeof(zend_ast) + sizeof(zend_ast*) * 2);
+       ast->kind = kind;
+       ast->children = 3;
+       (&ast->u.child)[0] = op0;
+       (&ast->u.child)[1] = op1;
+       (&ast->u.child)[2] = op2;
+       return ast;
 }
 
 ZEND_API int zend_ast_is_ct_constant(zend_ast *ast)
@@ -71,8 +71,8 @@ ZEND_API int zend_ast_is_ct_constant(zend_ast *ast)
                return !IS_CONSTANT_TYPE(Z_TYPE_P(ast->u.val));
        } else {
                for (i = 0; i < ast->children; i++) {
-                       if (ast->u.child[i]) {
-                               if (!zend_ast_is_ct_constant(ast->u.child[i])) {
+                       if ((&ast->u.child)[i]) {
+                               if 
(!zend_ast_is_ct_constant((&ast->u.child)[i])) {
                                        return 0;
                                }
                        }
@@ -87,137 +87,137 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast 
*ast TSRMLS_DC)
 
        switch (ast->kind) {
                case ZEND_ADD:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        add_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_SUB:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        sub_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_MUL:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        mul_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_DIV:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        div_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_MOD:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        mod_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_SL:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        shift_left_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_SR:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        shift_right_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_CONCAT:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        concat_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_BW_OR:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        bitwise_or_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_BW_AND:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        bitwise_and_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_BW_XOR:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        bitwise_xor_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_BW_NOT:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
                        bitwise_not_function(result, &op1 TSRMLS_CC);
                        zval_dtor(&op1);
                        break;
                case ZEND_BOOL_NOT:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
                        boolean_not_function(result, &op1 TSRMLS_CC);
                        zval_dtor(&op1);
                        break;
                case ZEND_BOOL_XOR:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        boolean_xor_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_IS_IDENTICAL:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        is_identical_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_IS_NOT_IDENTICAL:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        is_not_identical_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_IS_EQUAL:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        is_equal_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_IS_NOT_EQUAL:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        is_not_equal_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_IS_SMALLER:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        is_smaller_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
                        break;
                case ZEND_IS_SMALLER_OR_EQUAL:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
-                       zend_ast_evaluate(&op2, ast->u.child[1] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[1] TSRMLS_CC);
                        is_smaller_or_equal_function(result, &op1, &op2 
TSRMLS_CC);
                        zval_dtor(&op1);
                        zval_dtor(&op2);
@@ -230,9 +230,9 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast 
TSRMLS_DC)
                        }
                        break;
                case ZEND_BOOL_AND:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
                        if (zend_is_true(&op1)) {
-                               zend_ast_evaluate(&op2, ast->u.child[1] 
TSRMLS_CC);
+                               zend_ast_evaluate(&op2, (&ast->u.child)[1] 
TSRMLS_CC);
                                ZVAL_BOOL(result, zend_is_true(&op2));
                                zval_dtor(&op2);
                        } else {
@@ -241,39 +241,39 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast 
*ast TSRMLS_DC)
                        zval_dtor(&op1);
                        break;
                case ZEND_BOOL_OR:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
                        if (zend_is_true(&op1)) {
                                ZVAL_BOOL(result, 1);
                        } else {
-                               zend_ast_evaluate(&op2, ast->u.child[1] 
TSRMLS_CC);
+                               zend_ast_evaluate(&op2, (&ast->u.child)[1] 
TSRMLS_CC);
                                ZVAL_BOOL(result, zend_is_true(&op2));
                                zval_dtor(&op2);
                        }
                        zval_dtor(&op1);
                        break;
                case ZEND_SELECT:
-                       zend_ast_evaluate(&op1, ast->u.child[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op1, (&ast->u.child)[0] TSRMLS_CC);
                        if (zend_is_true(&op1)) {
-                               if (!ast->u.child[1]) {
+                               if (!(&ast->u.child)[1]) {
                                        *result = op1;
                                } else {
-                                       zend_ast_evaluate(result, 
ast->u.child[1] TSRMLS_CC);
+                                       zend_ast_evaluate(result, 
(&ast->u.child)[1] TSRMLS_CC);
                                        zval_dtor(&op1);
                                }
                        } else {
-                               zend_ast_evaluate(result, ast->u.child[2] 
TSRMLS_CC);
+                               zend_ast_evaluate(result, (&ast->u.child)[2] 
TSRMLS_CC);
                                zval_dtor(&op1);
                        }
                        break;
                case ZEND_UNARY_PLUS:
                        ZVAL_LONG(&op1, 0);
-                       zend_ast_evaluate(&op2, ast->u.child[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[0] TSRMLS_CC);
                        add_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op2);
                        break;
                case ZEND_UNARY_MINUS:
                        ZVAL_LONG(&op1, 0);
-                       zend_ast_evaluate(&op2, ast->u.child[0] TSRMLS_CC);
+                       zend_ast_evaluate(&op2, (&ast->u.child)[0] TSRMLS_CC);
                        sub_function(result, &op1, &op2 TSRMLS_CC);
                        zval_dtor(&op2);
                        break;
@@ -284,29 +284,29 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast 
*ast TSRMLS_DC)
 
 ZEND_API zend_ast *zend_ast_copy(zend_ast *ast)
 {
-    if (ast == NULL) {
-       return NULL;
+       if (ast == NULL) {
+               return NULL;
        } else if (ast->kind == ZEND_CONST) {
-               zend_ast *node = zend_ast_create_constant(ast->u.val);
-               zval_copy_ctor(node->u.val);
-               return node;
+               zend_ast *copy = zend_ast_create_constant(ast->u.val);
+               zval_copy_ctor(copy->u.val);
+               return copy;
        } else {
                switch (ast->children) {
                        case 1:
                                return zend_ast_create_unary(
                                        ast->kind,
-                                       zend_ast_copy(ast->u.child[0]));
+                                       zend_ast_copy((&ast->u.child)[0]));
                        case 2:
                                return zend_ast_create_binary(
                                        ast->kind,
-                                       zend_ast_copy(ast->u.child[0]),
-                                       zend_ast_copy(ast->u.child[1]));
+                                       zend_ast_copy((&ast->u.child)[0]),
+                                       zend_ast_copy((&ast->u.child)[1]));
                        case 3:
                                return zend_ast_create_ternary(
                                        ast->kind,
-                                       zend_ast_copy(ast->u.child[0]),
-                                       zend_ast_copy(ast->u.child[1]),
-                                       zend_ast_copy(ast->u.child[2]));
+                                       zend_ast_copy((&ast->u.child)[0]),
+                                       zend_ast_copy((&ast->u.child)[1]),
+                                       zend_ast_copy((&ast->u.child)[2]));
                }
        }
        return NULL;
@@ -320,8 +320,8 @@ ZEND_API void zend_ast_destroy(zend_ast *ast)
                zval_dtor(ast->u.val);
        } else {
                for (i = 0; i < ast->children; i++) {
-                       if (ast->u.child[i]) {
-                               zend_ast_destroy(ast->u.child[i]);
+                       if ((&ast->u.child)[i]) {
+                               zend_ast_destroy((&ast->u.child)[i]);
                        }
                }
        }
diff --git a/Zend/zend_ast.h b/Zend/zend_ast.h
index 9cdcbf5..27d595e 100644
--- a/Zend/zend_ast.h
+++ b/Zend/zend_ast.h
@@ -41,7 +41,7 @@ struct _zend_ast {
        unsigned short children;
        union {
                zval     *val;
-               zend_ast *child[1];
+               zend_ast *child;
        } u;
 };
 
diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h
index e7f289a..e59c9ad 100644
--- a/Zend/zend_extensions.h
+++ b/Zend/zend_extensions.h
@@ -28,7 +28,7 @@
 /* The first number is the engine version and the rest is the date.
  * This way engine 2/3 API no. is always greater than engine 1 API no..
  */
-#define ZEND_EXTENSION_API_NO  220131106
+#define ZEND_EXTENSION_API_NO  220131107
 
 typedef struct _zend_extension_version_info {
        int zend_extension_api_no;
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 8041acc..a71dfb0 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -953,6 +953,8 @@ static_class_constant:
 
 static_scalar: /* compile-time evaluated scalars */
                static_scalar_value { zend_do_constant_expression(&$$, $1.u.ast 
TSRMLS_CC); }
+       |       T_ARRAY '(' static_array_pair_list ')' { $$ = $3; 
Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; }
+       |       '[' static_array_pair_list ']' { $$ = $2; Z_TYPE($$.u.constant) 
= IS_CONSTANT_ARRAY; }
 ;
 
 static_scalar_value:
@@ -963,8 +965,6 @@ static_scalar_value:
        |       T_NS_SEPARATOR namespace_name { char *tmp = 
estrndup(Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); memcpy(&(tmp[1]), 
Z_STRVAL($2.u.constant), Z_STRLEN($2.u.constant)+1); tmp[0] = '\\'; 
efree(Z_STRVAL($2.u.constant)); Z_STRVAL($2.u.constant) = tmp; 
++Z_STRLEN($2.u.constant); zend_do_fetch_constant(&$$, NULL, &$2, ZEND_CT, 0 
TSRMLS_CC); $$.u.ast = zend_ast_create_constant(&$$.u.constant); }
        |       static_class_constant { $$.u.ast = 
zend_ast_create_constant(&$1.u.constant); }
        |       T_CLASS_C                       { $$.u.ast = 
zend_ast_create_constant(&$1.u.constant); }
-       |       T_ARRAY '(' static_array_pair_list ')' { $$ = $3; 
Z_TYPE($$.u.constant) = IS_CONSTANT_ARRAY; $$.u.ast = 
zend_ast_create_constant(&$$.u.constant); }
-       |       '[' static_array_pair_list ']' { $$ = $2; Z_TYPE($$.u.constant) 
= IS_CONSTANT_ARRAY; $$.u.ast = zend_ast_create_constant(&$$.u.constant); }
        |       static_operation { $$ = $1; }
 ;
 
diff --git a/ext/opcache/zend_accelerator_util_funcs.c 
b/ext/opcache/zend_accelerator_util_funcs.c
index 8ced274..279046c 100644
--- a/ext/opcache/zend_accelerator_util_funcs.c
+++ b/ext/opcache/zend_accelerator_util_funcs.c
@@ -257,10 +257,10 @@ static zend_ast *zend_ast_clone(zend_ast *ast TSRMLS_DC)
                node->kind = ast->kind;
                node->children = ast->children;
                for (i = 0; i < ast->children; i++) {
-                       if (ast->u.child[i]) {
-                               node->u.child[i] = 
zend_ast_clone(ast->u.child[i] TSRMLS_CC);
+                       if ((&ast->u.child)[i]) {
+                               (&node->u.child)[i] = 
zend_ast_clone((&ast->u.child)[i] TSRMLS_CC);
                        } else {
-                               node->u.child[i] = NULL;
+                               (&node->u.child)[i] = NULL;
                        }
                }
        }
diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c
index bf13865..17147ac 100644
--- a/ext/opcache/zend_persist.c
+++ b/ext/opcache/zend_persist.c
@@ -152,8 +152,8 @@ static zend_ast *zend_persist_ast(zend_ast *ast TSRMLS_DC)
        } else {
                node = zend_accel_memdup(ast, sizeof(zend_ast) + 
sizeof(zend_ast*) * (ast->children - 1));
                for (i = 0; i < ast->children; i++) {
-                       if (node->u.child[i]) {
-                               node->u.child[i] = 
zend_persist_ast(node->u.child[i] TSRMLS_CC);
+                       if ((&node->u.child)[i]) {
+                               (&node->u.child)[i] = 
zend_persist_ast((&node->u.child)[i] TSRMLS_CC);
                        }
                }
        }
diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c
index 9143813..8947c72 100644
--- a/ext/opcache/zend_persist_calc.c
+++ b/ext/opcache/zend_persist_calc.c
@@ -104,8 +104,8 @@ static uint zend_persist_ast_calc(zend_ast *ast TSRMLS_DC)
        } else {
                ADD_SIZE(sizeof(zend_ast) + sizeof(zend_ast*) * (ast->children 
- 1));
                for (i = 0; i < ast->children; i++) {
-                       if (ast->u.child[i]) {
-                               ADD_SIZE(zend_persist_ast_calc(ast->u.child[i] 
TSRMLS_CC));
+                       if ((&ast->u.child)[i]) {
+                               
ADD_SIZE(zend_persist_ast_calc((&ast->u.child)[i] TSRMLS_CC));
                        }
                }
        }
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to