use empty *expr.ArrayItem to represent missed a list and array items.
This commit is contained in:
parent
b62cb4359b
commit
36d0cf4823
@ -202,7 +202,7 @@ func TestArrayItems(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -420,7 +420,7 @@ func TestListEmptyItem(t *testing.T) {
|
|||||||
EndPos: 13,
|
EndPos: 13,
|
||||||
},
|
},
|
||||||
Items: []node.Node{
|
Items: []node.Node{
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
&expr.ArrayItem{
|
&expr.ArrayItem{
|
||||||
Position: &position.Position{
|
Position: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -514,8 +514,8 @@ func TestListEmptyItems(t *testing.T) {
|
|||||||
EndPos: 17,
|
EndPos: 17,
|
||||||
},
|
},
|
||||||
Items: []node.Node{
|
Items: []node.Node{
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
&expr.ArrayItem{
|
&expr.ArrayItem{
|
||||||
Position: &position.Position{
|
Position: &position.Position{
|
||||||
StartLine: 1,
|
StartLine: 1,
|
||||||
@ -541,7 +541,7 @@ func TestListEmptyItems(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Expression: &expr.Variable{
|
Expression: &expr.Variable{
|
||||||
|
@ -202,7 +202,7 @@ func TestShortArrayItems(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
15
php5/php5.go
15
php5/php5.go
@ -347,6 +347,7 @@ const yyErrCode = 2
|
|||||||
const yyInitialStackSize = 16
|
const yyInitialStackSize = 16
|
||||||
|
|
||||||
//line php5/php5.y:6795
|
//line php5/php5.y:6795
|
||||||
|
|
||||||
type simpleIndirectReference struct {
|
type simpleIndirectReference struct {
|
||||||
all []*expr.Variable
|
all []*expr.Variable
|
||||||
last *expr.Variable
|
last *expr.Variable
|
||||||
@ -8741,15 +8742,15 @@ yydefault:
|
|||||||
//line php5/php5.y:6190
|
//line php5/php5.y:6190
|
||||||
{
|
{
|
||||||
if len(yyDollar[1].list) == 0 {
|
if len(yyDollar[1].list) == 0 {
|
||||||
yyDollar[1].list = []node.Node{nil}
|
yyDollar[1].list = []node.Node{expr.NewArrayItem(nil, nil)}
|
||||||
}
|
}
|
||||||
|
|
||||||
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
|
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
|
||||||
|
|
||||||
// save comments
|
// save comments
|
||||||
if lastNode(yyDollar[1].list) != nil {
|
// if lastNode($1) != nil {
|
||||||
lastNode(yyDollar[1].list).AddComments(yyDollar[2].token.Comments, comment.CommaToken)
|
lastNode(yyDollar[1].list).AddComments(yyDollar[2].token.Comments, comment.CommaToken)
|
||||||
}
|
// }
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
@ -8757,7 +8758,7 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php5/php5.y:6205
|
//line php5/php5.y:6205
|
||||||
{
|
{
|
||||||
if yyDollar[1].node == nil {
|
if yyDollar[1].node.(*expr.ArrayItem).Key == nil && yyDollar[1].node.(*expr.ArrayItem).Val == nil {
|
||||||
yyVAL.list = []node.Node{}
|
yyVAL.list = []node.Node{}
|
||||||
} else {
|
} else {
|
||||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||||
@ -8798,7 +8799,7 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-0 : yypt+1]
|
yyDollar = yyS[yypt-0 : yypt+1]
|
||||||
//line php5/php5.y:6244
|
//line php5/php5.y:6244
|
||||||
{
|
{
|
||||||
yyVAL.node = nil
|
yyVAL.node = expr.NewArrayItem(nil, nil)
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
@ -8817,7 +8818,7 @@ yydefault:
|
|||||||
yyVAL.list = yyDollar[1].list
|
yyVAL.list = yyDollar[1].list
|
||||||
|
|
||||||
if yyDollar[2].token != nil {
|
if yyDollar[2].token != nil {
|
||||||
yyVAL.list = append(yyDollar[1].list, nil)
|
yyVAL.list = append(yyDollar[1].list, expr.NewArrayItem(nil, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
// save comments
|
// save comments
|
||||||
|
12
php5/php5.y
12
php5/php5.y
@ -6189,21 +6189,19 @@ assignment_list:
|
|||||||
assignment_list ',' assignment_list_element
|
assignment_list ',' assignment_list_element
|
||||||
{
|
{
|
||||||
if len($1) == 0 {
|
if len($1) == 0 {
|
||||||
$1 = []node.Node{nil}
|
$1 = []node.Node{expr.NewArrayItem(nil, nil)}
|
||||||
}
|
}
|
||||||
|
|
||||||
$$ = append($1, $3)
|
$$ = append($1, $3)
|
||||||
|
|
||||||
// save comments
|
// save comments
|
||||||
if lastNode($1) != nil {
|
lastNode($1).AddComments($2.Comments, comment.CommaToken)
|
||||||
lastNode($1).AddComments($2.Comments, comment.CommaToken)
|
|
||||||
}
|
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
| assignment_list_element
|
| assignment_list_element
|
||||||
{
|
{
|
||||||
if $1 == nil {
|
if $1.(*expr.ArrayItem).Key == nil && $1.(*expr.ArrayItem).Val == nil {
|
||||||
$$ = []node.Node{}
|
$$ = []node.Node{}
|
||||||
} else {
|
} else {
|
||||||
$$ = []node.Node{$1}
|
$$ = []node.Node{$1}
|
||||||
@ -6242,7 +6240,7 @@ assignment_list_element:
|
|||||||
}
|
}
|
||||||
| /* empty */
|
| /* empty */
|
||||||
{
|
{
|
||||||
$$ = nil
|
$$ = expr.NewArrayItem(nil, nil)
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
@ -6261,7 +6259,7 @@ array_pair_list:
|
|||||||
$$ = $1
|
$$ = $1
|
||||||
|
|
||||||
if $2 != nil {
|
if $2 != nil {
|
||||||
$$ = append($1, nil)
|
$$ = append($1, expr.NewArrayItem(nil, nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
// save comments
|
// save comments
|
||||||
|
@ -8216,7 +8216,7 @@ func TestPhp5(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -11019,7 +11019,7 @@ func TestPhp5(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
94
php7/php7.go
94
php7/php7.go
@ -346,7 +346,7 @@ const yyEofCode = 1
|
|||||||
const yyErrCode = 2
|
const yyErrCode = 2
|
||||||
const yyInitialStackSize = 16
|
const yyInitialStackSize = 16
|
||||||
|
|
||||||
//line php7/php7.y:5348
|
//line php7/php7.y:5350
|
||||||
|
|
||||||
//line yacctab:1
|
//line yacctab:1
|
||||||
var yyExca = [...]int{
|
var yyExca = [...]int{
|
||||||
@ -7517,25 +7517,21 @@ yydefault:
|
|||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:4861
|
//line php7/php7.y:4861
|
||||||
{
|
{
|
||||||
if len(yyDollar[1].list) == 1 && yyDollar[1].list[0] == nil {
|
yyVAL.list = yyDollar[1].list
|
||||||
yyVAL.list = yyDollar[1].list[:0]
|
|
||||||
} else {
|
|
||||||
yyVAL.list = yyDollar[1].list
|
|
||||||
}
|
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
case 455:
|
case 455:
|
||||||
yyDollar = yyS[yypt-0 : yypt+1]
|
yyDollar = yyS[yypt-0 : yypt+1]
|
||||||
//line php7/php7.y:4874
|
//line php7/php7.y:4870
|
||||||
{
|
{
|
||||||
yyVAL.node = nil
|
yyVAL.node = expr.NewArrayItem(nil, nil)
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
case 456:
|
case 456:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:4880
|
//line php7/php7.y:4876
|
||||||
{
|
{
|
||||||
yyVAL.node = yyDollar[1].node
|
yyVAL.node = yyDollar[1].node
|
||||||
|
|
||||||
@ -7543,28 +7539,34 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 457:
|
case 457:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line php7/php7.y:4889
|
//line php7/php7.y:4885
|
||||||
{
|
{
|
||||||
|
if len(yyDollar[1].list) == 0 {
|
||||||
|
yyDollar[1].list = []node.Node{expr.NewArrayItem(nil, nil)}
|
||||||
|
}
|
||||||
|
|
||||||
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
|
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
|
||||||
|
|
||||||
// save comments
|
// save comments
|
||||||
if lastNode(yyDollar[1].list) != nil {
|
lastNode(yyDollar[1].list).AddComments(yyDollar[2].token.Comments, comment.CommaToken)
|
||||||
lastNode(yyDollar[1].list).AddComments(yyDollar[2].token.Comments, comment.CommaToken)
|
|
||||||
}
|
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
case 458:
|
case 458:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:4900
|
//line php7/php7.y:4898
|
||||||
{
|
{
|
||||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
if yyDollar[1].node.(*expr.ArrayItem).Key == nil && yyDollar[1].node.(*expr.ArrayItem).Val == nil {
|
||||||
|
yyVAL.list = []node.Node{}
|
||||||
|
} else {
|
||||||
|
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||||
|
}
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
case 459:
|
case 459:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line php7/php7.y:4909
|
//line php7/php7.y:4911
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node)
|
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node)
|
||||||
|
|
||||||
@ -7578,7 +7580,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 460:
|
case 460:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:4921
|
//line php7/php7.y:4923
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node)
|
yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node)
|
||||||
|
|
||||||
@ -7589,7 +7591,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 461:
|
case 461:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line php7/php7.y:4930
|
//line php7/php7.y:4932
|
||||||
{
|
{
|
||||||
reference := expr.NewReference(yyDollar[4].node)
|
reference := expr.NewReference(yyDollar[4].node)
|
||||||
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, reference)
|
yyVAL.node = expr.NewArrayItem(yyDollar[1].node, reference)
|
||||||
@ -7606,7 +7608,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 462:
|
case 462:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:4945
|
//line php7/php7.y:4947
|
||||||
{
|
{
|
||||||
reference := expr.NewReference(yyDollar[2].node)
|
reference := expr.NewReference(yyDollar[2].node)
|
||||||
yyVAL.node = expr.NewArrayItem(nil, reference)
|
yyVAL.node = expr.NewArrayItem(nil, reference)
|
||||||
@ -7622,7 +7624,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 463:
|
case 463:
|
||||||
yyDollar = yyS[yypt-6 : yypt+1]
|
yyDollar = yyS[yypt-6 : yypt+1]
|
||||||
//line php7/php7.y:4959
|
//line php7/php7.y:4961
|
||||||
{
|
{
|
||||||
// TODO: Cannot use list() as standalone expression
|
// TODO: Cannot use list() as standalone expression
|
||||||
list := expr.NewList(yyDollar[5].list)
|
list := expr.NewList(yyDollar[5].list)
|
||||||
@ -7642,7 +7644,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 464:
|
case 464:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line php7/php7.y:4977
|
//line php7/php7.y:4979
|
||||||
{
|
{
|
||||||
// TODO: Cannot use list() as standalone expression
|
// TODO: Cannot use list() as standalone expression
|
||||||
list := expr.NewList(yyDollar[3].list)
|
list := expr.NewList(yyDollar[3].list)
|
||||||
@ -7661,7 +7663,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 465:
|
case 465:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:4997
|
//line php7/php7.y:4999
|
||||||
{
|
{
|
||||||
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
|
yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
|
||||||
|
|
||||||
@ -7669,7 +7671,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 466:
|
case 466:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:5003
|
//line php7/php7.y:5005
|
||||||
{
|
{
|
||||||
encapsed := scalar.NewEncapsedStringPart(yyDollar[2].token.Value)
|
encapsed := scalar.NewEncapsedStringPart(yyDollar[2].token.Value)
|
||||||
yyVAL.list = append(yyDollar[1].list, encapsed)
|
yyVAL.list = append(yyDollar[1].list, encapsed)
|
||||||
@ -7684,7 +7686,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 467:
|
case 467:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:5016
|
//line php7/php7.y:5018
|
||||||
{
|
{
|
||||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||||
|
|
||||||
@ -7692,7 +7694,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 468:
|
case 468:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:5022
|
//line php7/php7.y:5024
|
||||||
{
|
{
|
||||||
encapsed := scalar.NewEncapsedStringPart(yyDollar[1].token.Value)
|
encapsed := scalar.NewEncapsedStringPart(yyDollar[1].token.Value)
|
||||||
yyVAL.list = []node.Node{encapsed, yyDollar[2].node}
|
yyVAL.list = []node.Node{encapsed, yyDollar[2].node}
|
||||||
@ -7707,7 +7709,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 469:
|
case 469:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:5038
|
//line php7/php7.y:5040
|
||||||
{
|
{
|
||||||
name := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
name := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
||||||
yyVAL.node = expr.NewVariable(name)
|
yyVAL.node = expr.NewVariable(name)
|
||||||
@ -7723,7 +7725,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 470:
|
case 470:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line php7/php7.y:5052
|
//line php7/php7.y:5054
|
||||||
{
|
{
|
||||||
identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
||||||
variable := expr.NewVariable(identifier)
|
variable := expr.NewVariable(identifier)
|
||||||
@ -7743,7 +7745,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 471:
|
case 471:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line php7/php7.y:5070
|
//line php7/php7.y:5072
|
||||||
{
|
{
|
||||||
identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
||||||
variable := expr.NewVariable(identifier)
|
variable := expr.NewVariable(identifier)
|
||||||
@ -7765,7 +7767,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 472:
|
case 472:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line php7/php7.y:5090
|
//line php7/php7.y:5092
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewVariable(yyDollar[2].node)
|
yyVAL.node = expr.NewVariable(yyDollar[2].node)
|
||||||
|
|
||||||
@ -7780,7 +7782,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 473:
|
case 473:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line php7/php7.y:5103
|
//line php7/php7.y:5105
|
||||||
{
|
{
|
||||||
name := node.NewIdentifier(yyDollar[2].token.Value)
|
name := node.NewIdentifier(yyDollar[2].token.Value)
|
||||||
yyVAL.node = expr.NewVariable(name)
|
yyVAL.node = expr.NewVariable(name)
|
||||||
@ -7798,7 +7800,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 474:
|
case 474:
|
||||||
yyDollar = yyS[yypt-6 : yypt+1]
|
yyDollar = yyS[yypt-6 : yypt+1]
|
||||||
//line php7/php7.y:5119
|
//line php7/php7.y:5121
|
||||||
{
|
{
|
||||||
identifier := node.NewIdentifier(yyDollar[2].token.Value)
|
identifier := node.NewIdentifier(yyDollar[2].token.Value)
|
||||||
variable := expr.NewVariable(identifier)
|
variable := expr.NewVariable(identifier)
|
||||||
@ -7820,7 +7822,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 475:
|
case 475:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line php7/php7.y:5139
|
//line php7/php7.y:5141
|
||||||
{
|
{
|
||||||
yyVAL.node = yyDollar[2].node
|
yyVAL.node = yyDollar[2].node
|
||||||
|
|
||||||
@ -7828,7 +7830,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 476:
|
case 476:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:5148
|
//line php7/php7.y:5150
|
||||||
{
|
{
|
||||||
yyVAL.node = scalar.NewString(yyDollar[1].token.Value)
|
yyVAL.node = scalar.NewString(yyDollar[1].token.Value)
|
||||||
|
|
||||||
@ -7842,7 +7844,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 477:
|
case 477:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:5160
|
//line php7/php7.y:5162
|
||||||
{
|
{
|
||||||
// TODO: add option to handle 64 bit integer
|
// TODO: add option to handle 64 bit integer
|
||||||
if _, err := strconv.Atoi(yyDollar[1].token.Value); err == nil {
|
if _, err := strconv.Atoi(yyDollar[1].token.Value); err == nil {
|
||||||
@ -7861,7 +7863,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 478:
|
case 478:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:5177
|
//line php7/php7.y:5179
|
||||||
{
|
{
|
||||||
var lnumber *scalar.Lnumber
|
var lnumber *scalar.Lnumber
|
||||||
// TODO: add option to handle 64 bit integer
|
// TODO: add option to handle 64 bit integer
|
||||||
@ -7894,7 +7896,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 479:
|
case 479:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:5208
|
//line php7/php7.y:5210
|
||||||
{
|
{
|
||||||
identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
|
||||||
yyVAL.node = expr.NewVariable(identifier)
|
yyVAL.node = expr.NewVariable(identifier)
|
||||||
@ -7910,7 +7912,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 480:
|
case 480:
|
||||||
yyDollar = yyS[yypt-5 : yypt+1]
|
yyDollar = yyS[yypt-5 : yypt+1]
|
||||||
//line php7/php7.y:5225
|
//line php7/php7.y:5227
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewIsset(yyDollar[3].list)
|
yyVAL.node = expr.NewIsset(yyDollar[3].list)
|
||||||
|
|
||||||
@ -7929,7 +7931,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 481:
|
case 481:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line php7/php7.y:5242
|
//line php7/php7.y:5244
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewEmpty(yyDollar[3].node)
|
yyVAL.node = expr.NewEmpty(yyDollar[3].node)
|
||||||
|
|
||||||
@ -7945,7 +7947,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 482:
|
case 482:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:5256
|
//line php7/php7.y:5258
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewInclude(yyDollar[2].node)
|
yyVAL.node = expr.NewInclude(yyDollar[2].node)
|
||||||
|
|
||||||
@ -7959,7 +7961,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 483:
|
case 483:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:5268
|
//line php7/php7.y:5270
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node)
|
yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node)
|
||||||
|
|
||||||
@ -7973,7 +7975,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 484:
|
case 484:
|
||||||
yyDollar = yyS[yypt-4 : yypt+1]
|
yyDollar = yyS[yypt-4 : yypt+1]
|
||||||
//line php7/php7.y:5280
|
//line php7/php7.y:5282
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewEval(yyDollar[3].node)
|
yyVAL.node = expr.NewEval(yyDollar[3].node)
|
||||||
|
|
||||||
@ -7989,7 +7991,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 485:
|
case 485:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:5294
|
//line php7/php7.y:5296
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewRequire(yyDollar[2].node)
|
yyVAL.node = expr.NewRequire(yyDollar[2].node)
|
||||||
|
|
||||||
@ -8003,7 +8005,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 486:
|
case 486:
|
||||||
yyDollar = yyS[yypt-2 : yypt+1]
|
yyDollar = yyS[yypt-2 : yypt+1]
|
||||||
//line php7/php7.y:5306
|
//line php7/php7.y:5308
|
||||||
{
|
{
|
||||||
yyVAL.node = expr.NewRequireOnce(yyDollar[2].node)
|
yyVAL.node = expr.NewRequireOnce(yyDollar[2].node)
|
||||||
|
|
||||||
@ -8017,7 +8019,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 487:
|
case 487:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:5321
|
//line php7/php7.y:5323
|
||||||
{
|
{
|
||||||
yyVAL.list = []node.Node{yyDollar[1].node}
|
yyVAL.list = []node.Node{yyDollar[1].node}
|
||||||
|
|
||||||
@ -8025,7 +8027,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 488:
|
case 488:
|
||||||
yyDollar = yyS[yypt-3 : yypt+1]
|
yyDollar = yyS[yypt-3 : yypt+1]
|
||||||
//line php7/php7.y:5327
|
//line php7/php7.y:5329
|
||||||
{
|
{
|
||||||
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
|
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
|
||||||
|
|
||||||
@ -8036,7 +8038,7 @@ yydefault:
|
|||||||
}
|
}
|
||||||
case 489:
|
case 489:
|
||||||
yyDollar = yyS[yypt-1 : yypt+1]
|
yyDollar = yyS[yypt-1 : yypt+1]
|
||||||
//line php7/php7.y:5339
|
//line php7/php7.y:5341
|
||||||
{
|
{
|
||||||
yyVAL.node = yyDollar[1].node
|
yyVAL.node = yyDollar[1].node
|
||||||
|
|
||||||
|
22
php7/php7.y
22
php7/php7.y
@ -4859,11 +4859,7 @@ property_name:
|
|||||||
array_pair_list:
|
array_pair_list:
|
||||||
non_empty_array_pair_list
|
non_empty_array_pair_list
|
||||||
{
|
{
|
||||||
if (len($1) == 1 && $1[0] == nil) {
|
$$ = $1
|
||||||
$$ = $1[:0]
|
|
||||||
} else {
|
|
||||||
$$ = $1
|
|
||||||
}
|
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
@ -4872,7 +4868,7 @@ array_pair_list:
|
|||||||
possible_array_pair:
|
possible_array_pair:
|
||||||
/* empty */
|
/* empty */
|
||||||
{
|
{
|
||||||
$$ = nil
|
$$ = expr.NewArrayItem(nil, nil)
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
@ -4887,18 +4883,24 @@ possible_array_pair:
|
|||||||
non_empty_array_pair_list:
|
non_empty_array_pair_list:
|
||||||
non_empty_array_pair_list ',' possible_array_pair
|
non_empty_array_pair_list ',' possible_array_pair
|
||||||
{
|
{
|
||||||
|
if len($1) == 0 {
|
||||||
|
$1 = []node.Node{expr.NewArrayItem(nil, nil)}
|
||||||
|
}
|
||||||
|
|
||||||
$$ = append($1, $3)
|
$$ = append($1, $3)
|
||||||
|
|
||||||
// save comments
|
// save comments
|
||||||
if lastNode($1) != nil {
|
lastNode($1).AddComments($2.Comments, comment.CommaToken)
|
||||||
lastNode($1).AddComments($2.Comments, comment.CommaToken)
|
|
||||||
}
|
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
| possible_array_pair
|
| possible_array_pair
|
||||||
{
|
{
|
||||||
$$ = []node.Node{$1}
|
if $1.(*expr.ArrayItem).Key == nil && $1.(*expr.ArrayItem).Val == nil {
|
||||||
|
$$ = []node.Node{}
|
||||||
|
} else {
|
||||||
|
$$ = []node.Node{$1}
|
||||||
|
}
|
||||||
|
|
||||||
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
|
||||||
}
|
}
|
||||||
|
@ -9034,7 +9034,7 @@ func TestPhp7(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -11169,7 +11169,7 @@ func TestPhp7(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
nil,
|
&expr.ArrayItem{},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user