changing ClosureUse node purpose
Now ClosureUse is a container node for variable and reference nodes
This commit is contained in:
1173
php5/php5.go
1173
php5/php5.go
File diff suppressed because it is too large
Load Diff
36
php5/php5.y
36
php5/php5.y
@@ -27,6 +27,7 @@ import (
|
||||
ClassExtends *stmt.ClassExtends
|
||||
ClassImplements *stmt.ClassImplements
|
||||
InterfaceExtends *stmt.InterfaceExtends
|
||||
ClosureUse *expr.ClosureUse
|
||||
}
|
||||
|
||||
%type <token> $unk
|
||||
@@ -252,10 +253,11 @@ import (
|
||||
%type <ClassExtends> extends_from
|
||||
%type <ClassImplements> implements_list
|
||||
%type <InterfaceExtends> interface_extends_list
|
||||
%type <ClosureUse> lexical_vars
|
||||
|
||||
%type <list> top_statement_list namespace_name use_declarations use_function_declarations use_const_declarations
|
||||
%type <list> inner_statement_list global_var_list static_var_list encaps_list isset_variables non_empty_array_pair_list
|
||||
%type <list> array_pair_list assignment_list lexical_var_list lexical_vars elseif_list new_elseif_list non_empty_for_expr
|
||||
%type <list> array_pair_list assignment_list lexical_var_list elseif_list new_elseif_list non_empty_for_expr
|
||||
%type <list> for_expr case_list echo_expr_list unset_variables declare_list catch_statement additional_catches
|
||||
%type <list> non_empty_additional_catches parameter_list non_empty_parameter_list class_statement_list
|
||||
%type <list> class_statement_list variable_modifiers method_modifiers class_variable_declaration
|
||||
@@ -2589,9 +2591,13 @@ function:
|
||||
|
||||
lexical_vars:
|
||||
/* empty */
|
||||
{ $$ = []node.Node{} }
|
||||
{ $$ = nil }
|
||||
| T_USE '(' lexical_var_list ')'
|
||||
{ $$ = $3; }
|
||||
{
|
||||
$$ = expr.NewClosureUse($3)
|
||||
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition($1, $4))
|
||||
}
|
||||
;
|
||||
|
||||
lexical_var_list:
|
||||
@@ -2605,11 +2611,7 @@ lexical_var_list:
|
||||
yylex.(*Parser).positions.AddPosition(variable, yylex.(*Parser).positionBuilder.NewTokenPosition($3))
|
||||
yylex.(*Parser).comments.AddComments(variable, $3.Comments())
|
||||
|
||||
use := expr.NewClosureUse(variable)
|
||||
yylex.(*Parser).positions.AddPosition(use, yylex.(*Parser).positionBuilder.NewTokenPosition($3))
|
||||
yylex.(*Parser).comments.AddComments(use, $3.Comments())
|
||||
|
||||
$$ = append($1, use)
|
||||
$$ = append($1, variable)
|
||||
}
|
||||
| lexical_var_list ',' '&' T_VARIABLE
|
||||
{
|
||||
@@ -2623,11 +2625,7 @@ lexical_var_list:
|
||||
|
||||
reference := expr.NewReference(variable)
|
||||
|
||||
use := expr.NewClosureUse(reference)
|
||||
yylex.(*Parser).positions.AddPosition(use, yylex.(*Parser).positionBuilder.NewTokensPosition($3, $4))
|
||||
yylex.(*Parser).comments.AddComments(use, $3.Comments())
|
||||
|
||||
$$ = append($1, use)
|
||||
$$ = append($1, reference)
|
||||
}
|
||||
| T_VARIABLE
|
||||
{
|
||||
@@ -2639,11 +2637,7 @@ lexical_var_list:
|
||||
yylex.(*Parser).positions.AddPosition(variable, yylex.(*Parser).positionBuilder.NewTokenPosition($1))
|
||||
yylex.(*Parser).comments.AddComments(variable, $1.Comments())
|
||||
|
||||
use := expr.NewClosureUse(variable)
|
||||
yylex.(*Parser).positions.AddPosition(use, yylex.(*Parser).positionBuilder.NewTokenPosition($1))
|
||||
yylex.(*Parser).comments.AddComments(use, $1.Comments())
|
||||
|
||||
$$ = []node.Node{use}
|
||||
$$ = []node.Node{variable}
|
||||
}
|
||||
| '&' T_VARIABLE
|
||||
{
|
||||
@@ -2657,11 +2651,7 @@ lexical_var_list:
|
||||
|
||||
reference := expr.NewReference(variable)
|
||||
|
||||
use := expr.NewClosureUse(reference)
|
||||
yylex.(*Parser).positions.AddPosition(use, yylex.(*Parser).positionBuilder.NewTokensPosition($1, $2))
|
||||
yylex.(*Parser).comments.AddComments(use, $1.Comments())
|
||||
|
||||
$$ = []node.Node{use}
|
||||
$$ = []node.Node{reference}
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
@@ -523,7 +523,6 @@ func TestPhp5(t *testing.T) {
|
||||
&stmt.Expression{
|
||||
Expr: &expr.Closure{
|
||||
Params: expectedParams,
|
||||
Uses: []node.Node{},
|
||||
Stmts: []node.Node{},
|
||||
},
|
||||
},
|
||||
@@ -531,7 +530,6 @@ func TestPhp5(t *testing.T) {
|
||||
Expr: &expr.Closure{
|
||||
Static: true,
|
||||
Params: expectedParams,
|
||||
Uses: []node.Node{},
|
||||
Stmts: []node.Node{},
|
||||
},
|
||||
},
|
||||
@@ -1987,7 +1985,6 @@ func TestPhp5(t *testing.T) {
|
||||
ReturnsRef: false,
|
||||
Static: false,
|
||||
PhpDocComment: "",
|
||||
Uses: []node.Node{},
|
||||
Stmts: []node.Node{},
|
||||
},
|
||||
},
|
||||
@@ -2008,12 +2005,10 @@ func TestPhp5(t *testing.T) {
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
|
||||
},
|
||||
},
|
||||
Uses: []node.Node{
|
||||
&expr.ClosureUse{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "c"}},
|
||||
},
|
||||
&expr.ClosureUse{
|
||||
Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "d"}}},
|
||||
ClosureUse: &expr.ClosureUse{
|
||||
Uses: []node.Node{
|
||||
&expr.Variable{VarName: &node.Identifier{Value: "c"}},
|
||||
&expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "d"}}},
|
||||
},
|
||||
},
|
||||
Stmts: []node.Node{},
|
||||
@@ -2036,12 +2031,10 @@ func TestPhp5(t *testing.T) {
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
|
||||
},
|
||||
},
|
||||
Uses: []node.Node{
|
||||
&expr.ClosureUse{
|
||||
Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "c"}}},
|
||||
},
|
||||
&expr.ClosureUse{
|
||||
Variable: &expr.Variable{VarName: &node.Identifier{Value: "d"}},
|
||||
ClosureUse: &expr.ClosureUse{
|
||||
Uses: []node.Node{
|
||||
&expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "c"}}},
|
||||
&expr.Variable{VarName: &node.Identifier{Value: "d"}},
|
||||
},
|
||||
},
|
||||
Stmts: []node.Node{},
|
||||
@@ -2052,7 +2045,6 @@ func TestPhp5(t *testing.T) {
|
||||
ReturnsRef: false,
|
||||
Static: false,
|
||||
PhpDocComment: "",
|
||||
Uses: []node.Node{},
|
||||
Stmts: []node.Node{},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user