refactoring: update ast structure of "Variable" node
This commit is contained in:
		
							parent
							
								
									69919594fd
								
							
						
					
					
						commit
						2c09138600
					
				| @ -16726,14 +16726,7 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 								}, | 								}, | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
| 						VarName: &ast.ParserBrackets{ | 						OpenCurlyBracketTkn: &token.Token{ | ||||||
| 							Position: &position.Position{ |  | ||||||
| 								StartLine: 1, |  | ||||||
| 								EndLine:   1, |  | ||||||
| 								StartPos:  24, |  | ||||||
| 								EndPos:    31, |  | ||||||
| 							}, |  | ||||||
| 							OpenBracketTkn: &token.Token{ |  | ||||||
| 							ID:    token.ID(123), | 							ID:    token.ID(123), | ||||||
| 							Value: []byte("{"), | 							Value: []byte("{"), | ||||||
| 							Position: &position.Position{ | 							Position: &position.Position{ | ||||||
| @ -16743,7 +16736,7 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 								EndPos:    25, | 								EndPos:    25, | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
| 							Child: &ast.ExprFunctionCall{ | 						VarName: &ast.ExprFunctionCall{ | ||||||
| 							Position: &position.Position{ | 							Position: &position.Position{ | ||||||
| 								StartLine: 1, | 								StartLine: 1, | ||||||
| 								EndLine:   1, | 								EndLine:   1, | ||||||
| @ -16800,7 +16793,7 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 								}, | 								}, | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
| 							CloseBracketTkn: &token.Token{ | 						CloseCurlyBracketTkn: &token.Token{ | ||||||
| 							ID:    token.ID(125), | 							ID:    token.ID(125), | ||||||
| 							Value: []byte("}"), | 							Value: []byte("}"), | ||||||
| 							Position: &position.Position{ | 							Position: &position.Position{ | ||||||
| @ -16812,7 +16805,6 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 						}, | 						}, | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
| 				}, |  | ||||||
| 				SeparatorTkns: []*token.Token{ | 				SeparatorTkns: []*token.Token{ | ||||||
| 					{ | 					{ | ||||||
| 						ID:    token.ID(44), | 						ID:    token.ID(44), | ||||||
|  | |||||||
							
								
								
									
										732
									
								
								internal/php5/php5.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										732
									
								
								internal/php5/php5.go
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -2024,12 +2024,9 @@ global_var: | |||||||
|                 $$ = &ast.ExprVariable{ |                 $$ = &ast.ExprVariable{ | ||||||
|                     Position:             yylex.(*Parser).builder.NewTokensPosition($1, $4), |                     Position:             yylex.(*Parser).builder.NewTokensPosition($1, $4), | ||||||
|                     DollarTkn:            $1, |                     DollarTkn:            $1, | ||||||
|                     VarName: &ast.ParserBrackets{ |                     OpenCurlyBracketTkn:  $2, | ||||||
|                         Position: yylex.(*Parser).builder.NewTokensPosition($2, $4), |                     VarName:              $3, | ||||||
|                         OpenBracketTkn:  $2, |                     CloseCurlyBracketTkn: $4, | ||||||
|                         Child:           $3, |  | ||||||
|                         CloseBracketTkn: $4, |  | ||||||
|                     }, |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| ; | ; | ||||||
| @ -5019,12 +5016,9 @@ compound_variable: | |||||||
|                 $$ = &ast.ExprVariable{ |                 $$ = &ast.ExprVariable{ | ||||||
|                     Position:             yylex.(*Parser).builder.NewTokensPosition($1, $4), |                     Position:             yylex.(*Parser).builder.NewTokensPosition($1, $4), | ||||||
|                     DollarTkn:            $1, |                     DollarTkn:            $1, | ||||||
|                     VarName: &ast.ParserBrackets{ |                     OpenCurlyBracketTkn:  $2, | ||||||
|                         Position: yylex.(*Parser).builder.NewTokensPosition($2, $4), |                     VarName:              $3, | ||||||
|                         OpenBracketTkn:  $2, |                     CloseCurlyBracketTkn: $4, | ||||||
|                         Child:           $3, |  | ||||||
|                         CloseBracketTkn: $4, |  | ||||||
|                     }, |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| ; | ; | ||||||
|  | |||||||
| @ -18412,14 +18412,7 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 								}, | 								}, | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
| 						VarName: &ast.ParserBrackets{ | 						OpenCurlyBracketTkn: &token.Token{ | ||||||
| 							Position: &position.Position{ |  | ||||||
| 								StartLine: 1, |  | ||||||
| 								EndLine:   1, |  | ||||||
| 								StartPos:  24, |  | ||||||
| 								EndPos:    31, |  | ||||||
| 							}, |  | ||||||
| 							OpenBracketTkn: &token.Token{ |  | ||||||
| 							ID:    token.ID(123), | 							ID:    token.ID(123), | ||||||
| 							Value: []byte("{"), | 							Value: []byte("{"), | ||||||
| 							Position: &position.Position{ | 							Position: &position.Position{ | ||||||
| @ -18429,7 +18422,7 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 								EndPos:    25, | 								EndPos:    25, | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
| 							Child: &ast.ExprFunctionCall{ | 						VarName: &ast.ExprFunctionCall{ | ||||||
| 							Position: &position.Position{ | 							Position: &position.Position{ | ||||||
| 								StartLine: 1, | 								StartLine: 1, | ||||||
| 								EndLine:   1, | 								EndLine:   1, | ||||||
| @ -18486,7 +18479,7 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 								}, | 								}, | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
| 							CloseBracketTkn: &token.Token{ | 						CloseCurlyBracketTkn: &token.Token{ | ||||||
| 							ID:    token.ID(125), | 							ID:    token.ID(125), | ||||||
| 							Value: []byte("}"), | 							Value: []byte("}"), | ||||||
| 							Position: &position.Position{ | 							Position: &position.Position{ | ||||||
| @ -18498,7 +18491,6 @@ func TestStmtGlobal_Vars(t *testing.T) { | |||||||
| 						}, | 						}, | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
| 				}, |  | ||||||
| 				SeparatorTkns: []*token.Token{ | 				SeparatorTkns: []*token.Token{ | ||||||
| 					{ | 					{ | ||||||
| 						ID:    token.ID(44), | 						ID:    token.ID(44), | ||||||
|  | |||||||
							
								
								
									
										115
									
								
								internal/php7/php7.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										115
									
								
								internal/php7/php7.go
									
									
									
										generated
									
									
									
								
							| @ -339,7 +339,7 @@ const yyEofCode = 1 | |||||||
| const yyErrCode = 2 | const yyErrCode = 2 | ||||||
| const yyInitialStackSize = 16 | const yyInitialStackSize = 16 | ||||||
| 
 | 
 | ||||||
| // line internal/php7/php7.y:4353 | // line internal/php7/php7.y:4350 | ||||||
| 
 | 
 | ||||||
| // line yacctab:1 | // line yacctab:1 | ||||||
| var yyExca = [...]int{ | var yyExca = [...]int{ | ||||||
| @ -6450,17 +6450,14 @@ yydefault: | |||||||
| 			yyVAL.node = &ast.ExprVariable{ | 			yyVAL.node = &ast.ExprVariable{ | ||||||
| 				Position:             yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | 				Position:             yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||||
| 				DollarTkn:            yyDollar[1].token, | 				DollarTkn:            yyDollar[1].token, | ||||||
| 				VarName: &ast.ParserBrackets{ | 				OpenCurlyBracketTkn:  yyDollar[2].token, | ||||||
| 					Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[2].token, yyDollar[4].token), | 				VarName:              yyDollar[3].node, | ||||||
| 					OpenBracketTkn:  yyDollar[2].token, | 				CloseCurlyBracketTkn: yyDollar[4].token, | ||||||
| 					Child:           yyDollar[3].node, |  | ||||||
| 					CloseBracketTkn: yyDollar[4].token, |  | ||||||
| 				}, |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	case 443: | 	case 443: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3804 | 		// line internal/php7/php7.y:3801 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprVariable{ | 			yyVAL.node = &ast.ExprVariable{ | ||||||
| 				Position:  yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | 				Position:  yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||||
| @ -6470,7 +6467,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 444: | 	case 444: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3815 | 		// line internal/php7/php7.y:3812 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||||
| @ -6481,7 +6478,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 445: | 	case 445: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3824 | 		// line internal/php7/php7.y:3821 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||||
| @ -6492,13 +6489,13 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 446: | 	case 446: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3836 | 		// line internal/php7/php7.y:3833 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = yyDollar[1].node | 			yyVAL.node = yyDollar[1].node | ||||||
| 		} | 		} | ||||||
| 	case 447: | 	case 447: | ||||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | 		yyDollar = yyS[yypt-4 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3840 | 		// line internal/php7/php7.y:3837 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||||
| 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | ||||||
| @ -6510,7 +6507,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 448: | 	case 448: | ||||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | 		yyDollar = yyS[yypt-4 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3850 | 		// line internal/php7/php7.y:3847 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||||
| 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | ||||||
| @ -6522,7 +6519,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 449: | 	case 449: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3860 | 		// line internal/php7/php7.y:3857 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprPropertyFetch{ | 			yyVAL.node = &ast.ExprPropertyFetch{ | ||||||
| 				Position:          yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | 				Position:          yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||||
| @ -6533,7 +6530,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 450: | 	case 450: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3869 | 		// line internal/php7/php7.y:3866 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||||
| @ -6544,7 +6541,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 451: | 	case 451: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3878 | 		// line internal/php7/php7.y:3875 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||||
| @ -6555,7 +6552,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 452: | 	case 452: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3890 | 		// line internal/php7/php7.y:3887 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.Identifier{ | 			yyVAL.node = &ast.Identifier{ | ||||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||||
| @ -6565,7 +6562,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 453: | 	case 453: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3898 | 		// line internal/php7/php7.y:3895 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserBrackets{ | 			yyVAL.node = &ast.ParserBrackets{ | ||||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||||
| @ -6576,13 +6573,13 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 454: | 	case 454: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3907 | 		// line internal/php7/php7.y:3904 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = yyDollar[1].node | 			yyVAL.node = yyDollar[1].node | ||||||
| 		} | 		} | ||||||
| 	case 455: | 	case 455: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3914 | 		// line internal/php7/php7.y:3911 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.Identifier{ | 			yyVAL.node = &ast.Identifier{ | ||||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||||
| @ -6592,7 +6589,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 456: | 	case 456: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3922 | 		// line internal/php7/php7.y:3919 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserBrackets{ | 			yyVAL.node = &ast.ParserBrackets{ | ||||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||||
| @ -6603,13 +6600,13 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 457: | 	case 457: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3931 | 		// line internal/php7/php7.y:3928 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = yyDollar[1].node | 			yyVAL.node = yyDollar[1].node | ||||||
| 		} | 		} | ||||||
| 	case 458: | 	case 458: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3938 | 		// line internal/php7/php7.y:3935 | ||||||
| 		{ | 		{ | ||||||
| 			pairList := yyDollar[1].node.(*ast.ParserSeparatedList) | 			pairList := yyDollar[1].node.(*ast.ParserSeparatedList) | ||||||
| 			fistPair := pairList.Items[0].(*ast.ExprArrayItem) | 			fistPair := pairList.Items[0].(*ast.ExprArrayItem) | ||||||
| @ -6622,19 +6619,19 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 459: | 	case 459: | ||||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | 		yyDollar = yyS[yypt-0 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3952 | 		// line internal/php7/php7.y:3949 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{} | 			yyVAL.node = &ast.ExprArrayItem{} | ||||||
| 		} | 		} | ||||||
| 	case 460: | 	case 460: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3956 | 		// line internal/php7/php7.y:3953 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = yyDollar[1].node | 			yyVAL.node = yyDollar[1].node | ||||||
| 		} | 		} | ||||||
| 	case 461: | 	case 461: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3963 | 		// line internal/php7/php7.y:3960 | ||||||
| 		{ | 		{ | ||||||
| 			yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) | 			yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) | ||||||
| 			yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) | 			yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) | ||||||
| @ -6643,7 +6640,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 462: | 	case 462: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3970 | 		// line internal/php7/php7.y:3967 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserSeparatedList{ | 			yyVAL.node = &ast.ParserSeparatedList{ | ||||||
| 				Items: []ast.Vertex{yyDollar[1].node}, | 				Items: []ast.Vertex{yyDollar[1].node}, | ||||||
| @ -6651,7 +6648,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 463: | 	case 463: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3979 | 		// line internal/php7/php7.y:3976 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{ | 			yyVAL.node = &ast.ExprArrayItem{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||||
| @ -6662,7 +6659,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 464: | 	case 464: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3988 | 		// line internal/php7/php7.y:3985 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{ | 			yyVAL.node = &ast.ExprArrayItem{ | ||||||
| 				Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), | 				Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), | ||||||
| @ -6671,7 +6668,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 465: | 	case 465: | ||||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | 		yyDollar = yyS[yypt-4 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:3995 | 		// line internal/php7/php7.y:3992 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{ | 			yyVAL.node = &ast.ExprArrayItem{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), | 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), | ||||||
| @ -6683,7 +6680,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 466: | 	case 466: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4005 | 		// line internal/php7/php7.y:4002 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{ | 			yyVAL.node = &ast.ExprArrayItem{ | ||||||
| 				Position:     yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | 				Position:     yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||||
| @ -6693,7 +6690,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 467: | 	case 467: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4013 | 		// line internal/php7/php7.y:4010 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{ | 			yyVAL.node = &ast.ExprArrayItem{ | ||||||
| 				Position:    yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | 				Position:    yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||||
| @ -6703,7 +6700,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 468: | 	case 468: | ||||||
| 		yyDollar = yyS[yypt-6 : yypt+1] | 		yyDollar = yyS[yypt-6 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4021 | 		// line internal/php7/php7.y:4018 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{ | 			yyVAL.node = &ast.ExprArrayItem{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token), | 				Position:       yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token), | ||||||
| @ -6721,7 +6718,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 469: | 	case 469: | ||||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | 		yyDollar = yyS[yypt-4 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4037 | 		// line internal/php7/php7.y:4034 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayItem{ | 			yyVAL.node = &ast.ExprArrayItem{ | ||||||
| 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||||
| @ -6737,13 +6734,13 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 470: | 	case 470: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4054 | 		// line internal/php7/php7.y:4051 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) | 			yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) | ||||||
| 		} | 		} | ||||||
| 	case 471: | 	case 471: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4058 | 		// line internal/php7/php7.y:4055 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.list = append( | 			yyVAL.list = append( | ||||||
| 				yyDollar[1].list, | 				yyDollar[1].list, | ||||||
| @ -6756,13 +6753,13 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 472: | 	case 472: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4069 | 		// line internal/php7/php7.y:4066 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.list = []ast.Vertex{yyDollar[1].node} | 			yyVAL.list = []ast.Vertex{yyDollar[1].node} | ||||||
| 		} | 		} | ||||||
| 	case 473: | 	case 473: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4073 | 		// line internal/php7/php7.y:4070 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.list = []ast.Vertex{ | 			yyVAL.list = []ast.Vertex{ | ||||||
| 				&ast.ScalarEncapsedStringPart{ | 				&ast.ScalarEncapsedStringPart{ | ||||||
| @ -6775,7 +6772,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 474: | 	case 474: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4087 | 		// line internal/php7/php7.y:4084 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprVariable{ | 			yyVAL.node = &ast.ExprVariable{ | ||||||
| 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||||
| @ -6788,7 +6785,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 475: | 	case 475: | ||||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | 		yyDollar = yyS[yypt-4 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4098 | 		// line internal/php7/php7.y:4095 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||||
| 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||||
| @ -6807,7 +6804,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 476: | 	case 476: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4115 | 		// line internal/php7/php7.y:4112 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprPropertyFetch{ | 			yyVAL.node = &ast.ExprPropertyFetch{ | ||||||
| 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||||
| @ -6829,7 +6826,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 477: | 	case 477: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4135 | 		// line internal/php7/php7.y:4132 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserBrackets{ | 			yyVAL.node = &ast.ParserBrackets{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||||
| @ -6843,7 +6840,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 478: | 	case 478: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4147 | 		// line internal/php7/php7.y:4144 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserBrackets{ | 			yyVAL.node = &ast.ParserBrackets{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||||
| @ -6861,7 +6858,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 479: | 	case 479: | ||||||
| 		yyDollar = yyS[yypt-6 : yypt+1] | 		yyDollar = yyS[yypt-6 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4163 | 		// line internal/php7/php7.y:4160 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserBrackets{ | 			yyVAL.node = &ast.ParserBrackets{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), | 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), | ||||||
| @ -6885,7 +6882,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 480: | 	case 480: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4185 | 		// line internal/php7/php7.y:4182 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserBrackets{ | 			yyVAL.node = &ast.ParserBrackets{ | ||||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||||
| @ -6896,7 +6893,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 481: | 	case 481: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4197 | 		// line internal/php7/php7.y:4194 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ScalarString{ | 			yyVAL.node = &ast.ScalarString{ | ||||||
| 				Position:  yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | 				Position:  yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||||
| @ -6906,7 +6903,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 482: | 	case 482: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4205 | 		// line internal/php7/php7.y:4202 | ||||||
| 		{ | 		{ | ||||||
| 			// TODO: add option to handle 64 bit integer | 			// TODO: add option to handle 64 bit integer | ||||||
| 			if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { | 			if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { | ||||||
| @ -6925,7 +6922,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 483: | 	case 483: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4222 | 		// line internal/php7/php7.y:4219 | ||||||
| 		{ | 		{ | ||||||
| 			_, err := strconv.Atoi(string(yyDollar[2].token.Value)) | 			_, err := strconv.Atoi(string(yyDollar[2].token.Value)) | ||||||
| 			isInt := err == nil | 			isInt := err == nil | ||||||
| @ -6951,7 +6948,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 484: | 	case 484: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4246 | 		// line internal/php7/php7.y:4243 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprVariable{ | 			yyVAL.node = &ast.ExprVariable{ | ||||||
| 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||||
| @ -6964,7 +6961,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 485: | 	case 485: | ||||||
| 		yyDollar = yyS[yypt-5 : yypt+1] | 		yyDollar = yyS[yypt-5 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4260 | 		// line internal/php7/php7.y:4257 | ||||||
| 		{ | 		{ | ||||||
| 			if yyDollar[4].token != nil { | 			if yyDollar[4].token != nil { | ||||||
| 				yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token) | 				yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token) | ||||||
| @ -6981,7 +6978,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 486: | 	case 486: | ||||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | 		yyDollar = yyS[yypt-4 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4275 | 		// line internal/php7/php7.y:4272 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprEmpty{ | 			yyVAL.node = &ast.ExprEmpty{ | ||||||
| 				Position:            yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | 				Position:            yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||||
| @ -6993,7 +6990,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 487: | 	case 487: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4285 | 		// line internal/php7/php7.y:4282 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprInclude{ | 			yyVAL.node = &ast.ExprInclude{ | ||||||
| 				Position:   yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | 				Position:   yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||||
| @ -7003,7 +7000,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 488: | 	case 488: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4293 | 		// line internal/php7/php7.y:4290 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprIncludeOnce{ | 			yyVAL.node = &ast.ExprIncludeOnce{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | 				Position:       yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||||
| @ -7013,7 +7010,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 489: | 	case 489: | ||||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | 		yyDollar = yyS[yypt-4 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4301 | 		// line internal/php7/php7.y:4298 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprEval{ | 			yyVAL.node = &ast.ExprEval{ | ||||||
| 				Position:            yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | 				Position:            yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||||
| @ -7025,7 +7022,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 490: | 	case 490: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4311 | 		// line internal/php7/php7.y:4308 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprRequire{ | 			yyVAL.node = &ast.ExprRequire{ | ||||||
| 				Position:   yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | 				Position:   yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||||
| @ -7035,7 +7032,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 491: | 	case 491: | ||||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | 		yyDollar = yyS[yypt-2 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4319 | 		// line internal/php7/php7.y:4316 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ExprRequireOnce{ | 			yyVAL.node = &ast.ExprRequireOnce{ | ||||||
| 				Position:       yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | 				Position:       yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||||
| @ -7045,7 +7042,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 492: | 	case 492: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4330 | 		// line internal/php7/php7.y:4327 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = &ast.ParserSeparatedList{ | 			yyVAL.node = &ast.ParserSeparatedList{ | ||||||
| 				Items: []ast.Vertex{yyDollar[1].node}, | 				Items: []ast.Vertex{yyDollar[1].node}, | ||||||
| @ -7053,7 +7050,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 493: | 	case 493: | ||||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | 		yyDollar = yyS[yypt-3 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4336 | 		// line internal/php7/php7.y:4333 | ||||||
| 		{ | 		{ | ||||||
| 			yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) | 			yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[1].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[2].token) | ||||||
| 			yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) | 			yyDollar[1].node.(*ast.ParserSeparatedList).Items = append(yyDollar[1].node.(*ast.ParserSeparatedList).Items, yyDollar[3].node) | ||||||
| @ -7062,7 +7059,7 @@ yydefault: | |||||||
| 		} | 		} | ||||||
| 	case 494: | 	case 494: | ||||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | 		yyDollar = yyS[yypt-1 : yypt+1] | ||||||
| 		// line internal/php7/php7.y:4346 | 		// line internal/php7/php7.y:4343 | ||||||
| 		{ | 		{ | ||||||
| 			yyVAL.node = yyDollar[1].node | 			yyVAL.node = yyDollar[1].node | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -3792,12 +3792,9 @@ simple_variable: | |||||||
|                 $$ = &ast.ExprVariable{ |                 $$ = &ast.ExprVariable{ | ||||||
|                     Position:             yylex.(*Parser).builder.NewTokensPosition($1, $4), |                     Position:             yylex.(*Parser).builder.NewTokensPosition($1, $4), | ||||||
|                     DollarTkn:            $1, |                     DollarTkn:            $1, | ||||||
|                     VarName: &ast.ParserBrackets{ |                     OpenCurlyBracketTkn:  $2, | ||||||
|                         Position: yylex.(*Parser).builder.NewTokensPosition($2, $4), |                     VarName:              $3, | ||||||
|                         OpenBracketTkn:  $2, |                     CloseCurlyBracketTkn: $4, | ||||||
|                         Child:           $3, |  | ||||||
|                         CloseBracketTkn: $4, |  | ||||||
|                     }, |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|     |   '$' simple_variable |     |   '$' simple_variable | ||||||
|  | |||||||
| @ -1763,7 +1763,9 @@ func (n *ExprUnaryPlus) GetPosition() *position.Position { | |||||||
| type ExprVariable struct { | type ExprVariable struct { | ||||||
| 	Position             *position.Position | 	Position             *position.Position | ||||||
| 	DollarTkn            *token.Token | 	DollarTkn            *token.Token | ||||||
|  | 	OpenCurlyBracketTkn  *token.Token | ||||||
| 	VarName              Vertex | 	VarName              Vertex | ||||||
|  | 	CloseCurlyBracketTkn *token.Token | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (n *ExprVariable) Accept(v NodeVisitor) { | func (n *ExprVariable) Accept(v NodeVisitor) { | ||||||
|  | |||||||
| @ -1537,7 +1537,9 @@ func (v *Dumper) ExprVariable(n *ast.ExprVariable) { | |||||||
| 
 | 
 | ||||||
| 	v.dumpPosition(n.Position) | 	v.dumpPosition(n.Position) | ||||||
| 	v.dumpToken("DollarTkn", n.DollarTkn) | 	v.dumpToken("DollarTkn", n.DollarTkn) | ||||||
|  | 	v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn) | ||||||
| 	v.dumpVertex("VarName", n.VarName) | 	v.dumpVertex("VarName", n.VarName) | ||||||
|  | 	v.dumpToken("CloseCurlyBracketTkn", n.CloseCurlyBracketTkn) | ||||||
| 
 | 
 | ||||||
| 	v.indent-- | 	v.indent-- | ||||||
| 	v.print(v.indent, "},\n") | 	v.print(v.indent, "},\n") | ||||||
|  | |||||||
| @ -1417,6 +1417,16 @@ func (f *formatter) ExprVariable(n *ast.ExprVariable) { | |||||||
| 		n.DollarTkn = f.newToken('$', []byte("$")) | 		n.DollarTkn = f.newToken('$', []byte("$")) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	n.OpenCurlyBracketTkn = nil | ||||||
|  | 	n.CloseCurlyBracketTkn = nil | ||||||
|  | 	switch n.VarName.(type) { | ||||||
|  | 	case *ast.Identifier: | ||||||
|  | 	case *ast.ExprVariable: | ||||||
|  | 	default: | ||||||
|  | 		n.OpenCurlyBracketTkn = f.newToken('{', []byte("{")) | ||||||
|  | 		n.CloseCurlyBracketTkn = f.newToken('}', []byte("}")) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	n.VarName.Accept(f) | 	n.VarName.Accept(f) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4877,6 +4877,29 @@ func TestFormatter_ExprVariable_Variable(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestFormatter_ExprVariable_Expression(t *testing.T) { | ||||||
|  | 	o := bytes.NewBufferString("") | ||||||
|  | 
 | ||||||
|  | 	n := &ast.ExprVariable{ | ||||||
|  | 		VarName: &ast.ScalarString{ | ||||||
|  | 			Value: []byte("'foo'"), | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) | ||||||
|  | 	n.Accept(f) | ||||||
|  | 
 | ||||||
|  | 	p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) | ||||||
|  | 	n.Accept(p) | ||||||
|  | 
 | ||||||
|  | 	expected := `${'foo'}` | ||||||
|  | 	actual := o.String() | ||||||
|  | 
 | ||||||
|  | 	if expected != actual { | ||||||
|  | 		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestFormatter_ExprYield(t *testing.T) { | func TestFormatter_ExprYield(t *testing.T) { | ||||||
| 	o := bytes.NewBufferString("") | 	o := bytes.NewBufferString("") | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -868,7 +868,9 @@ func (p *printer) ExprUnaryPlus(n *ast.ExprUnaryPlus) { | |||||||
| 
 | 
 | ||||||
| func (p *printer) ExprVariable(n *ast.ExprVariable) { | func (p *printer) ExprVariable(n *ast.ExprVariable) { | ||||||
| 	p.printToken(n.DollarTkn, nil) | 	p.printToken(n.DollarTkn, nil) | ||||||
|  | 	p.printToken(n.OpenCurlyBracketTkn, nil) | ||||||
| 	p.printNode(n.VarName) | 	p.printNode(n.VarName) | ||||||
|  | 	p.printToken(n.CloseCurlyBracketTkn, nil) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (p *printer) ExprYield(n *ast.ExprYield) { | func (p *printer) ExprYield(n *ast.ExprYield) { | ||||||
|  | |||||||
| @ -2609,13 +2609,19 @@ func TestPrinterPrintVariable(t *testing.T) { | |||||||
| 		DollarTkn: &token.Token{ | 		DollarTkn: &token.Token{ | ||||||
| 			Value: []byte("$"), | 			Value: []byte("$"), | ||||||
| 		}, | 		}, | ||||||
|  | 		OpenCurlyBracketTkn: &token.Token{ | ||||||
|  | 			Value: []byte("{"), | ||||||
|  | 		}, | ||||||
| 		VarName: &ast.ExprVariable{ | 		VarName: &ast.ExprVariable{ | ||||||
| 			VarName: &ast.Identifier{Value: []byte("$var")}, | 			VarName: &ast.Identifier{Value: []byte("$var")}, | ||||||
| 		}, | 		}, | ||||||
|  | 		CloseCurlyBracketTkn: &token.Token{ | ||||||
|  | 			Value: []byte("}"), | ||||||
|  | 		}, | ||||||
| 	} | 	} | ||||||
| 	n.Accept(p) | 	n.Accept(p) | ||||||
| 
 | 
 | ||||||
| 	expected := `$$var` | 	expected := `${$var}` | ||||||
| 	actual := o.String() | 	actual := o.String() | ||||||
| 
 | 
 | ||||||
| 	if expected != actual { | 	if expected != actual { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user