create TraitAdaptationList node
This commit is contained in:
1058
php7/php7.go
1058
php7/php7.go
File diff suppressed because it is too large
Load Diff
47
php7/php7.y
47
php7/php7.y
@@ -264,12 +264,13 @@ import (
|
||||
%type <node> isset_variable type return_type type_expr
|
||||
%type <node> class_modifier
|
||||
%type <node> argument_list ctor_arguments
|
||||
%type <node> trait_adaptations
|
||||
|
||||
%type <node> member_modifier
|
||||
%type <node> use_type
|
||||
%type <foreachVariable> foreach_variable
|
||||
|
||||
%type <nodesWithEndToken> method_body switch_case_list trait_adaptations
|
||||
%type <nodesWithEndToken> method_body switch_case_list
|
||||
|
||||
%type <list> encaps_list backticks_expr namespace_name catch_name_list catch_list class_const_list
|
||||
%type <list> const_list echo_expr_list for_exprs non_empty_for_exprs global_var_list
|
||||
@@ -1864,10 +1865,20 @@ class_statement:
|
||||
}
|
||||
| T_USE name_list trait_adaptations
|
||||
{
|
||||
$$ = stmt.NewTraitUse($2, $3.nodes)
|
||||
var adaptationList *stmt.TraitAdaptationList
|
||||
|
||||
switch n := $3.(type) {
|
||||
case *stmt.TraitAdaptationList:
|
||||
adaptationList = n
|
||||
default:
|
||||
adaptationList = nil
|
||||
yylex.(*Parser).comments.AddFromChildNode($$, $3)
|
||||
}
|
||||
|
||||
$$ = stmt.NewTraitUse($2, adaptationList)
|
||||
|
||||
// save position
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3.endToken))
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokenNodePosition($1, $3))
|
||||
|
||||
// save comments
|
||||
yylex.(*Parser).comments.AddFromToken($$, $1, comment.UseToken)
|
||||
@@ -1906,11 +1917,35 @@ name_list:
|
||||
|
||||
trait_adaptations:
|
||||
';'
|
||||
{ $$ = &nodesWithEndToken{nil, $1} }
|
||||
{
|
||||
$$ = stmt.NewNop()
|
||||
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokenPosition($1))
|
||||
|
||||
// save comments
|
||||
yylex.(*Parser).comments.AddFromToken($$, $1, comment.SemiColonToken)
|
||||
|
||||
}
|
||||
| '{' '}'
|
||||
{ $$ = &nodesWithEndToken{nil, $2} }
|
||||
{
|
||||
$$ = stmt.NewTraitAdaptationList(nil)
|
||||
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition($1, $2))
|
||||
|
||||
// save comments
|
||||
yylex.(*Parser).comments.AddFromToken($$, $1, comment.OpenCurlyBracesToken)
|
||||
yylex.(*Parser).comments.AddFromToken($$, $2, comment.CloseCurlyBracesToken)
|
||||
}
|
||||
| '{' trait_adaptation_list '}'
|
||||
{ $$ = &nodesWithEndToken{$2, $3} }
|
||||
{
|
||||
$$ = stmt.NewTraitAdaptationList($2)
|
||||
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3))
|
||||
|
||||
// save comments
|
||||
yylex.(*Parser).comments.AddFromToken($$, $1, comment.OpenCurlyBracesToken)
|
||||
yylex.(*Parser).comments.AddFromToken($$, $3, comment.CloseCurlyBracesToken)
|
||||
}
|
||||
;
|
||||
|
||||
trait_adaptation_list:
|
||||
|
||||
@@ -1482,6 +1482,7 @@ func TestPhp7(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
TraitAdaptationList: &stmt.TraitAdaptationList{},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1502,12 +1503,14 @@ func TestPhp7(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
TraitAdaptationList: &stmt.TraitAdaptationList{
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
},
|
||||
Alias: &node.Identifier{Value: "include"},
|
||||
},
|
||||
Alias: &node.Identifier{Value: "include"},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1530,12 +1533,14 @@ func TestPhp7(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
TraitAdaptationList: &stmt.TraitAdaptationList{
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
},
|
||||
Modifier: &node.Identifier{Value: "public"},
|
||||
},
|
||||
Modifier: &node.Identifier{Value: "public"},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1558,13 +1563,15 @@ func TestPhp7(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
TraitAdaptationList: &stmt.TraitAdaptationList{
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
},
|
||||
Modifier: &node.Identifier{Value: "public"},
|
||||
Alias: &node.Identifier{Value: "two"},
|
||||
},
|
||||
Modifier: &node.Identifier{Value: "public"},
|
||||
Alias: &node.Identifier{Value: "two"},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1587,39 +1594,41 @@ func TestPhp7(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUsePrecedence{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Trait: &name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Bar"},
|
||||
TraitAdaptationList: &stmt.TraitAdaptationList{
|
||||
Adaptations: []node.Node{
|
||||
&stmt.TraitUsePrecedence{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Trait: &name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Bar"},
|
||||
},
|
||||
},
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
},
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
},
|
||||
Insteadof: []node.Node{
|
||||
&name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Baz"},
|
||||
Insteadof: []node.Node{
|
||||
&name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Baz"},
|
||||
},
|
||||
},
|
||||
},
|
||||
&name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Quux"},
|
||||
&name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Quux"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Trait: &name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Baz"},
|
||||
&stmt.TraitUseAlias{
|
||||
Ref: &stmt.TraitMethodRef{
|
||||
Trait: &name.Name{
|
||||
Parts: []node.Node{
|
||||
&name.NamePart{Value: "Baz"},
|
||||
},
|
||||
},
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
},
|
||||
Method: &node.Identifier{Value: "one"},
|
||||
Alias: &node.Identifier{Value: "two"},
|
||||
},
|
||||
Alias: &node.Identifier{Value: "two"},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user