variable node
This commit is contained in:
parent
ef39b9111e
commit
92b9453de7
@ -5,21 +5,25 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/z7zmey/php-parser/node"
|
"github.com/z7zmey/php-parser/node"
|
||||||
"github.com/z7zmey/php-parser/token"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Variable struct {
|
type Variable struct {
|
||||||
node.SimpleNode
|
node.SimpleNode
|
||||||
token token.Token
|
name node.Node
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewVariable(token token.Token) node.Node {
|
func NewVariable(name node.Node) node.Node {
|
||||||
return Variable{
|
return Variable{
|
||||||
node.SimpleNode{Name: "Variable", Attributes: make(map[string]string)},
|
node.SimpleNode{Name: "Variable", Attributes: make(map[string]string)},
|
||||||
token,
|
name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n Variable) Print(out io.Writer, indent string) {
|
func (n Variable) Print(out io.Writer, indent string) {
|
||||||
fmt.Fprintf(out, "\n%v%v [%d %d] %q", indent, n.Name, n.token.StartLine, n.token.EndLine, n.token.Value)
|
fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name)
|
||||||
|
|
||||||
|
if n.name != nil {
|
||||||
|
fmt.Fprintf(out, "\n%vname:", indent+" ")
|
||||||
|
n.name.Print(out, indent+" ")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2958,7 +2958,7 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-9 : yypt+1]
|
yyDollar = yyS[yypt-9 : yypt+1]
|
||||||
//line parser/parser.y:415
|
//line parser/parser.y:415
|
||||||
{
|
{
|
||||||
yyVAL.list = append(yyDollar[1].list, stmt.NewCatch(yyDollar[2].token, yyDollar[4].list, expr.NewVariable(yyDollar[5].token), yyDollar[8].node.(node.SimpleNode).Children))
|
yyVAL.list = append(yyDollar[1].list, stmt.NewCatch(yyDollar[2].token, yyDollar[4].list, expr.NewVariable(node.NewIdentifier(yyDollar[5].token)), yyDollar[8].node.(node.SimpleNode).Children))
|
||||||
}
|
}
|
||||||
case 155:
|
case 155:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
@ -4293,13 +4293,13 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:924
|
//line parser/parser.y:924
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewClusureUse(expr.NewVariable(yyDollar[1].token), false)
|
yyVAL.node = expr.NewClusureUse(expr.NewVariable(node.NewIdentifier(yyDollar[1].token)), false)
|
||||||
}
|
}
|
||||||
case 376:
|
case 376:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:925
|
//line parser/parser.y:925
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewClusureUse(expr.NewVariable(yyDollar[2].token), true)
|
yyVAL.node = expr.NewClusureUse(expr.NewVariable(node.NewIdentifier(yyDollar[2].token)), true)
|
||||||
}
|
}
|
||||||
case 377:
|
case 377:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
@ -4647,19 +4647,19 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1040
|
//line parser/parser.y:1040
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Attribute("name", yyDollar[1].token.String())
|
yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token))
|
||||||
}
|
}
|
||||||
case 435:
|
case 435:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line parser/parser.y:1041
|
//line parser/parser.y:1041
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Append(yyDollar[3].node)
|
yyVAL.node = expr.NewVariable(yyDollar[3].node)
|
||||||
}
|
}
|
||||||
case 436:
|
case 436:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1042
|
//line parser/parser.y:1042
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Append(yyDollar[2].node)
|
yyVAL.node = expr.NewVariable(yyDollar[2].node)
|
||||||
}
|
}
|
||||||
case 437:
|
case 437:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
@ -4847,37 +4847,37 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1124
|
//line parser/parser.y:1124
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[1].token.String())
|
yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token))
|
||||||
}
|
}
|
||||||
case 467:
|
case 467:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line parser/parser.y:1125
|
//line parser/parser.y:1125
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(yyDollar[1].token), yyDollar[3].node)
|
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(node.NewIdentifier(yyDollar[1].token)), yyDollar[3].node)
|
||||||
}
|
}
|
||||||
case 468:
|
case 468:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1126
|
//line parser/parser.y:1126
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewPropertyFetch(expr.NewVariable(yyDollar[1].token), node.NewIdentifier(yyDollar[3].token))
|
yyVAL.node = expr.NewPropertyFetch(expr.NewVariable(node.NewIdentifier(yyDollar[1].token)), node.NewIdentifier(yyDollar[3].token))
|
||||||
}
|
}
|
||||||
case 469:
|
case 469:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1127
|
//line parser/parser.y:1127
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Append(node.NewSimpleNode("expr").Append(yyDollar[2].node))
|
yyVAL.node = expr.NewVariable(yyDollar[2].node)
|
||||||
}
|
}
|
||||||
case 470:
|
case 470:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1128
|
//line parser/parser.y:1128
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[2].token.String())
|
yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[2].token))
|
||||||
}
|
}
|
||||||
case 471:
|
case 471:
|
||||||
yyDollar = yyS[yypt-6 : yypt+1]
|
yyDollar = yyS[yypt-6 : yypt+1]
|
||||||
//line parser/parser.y:1130
|
//line parser/parser.y:1130
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(yyDollar[2].token), yyDollar[4].node)
|
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(node.NewIdentifier(yyDollar[2].token)), yyDollar[4].node)
|
||||||
}
|
}
|
||||||
case 472:
|
case 472:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
|
@ -412,7 +412,7 @@ statement:
|
|||||||
catch_list:
|
catch_list:
|
||||||
/* empty */ { $$ = []node.Node{} }
|
/* empty */ { $$ = []node.Node{} }
|
||||||
| catch_list T_CATCH '(' catch_name_list T_VARIABLE ')' '{' inner_statement_list '}'
|
| catch_list T_CATCH '(' catch_name_list T_VARIABLE ')' '{' inner_statement_list '}'
|
||||||
{ $$ = append($1, stmt.NewCatch($2, $4, expr.NewVariable($5), $8.(node.SimpleNode).Children)) }
|
{ $$ = append($1, stmt.NewCatch($2, $4, expr.NewVariable(node.NewIdentifier($5)), $8.(node.SimpleNode).Children)) }
|
||||||
;
|
;
|
||||||
catch_name_list:
|
catch_name_list:
|
||||||
name { $$ = []node.Node{$1} }
|
name { $$ = []node.Node{$1} }
|
||||||
@ -921,8 +921,8 @@ lexical_var_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
lexical_var:
|
lexical_var:
|
||||||
T_VARIABLE { $$ = expr.NewClusureUse(expr.NewVariable($1), false) }
|
T_VARIABLE { $$ = expr.NewClusureUse(expr.NewVariable(node.NewIdentifier($1)), false) }
|
||||||
| '&' T_VARIABLE { $$ = expr.NewClusureUse(expr.NewVariable($2), true) }
|
| '&' T_VARIABLE { $$ = expr.NewClusureUse(expr.NewVariable(node.NewIdentifier($2)), true) }
|
||||||
;
|
;
|
||||||
|
|
||||||
function_call:
|
function_call:
|
||||||
@ -1037,9 +1037,9 @@ variable:
|
|||||||
;
|
;
|
||||||
|
|
||||||
simple_variable:
|
simple_variable:
|
||||||
T_VARIABLE { $$ = node.NewSimpleNode("Variable").Attribute("name", $1.String()); }
|
T_VARIABLE { $$ = expr.NewVariable(node.NewIdentifier($1)) }
|
||||||
| '$' '{' expr '}' { $$ = node.NewSimpleNode("Variable").Append($3); }
|
| '$' '{' expr '}' { $$ = expr.NewVariable($3) }
|
||||||
| '$' simple_variable { $$ = node.NewSimpleNode("Variable").Append($2); }
|
| '$' simple_variable { $$ = expr.NewVariable($2) }
|
||||||
;
|
;
|
||||||
|
|
||||||
static_member:
|
static_member:
|
||||||
@ -1121,13 +1121,13 @@ encaps_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
encaps_var:
|
encaps_var:
|
||||||
T_VARIABLE { $$ = node.NewSimpleNode("Variable").Attribute("value", $1.String()) }
|
T_VARIABLE { $$ = expr.NewVariable(node.NewIdentifier($1)) }
|
||||||
| T_VARIABLE '[' encaps_var_offset ']' { $$ = expr.NewArrayDimFetch(expr.NewVariable($1), $3) }
|
| T_VARIABLE '[' encaps_var_offset ']' { $$ = expr.NewArrayDimFetch(expr.NewVariable(node.NewIdentifier($1)), $3) }
|
||||||
| T_VARIABLE T_OBJECT_OPERATOR T_STRING { $$ = expr.NewPropertyFetch(expr.NewVariable($1), node.NewIdentifier($3)) }
|
| T_VARIABLE T_OBJECT_OPERATOR T_STRING { $$ = expr.NewPropertyFetch(expr.NewVariable(node.NewIdentifier($1)), node.NewIdentifier($3)) }
|
||||||
| T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = node.NewSimpleNode("Variable").Append(node.NewSimpleNode("expr").Append($2)) }
|
| T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = expr.NewVariable($2) }
|
||||||
| T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = node.NewSimpleNode("Variable").Attribute("value", $2.String()) }
|
| T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = expr.NewVariable(node.NewIdentifier($2)) }
|
||||||
| T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}'
|
| T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}'
|
||||||
{ $$ = expr.NewArrayDimFetch(expr.NewVariable($2), $4) }
|
{ $$ = expr.NewArrayDimFetch(expr.NewVariable(node.NewIdentifier($2)), $4) }
|
||||||
| T_CURLY_OPEN variable '}' { $$ = $2; }
|
| T_CURLY_OPEN variable '}' { $$ = $2; }
|
||||||
;
|
;
|
||||||
encaps_var_offset:
|
encaps_var_offset:
|
||||||
|
Loading…
Reference in New Issue
Block a user