diff options
| author | Nikita Popov <nikic@php.net> | 2014-09-16 19:14:46 +0100 |
|---|---|---|
| committer | Andrea Faulds <ajf@ajf.me> | 2014-09-16 19:14:46 +0100 |
| commit | 69e7c9d89ca4674b73a851154d1f06dcbb6cb352 (patch) | |
| tree | e9f01ffdb2721980166d342dda725692bd1a7ea7 /Zend/zend_language_parser.y | |
| parent | f469dc7429f2257aac6f46228302408608fbd62f (diff) | |
| download | php-git-69e7c9d89ca4674b73a851154d1f06dcbb6cb352.tar.gz | |
Initial coalesce operator implementation
Diffstat (limited to 'Zend/zend_language_parser.y')
| -rw-r--r-- | Zend/zend_language_parser.y | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 6bfef2219e..97fc4de546 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -67,6 +67,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %right T_YIELD %left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL %left '?' ':' +%right T_COALESCE %left T_BOOLEAN_OR %left T_BOOLEAN_AND %left '|' @@ -221,6 +222,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*); %token T_NS_C "__NAMESPACE__ (T_NS_C)" %token T_NS_SEPARATOR "\\ (T_NS_SEPARATOR)" %token T_ELLIPSIS "... (T_ELLIPSIS)" +%token T_COALESCE "?? (T_COALESCE)" %token T_POW "** (T_POW)" %token T_POW_EQUAL "**= (T_POW_EQUAL)" @@ -827,6 +829,8 @@ expr_without_variable: { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, $1, $3, $5); } | expr '?' ':' expr { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, $1, NULL, $4); } + | expr T_COALESCE expr + { $$ = zend_ast_create(ZEND_AST_COALESCE, $1, $3); } | internal_functions_in_yacc { $$ = $1; } | T_INT_CAST expr { $$ = zend_ast_create_cast(IS_LONG, $2); } | T_DOUBLE_CAST expr { $$ = zend_ast_create_cast(IS_DOUBLE, $2); } |
