com php-src: Allow T_POW in constant expressions: Z end/tests/constant_expressions.phpt Zend/zend_ast.c Zend/zend_language_parser.y

From: Date: Fri, 07 Mar 2014 01:14:27 +0000
Subject: com php-src: Allow T_POW in constant expressions: Z end/tests/constant_expressions.phpt Zend/zend_ast.c Zend/zend_language_parser.y
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-76378@lists.php.net to get a copy of this message
Commit: 3d1fa4cb17038e530561a7a20c1b9497cec68f92 Author: Tjerk Meesters <datibbaw@php.net> Thu, 6 Mar 2014 08:31:01 +0800 Parents: d32e180f2068296bc8f1c06c71e2d805cccef8d1 Branches: PHP-5.6 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=3d1fa4cb17038e530561a7a20c1b9497cec68f92 Log: Allow T_POW in constant expressions Changed paths: M Zend/tests/constant_expressions.phpt M Zend/zend_ast.c M Zend/zend_language_parser.y Diff: diff --git a/Zend/tests/constant_expressions.phpt b/Zend/tests/constant_expressions.phpt index 7dea0d8..cf6474b 100644 --- a/Zend/tests/constant_expressions.phpt +++ b/Zend/tests/constant_expressions.phpt @@ -35,6 +35,9 @@ const T_25 = 1 + 2 * 3; // Test for memory leaks const T_26 = "1" + 2 + "3"; +// Allow T_POW +const T_27 = 2 ** 3; + var_dump(T_1); var_dump(T_2); var_dump(T_3); @@ -61,6 +64,7 @@ var_dump(T_23); var_dump(T_24); var_dump(T_25); var_dump(T_26); +var_dump(T_27); ?> --EXPECT-- int(2) @@ -89,3 +93,4 @@ bool(false) bool(true) int(7) int(6) +int(8) diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index cf595b4..9a0808d 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -107,6 +107,13 @@ ZEND_API void zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *s zval_dtor(&op1); zval_dtor(&op2); break; + case ZEND_POW: + zend_ast_evaluate(&op1, (&ast->u.child)[0], scope TSRMLS_CC); + zend_ast_evaluate(&op2, (&ast->u.child)[1], scope TSRMLS_CC); + pow_function(result, &op1, &op2 TSRMLS_CC); + zval_dtor(&op1); + zval_dtor(&op2); + break; case ZEND_DIV: zend_ast_evaluate(&op1, (&ast->u.child)[0], scope TSRMLS_CC); zend_ast_evaluate(&op2, (&ast->u.child)[1], scope TSRMLS_CC); diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index d384454..b7467b7 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -1006,6 +1006,7 @@ static_operation: static_scalar_value '+' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_ADD, $1.u.ast, $3.u.ast); } | static_scalar_value '-' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_SUB, $1..u.ast, $3.u.ast); } | static_scalar_value '*' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_MUL, $1.u.ast, $3.u.ast); } + | static_scalar_value T_POW static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_POW, $1.u.ast, $3.u.ast); } | static_scalar_value '/' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_DIV, $1.u.ast, $3.u.ast); } | static_scalar_value '%' static_scalar_value { $$.u.ast = zend_ast_create_binary(ZEND_MOD, $1.u.ast, $3.u.ast); } | '!' static_scalar_value { $$.u.ast = zend_ast_create_unary(ZEND_BOOL_NOT, $2.u.ast); }

« previous php.cvs (#76378) next »