diff options
| -rw-r--r-- | Zend/tests/static_variable.phpt | 2 | ||||
| -rw-r--r-- | Zend/zend_ast.c | 174 | ||||
| -rw-r--r-- | Zend/zend_ast.h | 2 | ||||
| -rw-r--r-- | Zend/zend_extensions.h | 2 | ||||
| -rw-r--r-- | Zend/zend_language_parser.y | 4 | ||||
| -rw-r--r-- | ext/opcache/zend_accelerator_util_funcs.c | 6 | ||||
| -rw-r--r-- | ext/opcache/zend_persist.c | 4 | ||||
| -rw-r--r-- | ext/opcache/zend_persist_calc.c | 4 |
8 files changed, 99 insertions, 99 deletions
diff --git a/Zend/tests/static_variable.phpt b/Zend/tests/static_variable.phpt index ea69a8f86b..62ca565ffe 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 7495da38e5..fb5a7eb403 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 9cdcbf58bb..27d595e23e 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 e7f289a656..e59c9ade8b 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 8041acce15..a71dfb0956 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 8ced274cb2..279046cd95 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 bf13865666..17147ac34f 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 91438132d0..8947c72ddc 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)); } } } |
