array_item node
This commit is contained in:
parent
9d17cc7477
commit
d971494d12
39
node/expr/array_item.go
Normal file
39
node/expr/array_item.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package expr
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/z7zmey/php-parser/node"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ArrayItem struct {
|
||||||
|
node.SimpleNode
|
||||||
|
key node.Node
|
||||||
|
val node.Node
|
||||||
|
byRef bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewArrayItem(key node.Node, val node.Node, byRef bool) node.Node {
|
||||||
|
return ArrayItem{
|
||||||
|
node.SimpleNode{Name: "ArrayItem", Attributes: make(map[string]string)},
|
||||||
|
key,
|
||||||
|
val,
|
||||||
|
byRef,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n ArrayItem) Print(out io.Writer, indent string) {
|
||||||
|
fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name)
|
||||||
|
fmt.Fprintf(out, "\n%vbyRef: %t", indent+" ", n.byRef)
|
||||||
|
|
||||||
|
if n.key != nil {
|
||||||
|
fmt.Fprintf(out, "\n%vkey:", indent+" ")
|
||||||
|
n.key.Print(out, indent+" ")
|
||||||
|
}
|
||||||
|
|
||||||
|
if n.val != nil {
|
||||||
|
fmt.Fprintf(out, "\n%vval:", indent+" ")
|
||||||
|
n.val.Print(out, indent+" ")
|
||||||
|
}
|
||||||
|
}
|
@ -350,7 +350,7 @@ const yyEofCode = 1
|
|||||||
const yyErrCode = 2
|
const yyErrCode = 2
|
||||||
const yyInitialStackSize = 16
|
const yyInitialStackSize = 16
|
||||||
|
|
||||||
//line parser/parser.y:1154
|
//line parser/parser.y:1152
|
||||||
|
|
||||||
//line yacctab:1
|
//line yacctab:1
|
||||||
var yyExca = [...]int{
|
var yyExca = [...]int{
|
||||||
@ -3107,7 +3107,7 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-0 : yypt+1]
|
yyDollar = yyS[yypt-0 : yypt+1]
|
||||||
//line parser/parser.y:489
|
//line parser/parser.y:489
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("")
|
yyVAL.node = node.NewSimpleNode("TODO: must be nil")
|
||||||
}
|
}
|
||||||
case 180:
|
case 180:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
@ -4762,7 +4762,7 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-0 : yypt+1]
|
yyDollar = yyS[yypt-0 : yypt+1]
|
||||||
//line parser/parser.y:1081
|
//line parser/parser.y:1081
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("")
|
yyVAL.node = node.NewSimpleNode("TODO: must be nil")
|
||||||
}
|
}
|
||||||
case 453:
|
case 453:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
@ -4786,188 +4786,186 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1092
|
//line parser/parser.y:1092
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("ArrayElement").Append(yyDollar[1].node).Append(yyDollar[3].node)
|
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node, false)
|
||||||
}
|
}
|
||||||
case 457:
|
case 457:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1093
|
//line parser/parser.y:1093
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("ArrayElement").Append(yyDollar[1].node)
|
yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node, false)
|
||||||
}
|
}
|
||||||
case 458:
|
case 458:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line parser/parser.y:1094
|
//line parser/parser.y:1094
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("ArrayElement").Append(yyDollar[1].node).Append(node.NewSimpleNode("Ref").Append(yyDollar[4].node))
|
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[4].node, true)
|
||||||
}
|
}
|
||||||
case 459:
|
case 459:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1095
|
//line parser/parser.y:1095
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("ArrayElement").Append(node.NewSimpleNode("Ref").Append(yyDollar[2].node))
|
yyVAL.node = expr.NewArrayItem(nil, yyDollar[2].node, true)
|
||||||
}
|
}
|
||||||
case 460:
|
case 460:
|
||||||
yyDollar = yyS[yypt-6 : yypt+1]
|
yyDollar = yyS[yypt-6 : yypt+1]
|
||||||
//line parser/parser.y:1097
|
//line parser/parser.y:1097
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("ArrayElement").
|
fmt.Println("\nHellow world\n")
|
||||||
Append(yyDollar[1].node).
|
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, node.NewSimpleNode("List").Append(yyDollar[5].node), true)
|
||||||
Append(node.NewSimpleNode("ArrayList").Append(yyDollar[5].node))
|
|
||||||
}
|
}
|
||||||
case 461:
|
case 461:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line parser/parser.y:1103
|
//line parser/parser.y:1102
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("ArrayElement").
|
yyVAL.node = expr.NewArrayItem(nil, node.NewSimpleNode("List").Append(yyDollar[3].node), true)
|
||||||
Append(node.NewSimpleNode("ArrayList").Append(yyDollar[3].node))
|
|
||||||
}
|
}
|
||||||
case 462:
|
case 462:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1110
|
//line parser/parser.y:1108
|
||||||
{
|
{
|
||||||
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
|
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
|
||||||
}
|
}
|
||||||
case 463:
|
case 463:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1111
|
//line parser/parser.y:1109
|
||||||
{
|
{
|
||||||
yyVAL.list = append(yyDollar[1].list, scalar.NewEncapsedStringPart(yyDollar[2].token))
|
yyVAL.list = append(yyDollar[1].list, scalar.NewEncapsedStringPart(yyDollar[2].token))
|
||||||
}
|
}
|
||||||
case 464:
|
case 464:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1112
|
//line parser/parser.y:1110
|
||||||
{
|
{
|
||||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||||
}
|
}
|
||||||
case 465:
|
case 465:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1113
|
//line parser/parser.y:1111
|
||||||
{
|
{
|
||||||
yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token), yyDollar[2].node}
|
yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token), yyDollar[2].node}
|
||||||
}
|
}
|
||||||
case 466:
|
case 466:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1117
|
//line parser/parser.y:1115
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[1].token.String())
|
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[1].token.String())
|
||||||
}
|
}
|
||||||
case 467:
|
case 467:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line parser/parser.y:1118
|
//line parser/parser.y:1116
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(yyDollar[1].token), yyDollar[3].node)
|
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(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:1119
|
//line parser/parser.y:1117
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[1].token.String()).Append(node.NewSimpleNode("property").Attribute("value", yyDollar[3].token.String()))
|
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[1].token.String()).Append(node.NewSimpleNode("property").Attribute("value", yyDollar[3].token.String()))
|
||||||
}
|
}
|
||||||
case 469:
|
case 469:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1120
|
//line parser/parser.y:1118
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Append(node.NewSimpleNode("expr").Append(yyDollar[2].node))
|
yyVAL.node = node.NewSimpleNode("Variable").Append(node.NewSimpleNode("expr").Append(yyDollar[2].node))
|
||||||
}
|
}
|
||||||
case 470:
|
case 470:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1121
|
//line parser/parser.y:1119
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[2].token.String())
|
yyVAL.node = node.NewSimpleNode("Variable").Attribute("value", yyDollar[2].token.String())
|
||||||
}
|
}
|
||||||
case 471:
|
case 471:
|
||||||
yyDollar = yyS[yypt-6 : yypt+1]
|
yyDollar = yyS[yypt-6 : yypt+1]
|
||||||
//line parser/parser.y:1123
|
//line parser/parser.y:1121
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(yyDollar[2].token), yyDollar[4].node)
|
yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(yyDollar[2].token), yyDollar[4].node)
|
||||||
}
|
}
|
||||||
case 472:
|
case 472:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1124
|
//line parser/parser.y:1122
|
||||||
{
|
{
|
||||||
yyVAL.node = yyDollar[2].node
|
yyVAL.node = yyDollar[2].node
|
||||||
}
|
}
|
||||||
case 473:
|
case 473:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1127
|
//line parser/parser.y:1125
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("OffsetString").Attribute("value", yyDollar[1].token.String())
|
yyVAL.node = node.NewSimpleNode("OffsetString").Attribute("value", yyDollar[1].token.String())
|
||||||
}
|
}
|
||||||
case 474:
|
case 474:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1128
|
//line parser/parser.y:1126
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("OffsetNumString").Attribute("value", yyDollar[1].token.String())
|
yyVAL.node = node.NewSimpleNode("OffsetNumString").Attribute("value", yyDollar[1].token.String())
|
||||||
}
|
}
|
||||||
case 475:
|
case 475:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1129
|
//line parser/parser.y:1127
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("OffsetNegateNumString").Attribute("value", yyDollar[2].token.String())
|
yyVAL.node = node.NewSimpleNode("OffsetNegateNumString").Attribute("value", yyDollar[2].token.String())
|
||||||
}
|
}
|
||||||
case 476:
|
case 476:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1130
|
//line parser/parser.y:1128
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("OffsetVariable").Attribute("value", yyDollar[1].token.String())
|
yyVAL.node = node.NewSimpleNode("OffsetVariable").Attribute("value", yyDollar[1].token.String())
|
||||||
}
|
}
|
||||||
case 477:
|
case 477:
|
||||||
yyDollar = yyS[yypt-5 : yypt+1]
|
yyDollar = yyS[yypt-5 : yypt+1]
|
||||||
//line parser/parser.y:1134
|
//line parser/parser.y:1132
|
||||||
{
|
{
|
||||||
yyVAL.node = yyDollar[3].node
|
yyVAL.node = yyDollar[3].node
|
||||||
}
|
}
|
||||||
case 478:
|
case 478:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line parser/parser.y:1135
|
//line parser/parser.y:1133
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Empty").Append(yyDollar[3].node)
|
yyVAL.node = node.NewSimpleNode("Empty").Append(yyDollar[3].node)
|
||||||
}
|
}
|
||||||
case 479:
|
case 479:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1136
|
//line parser/parser.y:1134
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Include").Append(yyDollar[2].node)
|
yyVAL.node = node.NewSimpleNode("Include").Append(yyDollar[2].node)
|
||||||
}
|
}
|
||||||
case 480:
|
case 480:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1137
|
//line parser/parser.y:1135
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("IncludeOnce").Append(yyDollar[2].node)
|
yyVAL.node = node.NewSimpleNode("IncludeOnce").Append(yyDollar[2].node)
|
||||||
}
|
}
|
||||||
case 481:
|
case 481:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line parser/parser.y:1138
|
//line parser/parser.y:1136
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Eval").Append(yyDollar[3].node)
|
yyVAL.node = node.NewSimpleNode("Eval").Append(yyDollar[3].node)
|
||||||
}
|
}
|
||||||
case 482:
|
case 482:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1139
|
//line parser/parser.y:1137
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Require").Append(yyDollar[2].node)
|
yyVAL.node = node.NewSimpleNode("Require").Append(yyDollar[2].node)
|
||||||
}
|
}
|
||||||
case 483:
|
case 483:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line parser/parser.y:1140
|
//line parser/parser.y:1138
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("RequireOnce").Append(yyDollar[2].node)
|
yyVAL.node = node.NewSimpleNode("RequireOnce").Append(yyDollar[2].node)
|
||||||
}
|
}
|
||||||
case 484:
|
case 484:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1144
|
//line parser/parser.y:1142
|
||||||
{
|
{
|
||||||
yyVAL.node = yyDollar[1].node
|
yyVAL.node = yyDollar[1].node
|
||||||
}
|
}
|
||||||
case 485:
|
case 485:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line parser/parser.y:1145
|
//line parser/parser.y:1143
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("AndIsset").Append(yyDollar[1].node).Append(yyDollar[3].node)
|
yyVAL.node = node.NewSimpleNode("AndIsset").Append(yyDollar[1].node).Append(yyDollar[3].node)
|
||||||
}
|
}
|
||||||
case 486:
|
case 486:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line parser/parser.y:1149
|
//line parser/parser.y:1147
|
||||||
{
|
{
|
||||||
yyVAL.node = node.NewSimpleNode("Isset").Append(yyDollar[1].node)
|
yyVAL.node = node.NewSimpleNode("Isset").Append(yyDollar[1].node)
|
||||||
}
|
}
|
||||||
|
@ -486,7 +486,7 @@ interface_extends_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
implements_list:
|
implements_list:
|
||||||
/* empty */ { $$ = node.NewSimpleNode(""); }
|
/* empty */ { $$ = node.NewSimpleNode("TODO: must be nil"); }
|
||||||
| T_IMPLEMENTS name_list { $$ = $2; }
|
| T_IMPLEMENTS name_list { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1078,7 +1078,7 @@ array_pair_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
possible_array_pair:
|
possible_array_pair:
|
||||||
/* empty */ { $$ = node.NewSimpleNode(""); }
|
/* empty */ { $$ = node.NewSimpleNode("TODO: must be nil"); }
|
||||||
| array_pair { $$ = $1; }
|
| array_pair { $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1089,20 +1089,18 @@ non_empty_array_pair_list:
|
|||||||
;
|
;
|
||||||
|
|
||||||
array_pair:
|
array_pair:
|
||||||
expr T_DOUBLE_ARROW expr { $$ = node.NewSimpleNode("ArrayElement").Append($1).Append($3) }
|
expr T_DOUBLE_ARROW expr { $$ = expr.NewArrayItem($1, $3, false) }
|
||||||
| expr { $$ = node.NewSimpleNode("ArrayElement").Append($1) }
|
| expr { $$ = expr.NewArrayItem(nil, $1, false) }
|
||||||
| expr T_DOUBLE_ARROW '&' variable { $$ = node.NewSimpleNode("ArrayElement").Append($1).Append(node.NewSimpleNode("Ref").Append($4)) }
|
| expr T_DOUBLE_ARROW '&' variable { $$ = expr.NewArrayItem($1, $4, true) }
|
||||||
| '&' variable { $$ = node.NewSimpleNode("ArrayElement").Append(node.NewSimpleNode("Ref").Append($2)) }
|
| '&' variable { $$ = expr.NewArrayItem(nil, $2, true) }
|
||||||
| expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')'
|
| expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')'
|
||||||
{
|
{
|
||||||
$$ = node.NewSimpleNode("ArrayElement").
|
fmt.Println("\nHellow world\n")
|
||||||
Append($1).
|
$$ = expr.NewArrayItem($1, node.NewSimpleNode("List").Append($5), true)
|
||||||
Append(node.NewSimpleNode("ArrayList").Append($5))
|
|
||||||
}
|
}
|
||||||
| T_LIST '(' array_pair_list ')'
|
| T_LIST '(' array_pair_list ')'
|
||||||
{
|
{
|
||||||
$$ = node.NewSimpleNode("ArrayElement").
|
$$ = expr.NewArrayItem(nil, node.NewSimpleNode("List").Append($3), true)
|
||||||
Append(node.NewSimpleNode("ArrayList").Append($3))
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user