summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2015-05-25 20:26:57 +0200
committerBob Weinand <bobwei9@hotmail.com>2015-05-25 20:26:57 +0200
commit36c3c4743428a57c3d1621bb74649d4d91538f7c (patch)
treed734cfc86fc5f66688cd185f816429b86e6760a0 /Zend
parent306a0f28d0a7591cb959793b71e8ebaeae85ed3b (diff)
downloadphp-git-36c3c4743428a57c3d1621bb74649d4d91538f7c.tar.gz
Set %expect to 0 in parser (Using %prec)
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_language_parser.y28
1 files changed, 16 insertions, 12 deletions
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index b49f736636..72506c089c 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -52,7 +52,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%}
%pure_parser
-%expect 8 /* 6 because traits */
+%expect 0
%code requires {
}
@@ -88,6 +88,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%right T_POW
%right '['
%nonassoc T_NEW T_CLONE
+%left "if_without_else"
%left T_ELSEIF
%left T_ELSE
%left T_ENDIF
@@ -260,7 +261,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
%type <ast> identifier
%type <num> returns_ref function is_reference is_variadic variable_modifiers
-%type <num> method_modifiers trait_modifiers non_empty_member_modifiers member_modifier
+%type <num> method_modifiers non_empty_member_modifiers member_modifier
%type <num> class_modifiers class_modifier use_type
%type <str> backup_doc_comment
@@ -271,17 +272,21 @@ start:
top_statement_list { CG(ast) = $1; }
;
-semi_reserved:
+reserved_non_modifiers:
T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND
| T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE | T_ENDWHILE
| T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH | T_FINALLY
| T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO
| T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT | T_BREAK
| T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE
- | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC
// | T_CLASS
;
+semi_reserved:
+ reserved_non_modifiers
+ | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC
+;
+
identifier:
T_STRING { $$ = $1; }
| semi_reserved {
@@ -583,7 +588,7 @@ if_stmt_without_else:
;
if_stmt:
- if_stmt_without_else { $$ = $1; }
+ if_stmt_without_else %prec "if_without_else" { $$ = $1; }
| if_stmt_without_else T_ELSE statement
{ $$ = zend_ast_list_add($1, zend_ast_create(ZEND_AST_IF_ELEM, NULL, $3)); }
;
@@ -730,9 +735,13 @@ trait_precedence:
;
trait_alias:
- trait_method_reference T_AS trait_modifiers identifier
+ trait_method_reference T_AS T_STRING
+ { $$ = zend_ast_create_ex(ZEND_AST_TRAIT_ALIAS, 0, $1, $3); }
+ | trait_method_reference T_AS reserved_non_modifiers
+ { zval zv; zend_lex_tstring(&zv); $$ = zend_ast_create_ex(ZEND_AST_TRAIT_ALIAS, 0, $1, zend_ast_create_zval(&zv)); }
+ | trait_method_reference T_AS member_modifier identifier
{ $$ = zend_ast_create_ex(ZEND_AST_TRAIT_ALIAS, $3, $1, $4); }
- | trait_method_reference T_AS member_modifier
+ | trait_method_reference T_AS member_modifier %prec '+'
{ $$ = zend_ast_create_ex(ZEND_AST_TRAIT_ALIAS, $3, $1, NULL); }
;
@@ -747,11 +756,6 @@ absolute_trait_method_reference:
{ $$ = zend_ast_create(ZEND_AST_METHOD_REFERENCE, $1, $3); }
;
-trait_modifiers:
- /* empty */ { $$ = 0; }
- | member_modifier { $$ = $1; }
-;
-
method_body:
';' /* abstract method */ { $$ = NULL; }
| '{' inner_statement_list '}' { $$ = $2; }