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 yyInitialStackSize = 16
|
||||
|
||||
//line parser/parser.y:1154
|
||||
//line parser/parser.y:1152
|
||||
|
||||
//line yacctab:1
|
||||
var yyExca = [...]int{
|
||||
@ -3107,7 +3107,7 @@ yydefault:
|
||||
yyDollar = yyS[yypt-0 : yypt+1]
|
||||
//line parser/parser.y:489
|
||||
{
|
||||
yyVAL.node = node.NewSimpleNode("")
|
||||
yyVAL.node = node.NewSimpleNode("TODO: must be nil")
|
||||
}
|
||||
case 180:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
@ -4762,7 +4762,7 @@ yydefault:
|
||||
yyDollar = yyS[yypt-0 : yypt+1]
|
||||
//line parser/parser.y:1081
|
||||
{
|
||||
yyVAL.node = node.NewSimpleNode("")
|
||||
yyVAL.node = node.NewSimpleNode("TODO: must be nil")
|
||||
}
|
||||
case 453:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
@ -4786,188 +4786,186 @@ yydefault:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//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:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//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:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//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:
|
||||
yyDollar = yyS[yypt-2 : yypt+1]
|
||||
//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:
|
||||
yyDollar = yyS[yypt-6 : yypt+1]
|
||||
//line parser/parser.y:1097
|
||||
{
|
||||
yyVAL.node = node.NewSimpleNode("ArrayElement").
|
||||
Append(yyDollar[1].node).
|
||||
Append(node.NewSimpleNode("ArrayList").Append(yyDollar[5].node))
|
||||
fmt.Println("\nHellow world\n")
|
||||
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, node.NewSimpleNode("List").Append(yyDollar[5].node), true)
|
||||
}
|
||||
case 461:
|
||||
yyDollar = yyS[yypt-4 : yypt+1]
|
||||
//line parser/parser.y:1103
|
||||
//line parser/parser.y:1102
|
||||
{
|
||||
yyVAL.node = node.NewSimpleNode("ArrayElement").
|
||||
Append(node.NewSimpleNode("ArrayList").Append(yyDollar[3].node))
|
||||
yyVAL.node = expr.NewArrayItem(nil, node.NewSimpleNode("List").Append(yyDollar[3].node), true)
|
||||
}
|
||||
case 462:
|
||||
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)
|
||||
}
|
||||
case 463:
|
||||
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))
|
||||
}
|
||||
case 464:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line parser/parser.y:1112
|
||||
//line parser/parser.y:1110
|
||||
{
|
||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||
}
|
||||
case 465:
|
||||
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}
|
||||
}
|
||||
case 466:
|
||||
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())
|
||||
}
|
||||
case 467:
|
||||
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)
|
||||
}
|
||||
case 468:
|
||||
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()))
|
||||
}
|
||||
case 469:
|
||||
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))
|
||||
}
|
||||
case 470:
|
||||
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())
|
||||
}
|
||||
case 471:
|
||||
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)
|
||||
}
|
||||
case 472:
|
||||
yyDollar = yyS[yypt-3 : yypt+1]
|
||||
//line parser/parser.y:1124
|
||||
//line parser/parser.y:1122
|
||||
{
|
||||
yyVAL.node = yyDollar[2].node
|
||||
}
|
||||
case 473:
|
||||
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())
|
||||
}
|
||||
case 474:
|
||||
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())
|
||||
}
|
||||
case 475:
|
||||
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())
|
||||
}
|
||||
case 476:
|
||||
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())
|
||||
}
|
||||
case 477:
|
||||
yyDollar = yyS[yypt-5 : yypt+1]
|
||||
//line parser/parser.y:1134
|
||||
//line parser/parser.y:1132
|
||||
{
|
||||
yyVAL.node = yyDollar[3].node
|
||||
}
|
||||
case 478:
|
||||
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)
|
||||
}
|
||||
case 479:
|
||||
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)
|
||||
}
|
||||
case 480:
|
||||
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)
|
||||
}
|
||||
case 481:
|
||||
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)
|
||||
}
|
||||
case 482:
|
||||
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)
|
||||
}
|
||||
case 483:
|
||||
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)
|
||||
}
|
||||
case 484:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line parser/parser.y:1144
|
||||
//line parser/parser.y:1142
|
||||
{
|
||||
yyVAL.node = yyDollar[1].node
|
||||
}
|
||||
case 485:
|
||||
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)
|
||||
}
|
||||
case 486:
|
||||
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)
|
||||
}
|
||||
|
@ -486,7 +486,7 @@ interface_extends_list:
|
||||
;
|
||||
|
||||
implements_list:
|
||||
/* empty */ { $$ = node.NewSimpleNode(""); }
|
||||
/* empty */ { $$ = node.NewSimpleNode("TODO: must be nil"); }
|
||||
| T_IMPLEMENTS name_list { $$ = $2; }
|
||||
;
|
||||
|
||||
@ -1078,7 +1078,7 @@ array_pair_list:
|
||||
;
|
||||
|
||||
possible_array_pair:
|
||||
/* empty */ { $$ = node.NewSimpleNode(""); }
|
||||
/* empty */ { $$ = node.NewSimpleNode("TODO: must be nil"); }
|
||||
| array_pair { $$ = $1; }
|
||||
;
|
||||
|
||||
@ -1089,20 +1089,18 @@ non_empty_array_pair_list:
|
||||
;
|
||||
|
||||
array_pair:
|
||||
expr T_DOUBLE_ARROW expr { $$ = node.NewSimpleNode("ArrayElement").Append($1).Append($3) }
|
||||
| expr { $$ = node.NewSimpleNode("ArrayElement").Append($1) }
|
||||
| expr T_DOUBLE_ARROW '&' variable { $$ = node.NewSimpleNode("ArrayElement").Append($1).Append(node.NewSimpleNode("Ref").Append($4)) }
|
||||
| '&' variable { $$ = node.NewSimpleNode("ArrayElement").Append(node.NewSimpleNode("Ref").Append($2)) }
|
||||
expr T_DOUBLE_ARROW expr { $$ = expr.NewArrayItem($1, $3, false) }
|
||||
| expr { $$ = expr.NewArrayItem(nil, $1, false) }
|
||||
| expr T_DOUBLE_ARROW '&' variable { $$ = expr.NewArrayItem($1, $4, true) }
|
||||
| '&' variable { $$ = expr.NewArrayItem(nil, $2, true) }
|
||||
| expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')'
|
||||
{
|
||||
$$ = node.NewSimpleNode("ArrayElement").
|
||||
Append($1).
|
||||
Append(node.NewSimpleNode("ArrayList").Append($5))
|
||||
fmt.Println("\nHellow world\n")
|
||||
$$ = expr.NewArrayItem($1, node.NewSimpleNode("List").Append($5), true)
|
||||
}
|
||||
| T_LIST '(' array_pair_list ')'
|
||||
{
|
||||
$$ = node.NewSimpleNode("ArrayElement").
|
||||
Append(node.NewSimpleNode("ArrayList").Append($3))
|
||||
$$ = expr.NewArrayItem(nil, node.NewSimpleNode("List").Append($3), true)
|
||||
}
|
||||
;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user