refactoring: update ast structure of "Closure" and "ClosureUse" nodes
This commit is contained in:
		
							parent
							
								
									03c7979ccd
								
							
						
					
					
						commit
						b85bae2ec1
					
				| @ -31770,7 +31770,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						EndPos:    36, | ||||
| 					}, | ||||
| 					FunctionTkn: &token.Token{ | ||||
| 						ID:    token.T_FUNCTION, | ||||
| 						ID: token.T_FUNCTION, | ||||
| 						Value: []byte("function"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -31780,7 +31780,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_OPEN_TAG, | ||||
| 								ID: token.T_OPEN_TAG, | ||||
| 								Value: []byte("<?"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -31790,7 +31790,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 								}, | ||||
| 							}, | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -31802,7 +31802,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(40), | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -31834,7 +31834,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										EndPos:    14, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$a"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -31869,7 +31869,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										EndPos:    18, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$b"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -31879,7 +31879,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										}, | ||||
| 										FreeFloating: []*token.Token{ | ||||
| 											{ | ||||
| 												ID:    token.T_WHITESPACE, | ||||
| 												ID: token.T_WHITESPACE, | ||||
| 												Value: []byte(" "), | ||||
| 												Position: &position.Position{ | ||||
| 													StartLine: 1, | ||||
| @ -31897,7 +31897,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 					}, | ||||
| 					SeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID:    token.ID(44), | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| @ -31908,7 +31908,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					CloseParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(41), | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -31917,59 +31917,59 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 							EndPos:    19, | ||||
| 						}, | ||||
| 					}, | ||||
| 					ClosureUse: &ast.ExprClosureUse{ | ||||
| 					UseTkn: &token.Token{ | ||||
| 						ID: token.T_USE, | ||||
| 						Value: []byte("use"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  20, | ||||
| 							EndPos:    33, | ||||
| 							EndPos:    23, | ||||
| 						}, | ||||
| 						UseTkn: &token.Token{ | ||||
| 							ID:    token.T_USE, | ||||
| 							Value: []byte("use"), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  20, | ||||
| 								EndPos:    23, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  19, | ||||
| 										EndPos:    20, | ||||
| 									}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  19, | ||||
| 									EndPos:    20, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						OpenParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(40), | ||||
| 							Value: []byte("("), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  24, | ||||
| 								EndPos:    25, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  23, | ||||
| 										EndPos:    24, | ||||
| 									}, | ||||
| 					}, | ||||
| 					UseOpenParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  24, | ||||
| 							EndPos:    25, | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  23, | ||||
| 									EndPos:    24, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						Uses: []ast.Vertex{ | ||||
| 							&ast.ExprVariable{ | ||||
| 					}, | ||||
| 					Use: []ast.Vertex{ | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  25, | ||||
| 								EndPos:    27, | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| @ -31984,7 +31984,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										EndPos:    27, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$c"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -31996,89 +31996,89 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 									Value: []byte("$c"), | ||||
| 								}, | ||||
| 							}, | ||||
| 							&ast.ExprReference{ | ||||
| 						}, | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  29, | ||||
| 								EndPos:    32, | ||||
| 							}, | ||||
| 							AmpersandTkn: &token.Token{ | ||||
| 								ID: token.ID(38), | ||||
| 								Value: []byte("&"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  29, | ||||
| 									EndPos:    32, | ||||
| 									EndPos:    30, | ||||
| 								}, | ||||
| 								AmpersandTkn: &token.Token{ | ||||
| 									ID:    token.ID(38), | ||||
| 									Value: []byte("&"), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  29, | ||||
| 										EndPos:    30, | ||||
| 									}, | ||||
| 									FreeFloating: []*token.Token{ | ||||
| 										{ | ||||
| 											ID:    token.T_WHITESPACE, | ||||
| 											Value: []byte(" "), | ||||
| 											Position: &position.Position{ | ||||
| 												StartLine: 1, | ||||
| 												EndLine:   1, | ||||
| 												StartPos:  28, | ||||
| 												EndPos:    29, | ||||
| 											}, | ||||
| 								FreeFloating: []*token.Token{ | ||||
| 									{ | ||||
| 										ID: token.T_WHITESPACE, | ||||
| 										Value: []byte(" "), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| 											EndLine:   1, | ||||
| 											StartPos:  28, | ||||
| 											EndPos:    29, | ||||
| 										}, | ||||
| 									}, | ||||
| 								}, | ||||
| 								Var: &ast.ExprVariable{ | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  30, | ||||
| 									EndPos:    32, | ||||
| 								}, | ||||
| 								VarName: &ast.Identifier{ | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  30, | ||||
| 										EndPos:    32, | ||||
| 									}, | ||||
| 									VarName: &ast.Identifier{ | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$d"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| 											EndLine:   1, | ||||
| 											StartPos:  30, | ||||
| 											EndPos:    32, | ||||
| 										}, | ||||
| 										IdentifierTkn: &token.Token{ | ||||
| 											ID:    token.T_VARIABLE, | ||||
| 											Value: []byte("$d"), | ||||
| 											Position: &position.Position{ | ||||
| 												StartLine: 1, | ||||
| 												EndLine:   1, | ||||
| 												StartPos:  30, | ||||
| 												EndPos:    32, | ||||
| 											}, | ||||
| 										}, | ||||
| 										Value: []byte("$d"), | ||||
| 									}, | ||||
| 									Value: []byte("$d"), | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						SeparatorTkns: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.ID(44), | ||||
| 								Value: []byte(","), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  27, | ||||
| 									EndPos:    28, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						CloseParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(41), | ||||
| 							Value: []byte(")"), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  32, | ||||
| 								EndPos:    33, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					UseSeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  27, | ||||
| 								EndPos:    28, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					UseCloseParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  32, | ||||
| 							EndPos:    33, | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(123), | ||||
| 						ID: token.ID(123), | ||||
| 						Value: []byte("{"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -32088,7 +32088,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -32101,7 +32101,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 					}, | ||||
| 					Stmts: []ast.Vertex{}, | ||||
| 					CloseCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(125), | ||||
| 						ID: token.ID(125), | ||||
| 						Value: []byte("}"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -32112,7 +32112,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 					}, | ||||
| 				}, | ||||
| 				SemiColonTkn: &token.Token{ | ||||
| 					ID:    token.ID(59), | ||||
| 					ID: token.ID(59), | ||||
| 					Value: []byte(";"), | ||||
| 					Position: &position.Position{ | ||||
| 						StartLine: 1, | ||||
| @ -32123,7 +32123,8 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		EndTkn: &token.Token{}, | ||||
| 		EndTkn: &token.Token{ | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	lexer := scanner.NewLexer([]byte(src), "5.6", nil) | ||||
| @ -32159,7 +32160,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						EndPos:    36, | ||||
| 					}, | ||||
| 					FunctionTkn: &token.Token{ | ||||
| 						ID:    token.T_FUNCTION, | ||||
| 						ID: token.T_FUNCTION, | ||||
| 						Value: []byte("function"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -32169,7 +32170,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_OPEN_TAG, | ||||
| 								ID: token.T_OPEN_TAG, | ||||
| 								Value: []byte("<?"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -32179,7 +32180,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 								}, | ||||
| 							}, | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -32191,7 +32192,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(40), | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -32223,7 +32224,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										EndPos:    14, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$a"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -32258,7 +32259,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										EndPos:    18, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$b"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -32268,7 +32269,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										}, | ||||
| 										FreeFloating: []*token.Token{ | ||||
| 											{ | ||||
| 												ID:    token.T_WHITESPACE, | ||||
| 												ID: token.T_WHITESPACE, | ||||
| 												Value: []byte(" "), | ||||
| 												Position: &position.Position{ | ||||
| 													StartLine: 1, | ||||
| @ -32286,7 +32287,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 					}, | ||||
| 					SeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID:    token.ID(44), | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| @ -32297,7 +32298,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					CloseParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(41), | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -32306,104 +32307,104 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 							EndPos:    19, | ||||
| 						}, | ||||
| 					}, | ||||
| 					ClosureUse: &ast.ExprClosureUse{ | ||||
| 					UseTkn: &token.Token{ | ||||
| 						ID: token.T_USE, | ||||
| 						Value: []byte("use"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  20, | ||||
| 							EndPos:    33, | ||||
| 							EndPos:    23, | ||||
| 						}, | ||||
| 						UseTkn: &token.Token{ | ||||
| 							ID:    token.T_USE, | ||||
| 							Value: []byte("use"), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  20, | ||||
| 								EndPos:    23, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  19, | ||||
| 										EndPos:    20, | ||||
| 									}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  19, | ||||
| 									EndPos:    20, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						OpenParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(40), | ||||
| 							Value: []byte("("), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  24, | ||||
| 								EndPos:    25, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  23, | ||||
| 										EndPos:    24, | ||||
| 									}, | ||||
| 					}, | ||||
| 					UseOpenParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  24, | ||||
| 							EndPos:    25, | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  23, | ||||
| 									EndPos:    24, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						Uses: []ast.Vertex{ | ||||
| 							&ast.ExprReference{ | ||||
| 					}, | ||||
| 					Use: []ast.Vertex{ | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  25, | ||||
| 								EndPos:    28, | ||||
| 							}, | ||||
| 							AmpersandTkn: &token.Token{ | ||||
| 								ID: token.ID(38), | ||||
| 								Value: []byte("&"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  25, | ||||
| 									EndPos:    26, | ||||
| 								}, | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  26, | ||||
| 									EndPos:    28, | ||||
| 								}, | ||||
| 								AmpersandTkn: &token.Token{ | ||||
| 									ID:    token.ID(38), | ||||
| 									Value: []byte("&"), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  25, | ||||
| 										EndPos:    26, | ||||
| 									}, | ||||
| 								}, | ||||
| 								Var: &ast.ExprVariable{ | ||||
| 								VarName: &ast.Identifier{ | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  26, | ||||
| 										EndPos:    28, | ||||
| 									}, | ||||
| 									VarName: &ast.Identifier{ | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$c"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| 											EndLine:   1, | ||||
| 											StartPos:  26, | ||||
| 											EndPos:    28, | ||||
| 										}, | ||||
| 										IdentifierTkn: &token.Token{ | ||||
| 											ID:    token.T_VARIABLE, | ||||
| 											Value: []byte("$c"), | ||||
| 											Position: &position.Position{ | ||||
| 												StartLine: 1, | ||||
| 												EndLine:   1, | ||||
| 												StartPos:  26, | ||||
| 												EndPos:    28, | ||||
| 											}, | ||||
| 										}, | ||||
| 										Value: []byte("$c"), | ||||
| 									}, | ||||
| 									Value: []byte("$c"), | ||||
| 								}, | ||||
| 							}, | ||||
| 							&ast.ExprVariable{ | ||||
| 						}, | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  30, | ||||
| 								EndPos:    32, | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| @ -32418,7 +32419,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										EndPos:    32, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$d"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -32428,7 +32429,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										}, | ||||
| 										FreeFloating: []*token.Token{ | ||||
| 											{ | ||||
| 												ID:    token.T_WHITESPACE, | ||||
| 												ID: token.T_WHITESPACE, | ||||
| 												Value: []byte(" "), | ||||
| 												Position: &position.Position{ | ||||
| 													StartLine: 1, | ||||
| @ -32443,31 +32444,31 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						SeparatorTkns: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.ID(44), | ||||
| 								Value: []byte(","), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  28, | ||||
| 									EndPos:    29, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						CloseParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(41), | ||||
| 							Value: []byte(")"), | ||||
| 					}, | ||||
| 					UseSeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  32, | ||||
| 								EndPos:    33, | ||||
| 								StartPos:  28, | ||||
| 								EndPos:    29, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					UseCloseParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  32, | ||||
| 							EndPos:    33, | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(123), | ||||
| 						ID: token.ID(123), | ||||
| 						Value: []byte("{"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -32477,7 +32478,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -32490,7 +32491,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 					}, | ||||
| 					Stmts: []ast.Vertex{}, | ||||
| 					CloseCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(125), | ||||
| 						ID: token.ID(125), | ||||
| 						Value: []byte("}"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -32501,7 +32502,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 					}, | ||||
| 				}, | ||||
| 				SemiColonTkn: &token.Token{ | ||||
| 					ID:    token.ID(59), | ||||
| 					ID: token.ID(59), | ||||
| 					Value: []byte(";"), | ||||
| 					Position: &position.Position{ | ||||
| 						StartLine: 1, | ||||
| @ -32512,7 +32513,8 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		EndTkn: &token.Token{}, | ||||
| 		EndTkn: &token.Token{ | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	lexer := scanner.NewLexer([]byte(src), "5.6", nil) | ||||
|  | ||||
							
								
								
									
										569
									
								
								internal/php5/php5.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										569
									
								
								internal/php5/php5.go
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -3367,36 +3367,38 @@ expr_without_variable: | ||||
|             } | ||||
|     |   function is_reference '(' parameter_list ')' lexical_vars '{' inner_statement_list '}' | ||||
|             { | ||||
|                 $$ = &ast.ExprClosure{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($1, $9), | ||||
|                     FunctionTkn:          $1, | ||||
|                     AmpersandTkn:         $2, | ||||
|                     OpenParenthesisTkn:   $3, | ||||
|                     Params:               $4.(*ast.ParserSeparatedList).Items, | ||||
|                     SeparatorTkns:        $4.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
|                     CloseParenthesisTkn:  $5, | ||||
|                     ClosureUse:           $6, | ||||
|                     OpenCurlyBracketTkn:  $7, | ||||
|                     Stmts:                $8, | ||||
|                     CloseCurlyBracketTkn: $9, | ||||
|                 } | ||||
|                 closure := $6.(*ast.ExprClosure) | ||||
| 
 | ||||
|                 closure.Position             = yylex.(*Parser).builder.NewTokensPosition($1, $9) | ||||
|                 closure.FunctionTkn          = $1 | ||||
|                 closure.AmpersandTkn         = $2 | ||||
|                 closure.OpenParenthesisTkn   = $3 | ||||
|                 closure.Params               = $4.(*ast.ParserSeparatedList).Items | ||||
|                 closure.SeparatorTkns        = $4.(*ast.ParserSeparatedList).SeparatorTkns | ||||
|                 closure.CloseParenthesisTkn  = $5 | ||||
|                 closure.OpenCurlyBracketTkn  = $7 | ||||
|                 closure.Stmts                = $8 | ||||
|                 closure.CloseCurlyBracketTkn = $9 | ||||
| 
 | ||||
|                 $$ = closure | ||||
|             } | ||||
|     |   T_STATIC function is_reference '(' parameter_list ')' lexical_vars '{' inner_statement_list '}' | ||||
|             { | ||||
|                 $$ = &ast.ExprClosure{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($1, $10), | ||||
|                     StaticTkn:            $1, | ||||
|                     FunctionTkn:          $2, | ||||
|                     AmpersandTkn:         $3, | ||||
|                     OpenParenthesisTkn:   $4, | ||||
|                     Params:               $5.(*ast.ParserSeparatedList).Items, | ||||
|                     SeparatorTkns:        $5.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
|                     CloseParenthesisTkn:  $6, | ||||
|                     ClosureUse:           $7, | ||||
|                     OpenCurlyBracketTkn:  $8, | ||||
|                     Stmts:                $9, | ||||
|                     CloseCurlyBracketTkn: $10, | ||||
|                 } | ||||
|                 closure := $7.(*ast.ExprClosure) | ||||
|                  | ||||
|                 closure.Position             = yylex.(*Parser).builder.NewTokensPosition($1, $10) | ||||
|                 closure.StaticTkn            = $1 | ||||
|                 closure.FunctionTkn          = $2 | ||||
|                 closure.AmpersandTkn         = $3 | ||||
|                 closure.OpenParenthesisTkn   = $4 | ||||
|                 closure.Params               = $5.(*ast.ParserSeparatedList).Items | ||||
|                 closure.SeparatorTkns        = $5.(*ast.ParserSeparatedList).SeparatorTkns | ||||
|                 closure.CloseParenthesisTkn  = $6 | ||||
|                 closure.OpenCurlyBracketTkn  = $8 | ||||
|                 closure.Stmts                = $9 | ||||
|                 closure.CloseCurlyBracketTkn = $10 | ||||
| 
 | ||||
|                 $$ = closure | ||||
|             } | ||||
| ; | ||||
| 
 | ||||
| @ -3520,17 +3522,16 @@ function: | ||||
| lexical_vars: | ||||
|         /* empty */ | ||||
|             { | ||||
|                 $$ = nil | ||||
|                 $$ = &ast.ExprClosure{} | ||||
|             } | ||||
|     |   T_USE '(' lexical_var_list ')' | ||||
|             { | ||||
|                 $$ = &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($1, $4), | ||||
|                     UseTkn:              $1, | ||||
|                     OpenParenthesisTkn:  $2, | ||||
|                     Uses:                $3.(*ast.ParserSeparatedList).Items, | ||||
|                     SeparatorTkns:       $3.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
|                     CloseParenthesisTkn: $4, | ||||
|                 $$ = &ast.ExprClosure{ | ||||
|                     UseTkn:                 $1, | ||||
|                     UseOpenParenthesisTkn:  $2, | ||||
|                     Use:                    $3.(*ast.ParserSeparatedList).Items, | ||||
|                     UseSeparatorTkns:       $3.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
|                     UseCloseParenthesisTkn: $4, | ||||
|                 } | ||||
|             } | ||||
| ; | ||||
| @ -3538,12 +3539,15 @@ lexical_vars: | ||||
| lexical_var_list: | ||||
|         lexical_var_list ',' T_VARIABLE | ||||
|             { | ||||
|                 variable := &ast.ExprVariable{ | ||||
|                 variable := &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokenPosition($3), | ||||
|                     VarName: &ast.Identifier{ | ||||
|                     Var: &ast.ExprVariable{ | ||||
|                         Position: yylex.(*Parser).builder.NewTokenPosition($3), | ||||
|                         IdentifierTkn: $3, | ||||
|                         Value:         $3.Value, | ||||
|                         VarName: &ast.Identifier{ | ||||
|                             Position: yylex.(*Parser).builder.NewTokenPosition($3), | ||||
|                             IdentifierTkn: $3, | ||||
|                             Value:         $3.Value, | ||||
|                         }, | ||||
|                     }, | ||||
|                 } | ||||
| 
 | ||||
| @ -3554,7 +3558,7 @@ lexical_var_list: | ||||
|             } | ||||
|     |   lexical_var_list ',' '&' T_VARIABLE | ||||
|             { | ||||
|                 reference := &ast.ExprReference{ | ||||
|                 variable := &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($3, $4), | ||||
|                     AmpersandTkn: $3, | ||||
|                     Var: &ast.ExprVariable{ | ||||
| @ -3568,43 +3572,46 @@ lexical_var_list: | ||||
|                 } | ||||
| 
 | ||||
|                 $1.(*ast.ParserSeparatedList).SeparatorTkns = append($1.(*ast.ParserSeparatedList).SeparatorTkns, $2) | ||||
|                 $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, reference) | ||||
|                 $1.(*ast.ParserSeparatedList).Items = append($1.(*ast.ParserSeparatedList).Items, variable) | ||||
| 
 | ||||
|                 $$ = $1 | ||||
|             } | ||||
|     |   T_VARIABLE | ||||
|             { | ||||
|                 $$ = &ast.ParserSeparatedList{ | ||||
|                     Items: []ast.Vertex{ | ||||
|                         &ast.ExprVariable{ | ||||
|                 variable := &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokenPosition($1), | ||||
|                     Var: &ast.ExprVariable{ | ||||
|                         Position: yylex.(*Parser).builder.NewTokenPosition($1), | ||||
|                         VarName: &ast.Identifier{ | ||||
|                             Position: yylex.(*Parser).builder.NewTokenPosition($1), | ||||
|                             VarName: &ast.Identifier{ | ||||
|                                 Position: yylex.(*Parser).builder.NewTokenPosition($1), | ||||
|                                 IdentifierTkn: $1, | ||||
|                                 Value:         $1.Value, | ||||
|                             }, | ||||
|                             IdentifierTkn: $1, | ||||
|                             Value:         $1.Value, | ||||
|                         }, | ||||
|                     }, | ||||
|                 } | ||||
| 
 | ||||
|                 $$ = &ast.ParserSeparatedList{ | ||||
|                     Items: []ast.Vertex{ variable }, | ||||
|                 } | ||||
|             } | ||||
|     |   '&' T_VARIABLE | ||||
|             { | ||||
|                 $$ = &ast.ParserSeparatedList{ | ||||
|                     Items: []ast.Vertex{ | ||||
|                         &ast.ExprReference{ | ||||
|                             Position: yylex.(*Parser).builder.NewTokensPosition($1, $2), | ||||
|                             AmpersandTkn: $1, | ||||
|                             Var: &ast.ExprVariable{ | ||||
|                                 Position: yylex.(*Parser).builder.NewTokenPosition($2), | ||||
|                                 VarName: &ast.Identifier{ | ||||
|                                     Position: yylex.(*Parser).builder.NewTokenPosition($2), | ||||
|                                     IdentifierTkn: $2, | ||||
|                                     Value:         $2.Value, | ||||
|                                 }, | ||||
|                             }, | ||||
|                 variable := &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($1, $2), | ||||
|                     AmpersandTkn: $1, | ||||
|                     Var: &ast.ExprVariable{ | ||||
|                         Position: yylex.(*Parser).builder.NewTokenPosition($2), | ||||
|                         VarName: &ast.Identifier{ | ||||
|                             Position: yylex.(*Parser).builder.NewTokenPosition($2), | ||||
|                             IdentifierTkn: $2, | ||||
|                             Value:         $2.Value, | ||||
|                         }, | ||||
|                     }, | ||||
|                 } | ||||
| 
 | ||||
|                 $$ = &ast.ParserSeparatedList{ | ||||
|                     Items: []ast.Vertex{ variable }, | ||||
|                 } | ||||
|             } | ||||
| ; | ||||
| 
 | ||||
|  | ||||
| @ -36268,7 +36268,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						EndPos:    36, | ||||
| 					}, | ||||
| 					FunctionTkn: &token.Token{ | ||||
| 						ID:    token.T_FUNCTION, | ||||
| 						ID: token.T_FUNCTION, | ||||
| 						Value: []byte("function"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36278,7 +36278,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_OPEN_TAG, | ||||
| 								ID: token.T_OPEN_TAG, | ||||
| 								Value: []byte("<?"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -36288,7 +36288,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 								}, | ||||
| 							}, | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -36300,7 +36300,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(40), | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36332,7 +36332,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										EndPos:    14, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$a"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -36367,7 +36367,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										EndPos:    18, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$b"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -36377,7 +36377,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										}, | ||||
| 										FreeFloating: []*token.Token{ | ||||
| 											{ | ||||
| 												ID:    token.T_WHITESPACE, | ||||
| 												ID: token.T_WHITESPACE, | ||||
| 												Value: []byte(" "), | ||||
| 												Position: &position.Position{ | ||||
| 													StartLine: 1, | ||||
| @ -36395,7 +36395,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 					}, | ||||
| 					SeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID:    token.ID(44), | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| @ -36406,7 +36406,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					CloseParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(41), | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36415,59 +36415,59 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 							EndPos:    19, | ||||
| 						}, | ||||
| 					}, | ||||
| 					ClosureUse: &ast.ExprClosureUse{ | ||||
| 					UseTkn: &token.Token{ | ||||
| 						ID: token.T_USE, | ||||
| 						Value: []byte("use"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  20, | ||||
| 							EndPos:    33, | ||||
| 							EndPos:    23, | ||||
| 						}, | ||||
| 						UseTkn: &token.Token{ | ||||
| 							ID:    token.T_USE, | ||||
| 							Value: []byte("use"), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  20, | ||||
| 								EndPos:    23, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  19, | ||||
| 										EndPos:    20, | ||||
| 									}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  19, | ||||
| 									EndPos:    20, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						OpenParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(40), | ||||
| 							Value: []byte("("), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  24, | ||||
| 								EndPos:    25, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  23, | ||||
| 										EndPos:    24, | ||||
| 									}, | ||||
| 					}, | ||||
| 					UseOpenParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  24, | ||||
| 							EndPos:    25, | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  23, | ||||
| 									EndPos:    24, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						Uses: []ast.Vertex{ | ||||
| 							&ast.ExprVariable{ | ||||
| 					}, | ||||
| 					Use: []ast.Vertex{ | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  25, | ||||
| 								EndPos:    27, | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| @ -36482,7 +36482,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 										EndPos:    27, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$c"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -36494,89 +36494,89 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 									Value: []byte("$c"), | ||||
| 								}, | ||||
| 							}, | ||||
| 							&ast.ExprReference{ | ||||
| 						}, | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  29, | ||||
| 								EndPos:    32, | ||||
| 							}, | ||||
| 							AmpersandTkn: &token.Token{ | ||||
| 								ID: token.ID(38), | ||||
| 								Value: []byte("&"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  29, | ||||
| 									EndPos:    32, | ||||
| 									EndPos:    30, | ||||
| 								}, | ||||
| 								AmpersandTkn: &token.Token{ | ||||
| 									ID:    token.ID(38), | ||||
| 									Value: []byte("&"), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  29, | ||||
| 										EndPos:    30, | ||||
| 									}, | ||||
| 									FreeFloating: []*token.Token{ | ||||
| 										{ | ||||
| 											ID:    token.T_WHITESPACE, | ||||
| 											Value: []byte(" "), | ||||
| 											Position: &position.Position{ | ||||
| 												StartLine: 1, | ||||
| 												EndLine:   1, | ||||
| 												StartPos:  28, | ||||
| 												EndPos:    29, | ||||
| 											}, | ||||
| 								FreeFloating: []*token.Token{ | ||||
| 									{ | ||||
| 										ID: token.T_WHITESPACE, | ||||
| 										Value: []byte(" "), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| 											EndLine:   1, | ||||
| 											StartPos:  28, | ||||
| 											EndPos:    29, | ||||
| 										}, | ||||
| 									}, | ||||
| 								}, | ||||
| 								Var: &ast.ExprVariable{ | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  30, | ||||
| 									EndPos:    32, | ||||
| 								}, | ||||
| 								VarName: &ast.Identifier{ | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  30, | ||||
| 										EndPos:    32, | ||||
| 									}, | ||||
| 									VarName: &ast.Identifier{ | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$d"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| 											EndLine:   1, | ||||
| 											StartPos:  30, | ||||
| 											EndPos:    32, | ||||
| 										}, | ||||
| 										IdentifierTkn: &token.Token{ | ||||
| 											ID:    token.T_VARIABLE, | ||||
| 											Value: []byte("$d"), | ||||
| 											Position: &position.Position{ | ||||
| 												StartLine: 1, | ||||
| 												EndLine:   1, | ||||
| 												StartPos:  30, | ||||
| 												EndPos:    32, | ||||
| 											}, | ||||
| 										}, | ||||
| 										Value: []byte("$d"), | ||||
| 									}, | ||||
| 									Value: []byte("$d"), | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						SeparatorTkns: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.ID(44), | ||||
| 								Value: []byte(","), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  27, | ||||
| 									EndPos:    28, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						CloseParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(41), | ||||
| 							Value: []byte(")"), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  32, | ||||
| 								EndPos:    33, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					UseSeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  27, | ||||
| 								EndPos:    28, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					UseCloseParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  32, | ||||
| 							EndPos:    33, | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(123), | ||||
| 						ID: token.ID(123), | ||||
| 						Value: []byte("{"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36586,7 +36586,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -36599,7 +36599,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 					}, | ||||
| 					Stmts: []ast.Vertex{}, | ||||
| 					CloseCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(125), | ||||
| 						ID: token.ID(125), | ||||
| 						Value: []byte("}"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36610,7 +36610,7 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 					}, | ||||
| 				}, | ||||
| 				SemiColonTkn: &token.Token{ | ||||
| 					ID:    token.ID(59), | ||||
| 					ID: token.ID(59), | ||||
| 					Value: []byte(";"), | ||||
| 					Position: &position.Position{ | ||||
| 						StartLine: 1, | ||||
| @ -36621,7 +36621,8 @@ func TestExprClosure_Use(t *testing.T) { | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		EndTkn: &token.Token{}, | ||||
| 		EndTkn: &token.Token{ | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	lexer := scanner.NewLexer([]byte(src), "7.4", nil) | ||||
| @ -36657,7 +36658,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						EndPos:    36, | ||||
| 					}, | ||||
| 					FunctionTkn: &token.Token{ | ||||
| 						ID:    token.T_FUNCTION, | ||||
| 						ID: token.T_FUNCTION, | ||||
| 						Value: []byte("function"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36667,7 +36668,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_OPEN_TAG, | ||||
| 								ID: token.T_OPEN_TAG, | ||||
| 								Value: []byte("<?"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -36677,7 +36678,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 								}, | ||||
| 							}, | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -36689,7 +36690,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(40), | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36721,7 +36722,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										EndPos:    14, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$a"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -36756,7 +36757,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										EndPos:    18, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$b"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -36766,7 +36767,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										}, | ||||
| 										FreeFloating: []*token.Token{ | ||||
| 											{ | ||||
| 												ID:    token.T_WHITESPACE, | ||||
| 												ID: token.T_WHITESPACE, | ||||
| 												Value: []byte(" "), | ||||
| 												Position: &position.Position{ | ||||
| 													StartLine: 1, | ||||
| @ -36784,7 +36785,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 					}, | ||||
| 					SeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID:    token.ID(44), | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| @ -36795,7 +36796,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 					}, | ||||
| 					CloseParenthesisTkn: &token.Token{ | ||||
| 						ID:    token.ID(41), | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36804,104 +36805,104 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 							EndPos:    19, | ||||
| 						}, | ||||
| 					}, | ||||
| 					ClosureUse: &ast.ExprClosureUse{ | ||||
| 					UseTkn: &token.Token{ | ||||
| 						ID: token.T_USE, | ||||
| 						Value: []byte("use"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  20, | ||||
| 							EndPos:    33, | ||||
| 							EndPos:    23, | ||||
| 						}, | ||||
| 						UseTkn: &token.Token{ | ||||
| 							ID:    token.T_USE, | ||||
| 							Value: []byte("use"), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  20, | ||||
| 								EndPos:    23, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  19, | ||||
| 										EndPos:    20, | ||||
| 									}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  19, | ||||
| 									EndPos:    20, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						OpenParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(40), | ||||
| 							Value: []byte("("), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  24, | ||||
| 								EndPos:    25, | ||||
| 							}, | ||||
| 							FreeFloating: []*token.Token{ | ||||
| 								{ | ||||
| 									ID:    token.T_WHITESPACE, | ||||
| 									Value: []byte(" "), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  23, | ||||
| 										EndPos:    24, | ||||
| 									}, | ||||
| 					}, | ||||
| 					UseOpenParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(40), | ||||
| 						Value: []byte("("), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  24, | ||||
| 							EndPos:    25, | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  23, | ||||
| 									EndPos:    24, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						Uses: []ast.Vertex{ | ||||
| 							&ast.ExprReference{ | ||||
| 					}, | ||||
| 					Use: []ast.Vertex{ | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  25, | ||||
| 								EndPos:    28, | ||||
| 							}, | ||||
| 							AmpersandTkn: &token.Token{ | ||||
| 								ID: token.ID(38), | ||||
| 								Value: []byte("&"), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  25, | ||||
| 									EndPos:    26, | ||||
| 								}, | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  26, | ||||
| 									EndPos:    28, | ||||
| 								}, | ||||
| 								AmpersandTkn: &token.Token{ | ||||
| 									ID:    token.ID(38), | ||||
| 									Value: []byte("&"), | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  25, | ||||
| 										EndPos:    26, | ||||
| 									}, | ||||
| 								}, | ||||
| 								Var: &ast.ExprVariable{ | ||||
| 								VarName: &ast.Identifier{ | ||||
| 									Position: &position.Position{ | ||||
| 										StartLine: 1, | ||||
| 										EndLine:   1, | ||||
| 										StartPos:  26, | ||||
| 										EndPos:    28, | ||||
| 									}, | ||||
| 									VarName: &ast.Identifier{ | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$c"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| 											EndLine:   1, | ||||
| 											StartPos:  26, | ||||
| 											EndPos:    28, | ||||
| 										}, | ||||
| 										IdentifierTkn: &token.Token{ | ||||
| 											ID:    token.T_VARIABLE, | ||||
| 											Value: []byte("$c"), | ||||
| 											Position: &position.Position{ | ||||
| 												StartLine: 1, | ||||
| 												EndLine:   1, | ||||
| 												StartPos:  26, | ||||
| 												EndPos:    28, | ||||
| 											}, | ||||
| 										}, | ||||
| 										Value: []byte("$c"), | ||||
| 									}, | ||||
| 									Value: []byte("$c"), | ||||
| 								}, | ||||
| 							}, | ||||
| 							&ast.ExprVariable{ | ||||
| 						}, | ||||
| 						&ast.ExprClosureUse{ | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  30, | ||||
| 								EndPos:    32, | ||||
| 							}, | ||||
| 							Var: &ast.ExprVariable{ | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| @ -36916,7 +36917,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										EndPos:    32, | ||||
| 									}, | ||||
| 									IdentifierTkn: &token.Token{ | ||||
| 										ID:    token.T_VARIABLE, | ||||
| 										ID: token.T_VARIABLE, | ||||
| 										Value: []byte("$d"), | ||||
| 										Position: &position.Position{ | ||||
| 											StartLine: 1, | ||||
| @ -36926,7 +36927,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 										}, | ||||
| 										FreeFloating: []*token.Token{ | ||||
| 											{ | ||||
| 												ID:    token.T_WHITESPACE, | ||||
| 												ID: token.T_WHITESPACE, | ||||
| 												Value: []byte(" "), | ||||
| 												Position: &position.Position{ | ||||
| 													StartLine: 1, | ||||
| @ -36941,31 +36942,31 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						SeparatorTkns: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.ID(44), | ||||
| 								Value: []byte(","), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| 									EndLine:   1, | ||||
| 									StartPos:  28, | ||||
| 									EndPos:    29, | ||||
| 								}, | ||||
| 							}, | ||||
| 						}, | ||||
| 						CloseParenthesisTkn: &token.Token{ | ||||
| 							ID:    token.ID(41), | ||||
| 							Value: []byte(")"), | ||||
| 					}, | ||||
| 					UseSeparatorTkns: []*token.Token{ | ||||
| 						{ | ||||
| 							ID: token.ID(44), | ||||
| 							Value: []byte(","), | ||||
| 							Position: &position.Position{ | ||||
| 								StartLine: 1, | ||||
| 								EndLine:   1, | ||||
| 								StartPos:  32, | ||||
| 								EndPos:    33, | ||||
| 								StartPos:  28, | ||||
| 								EndPos:    29, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					UseCloseParenthesisTkn: &token.Token{ | ||||
| 						ID: token.ID(41), | ||||
| 						Value: []byte(")"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| 							EndLine:   1, | ||||
| 							StartPos:  32, | ||||
| 							EndPos:    33, | ||||
| 						}, | ||||
| 					}, | ||||
| 					OpenCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(123), | ||||
| 						ID: token.ID(123), | ||||
| 						Value: []byte("{"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36975,7 +36976,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 						}, | ||||
| 						FreeFloating: []*token.Token{ | ||||
| 							{ | ||||
| 								ID:    token.T_WHITESPACE, | ||||
| 								ID: token.T_WHITESPACE, | ||||
| 								Value: []byte(" "), | ||||
| 								Position: &position.Position{ | ||||
| 									StartLine: 1, | ||||
| @ -36988,7 +36989,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 					}, | ||||
| 					Stmts: []ast.Vertex{}, | ||||
| 					CloseCurlyBracketTkn: &token.Token{ | ||||
| 						ID:    token.ID(125), | ||||
| 						ID: token.ID(125), | ||||
| 						Value: []byte("}"), | ||||
| 						Position: &position.Position{ | ||||
| 							StartLine: 1, | ||||
| @ -36999,7 +37000,7 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 					}, | ||||
| 				}, | ||||
| 				SemiColonTkn: &token.Token{ | ||||
| 					ID:    token.ID(59), | ||||
| 					ID: token.ID(59), | ||||
| 					Value: []byte(";"), | ||||
| 					Position: &position.Position{ | ||||
| 						StartLine: 1, | ||||
| @ -37010,7 +37011,8 @@ func TestExprClosure_Use2(t *testing.T) { | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		EndTkn: &token.Token{}, | ||||
| 		EndTkn: &token.Token{ | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	lexer := scanner.NewLexer([]byte(src), "7.4", nil) | ||||
|  | ||||
							
								
								
									
										297
									
								
								internal/php7/php7.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										297
									
								
								internal/php7/php7.go
									
									
									
										generated
									
									
									
								
							| @ -339,7 +339,7 @@ const yyEofCode = 1 | ||||
| const yyErrCode = 2 | ||||
| const yyInitialStackSize = 16 | ||||
| 
 | ||||
| // line internal/php7/php7.y:4342 | ||||
| // line internal/php7/php7.y:4345 | ||||
| 
 | ||||
| // line yacctab:1 | ||||
| var yyExca = [...]int{ | ||||
| @ -5767,25 +5767,26 @@ yydefault: | ||||
| 		yyDollar = yyS[yypt-11 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3180 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprClosure{ | ||||
| 				Position:             yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[11].token), | ||||
| 				FunctionTkn:          yyDollar[1].token, | ||||
| 				AmpersandTkn:         yyDollar[2].token, | ||||
| 				OpenParenthesisTkn:   yyDollar[4].token, | ||||
| 				Params:               yyDollar[5].node.(*ast.ParserSeparatedList).Items, | ||||
| 				SeparatorTkns:        yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
| 				CloseParenthesisTkn:  yyDollar[6].token, | ||||
| 				ClosureUse:           yyDollar[7].node, | ||||
| 				ColonTkn:             yyDollar[8].node.(*ast.ReturnType).ColonTkn, | ||||
| 				ReturnType:           yyDollar[8].node.(*ast.ReturnType).Type, | ||||
| 				OpenCurlyBracketTkn:  yyDollar[9].token, | ||||
| 				Stmts:                yyDollar[10].list, | ||||
| 				CloseCurlyBracketTkn: yyDollar[11].token, | ||||
| 			} | ||||
| 			closure := yyDollar[7].node.(*ast.ExprClosure) | ||||
| 
 | ||||
| 			closure.Position = yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[11].token) | ||||
| 			closure.FunctionTkn = yyDollar[1].token | ||||
| 			closure.AmpersandTkn = yyDollar[2].token | ||||
| 			closure.OpenParenthesisTkn = yyDollar[4].token | ||||
| 			closure.Params = yyDollar[5].node.(*ast.ParserSeparatedList).Items | ||||
| 			closure.SeparatorTkns = yyDollar[5].node.(*ast.ParserSeparatedList).SeparatorTkns | ||||
| 			closure.CloseParenthesisTkn = yyDollar[6].token | ||||
| 			closure.ColonTkn = yyDollar[8].node.(*ast.ReturnType).ColonTkn | ||||
| 			closure.ReturnType = yyDollar[8].node.(*ast.ReturnType).Type | ||||
| 			closure.OpenCurlyBracketTkn = yyDollar[9].token | ||||
| 			closure.Stmts = yyDollar[10].list | ||||
| 			closure.CloseCurlyBracketTkn = yyDollar[11].token | ||||
| 
 | ||||
| 			yyVAL.node = closure | ||||
| 		} | ||||
| 	case 374: | ||||
| 		yyDollar = yyS[yypt-9 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3198 | ||||
| 		// line internal/php7/php7.y:3199 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrowFunction{ | ||||
| 				Position:            yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[9].node), | ||||
| @ -5803,33 +5804,32 @@ yydefault: | ||||
| 		} | ||||
| 	case 376: | ||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3221 | ||||
| 		// line internal/php7/php7.y:3222 | ||||
| 		{ | ||||
| 			yyVAL.token = nil | ||||
| 		} | ||||
| 	case 377: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3225 | ||||
| 		// line internal/php7/php7.y:3226 | ||||
| 		{ | ||||
| 			yyVAL.token = yyDollar[1].token | ||||
| 		} | ||||
| 	case 378: | ||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3232 | ||||
| 		// line internal/php7/php7.y:3233 | ||||
| 		{ | ||||
| 			yyVAL.node = nil | ||||
| 			yyVAL.node = &ast.ExprClosure{} | ||||
| 		} | ||||
| 	case 379: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3236 | ||||
| 		// line internal/php7/php7.y:3237 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprClosureUse{ | ||||
| 				Position:            yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||
| 				UseTkn:              yyDollar[1].token, | ||||
| 				OpenParenthesisTkn:  yyDollar[2].token, | ||||
| 				Uses:                yyDollar[3].node.(*ast.ParserSeparatedList).Items, | ||||
| 				SeparatorTkns:       yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
| 				CloseParenthesisTkn: yyDollar[4].token, | ||||
| 			yyVAL.node = &ast.ExprClosure{ | ||||
| 				UseTkn:                 yyDollar[1].token, | ||||
| 				UseOpenParenthesisTkn:  yyDollar[2].token, | ||||
| 				Use:                    yyDollar[3].node.(*ast.ParserSeparatedList).Items, | ||||
| 				UseSeparatorTkns:       yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
| 				UseCloseParenthesisTkn: yyDollar[4].token, | ||||
| 			} | ||||
| 		} | ||||
| 	case 380: | ||||
| @ -5853,20 +5853,23 @@ yydefault: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3266 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprVariable{ | ||||
| 			yyVAL.node = &ast.ExprClosureUse{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| 				VarName: &ast.Identifier{ | ||||
| 					Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| 					IdentifierTkn: yyDollar[1].token, | ||||
| 					Value:         yyDollar[1].token.Value, | ||||
| 				Var: &ast.ExprVariable{ | ||||
| 					Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| 					VarName: &ast.Identifier{ | ||||
| 						Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| 						IdentifierTkn: yyDollar[1].token, | ||||
| 						Value:         yyDollar[1].token.Value, | ||||
| 					}, | ||||
| 				}, | ||||
| 			} | ||||
| 		} | ||||
| 	case 383: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3277 | ||||
| 		// line internal/php7/php7.y:3280 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprReference{ | ||||
| 			yyVAL.node = &ast.ExprClosureUse{ | ||||
| 				Position:     yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), | ||||
| 				AmpersandTkn: yyDollar[1].token, | ||||
| 				Var: &ast.ExprVariable{ | ||||
| @ -5881,7 +5884,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 384: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3295 | ||||
| 		// line internal/php7/php7.y:3298 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprFunctionCall{ | ||||
| 				Position:            yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node), | ||||
| @ -5894,7 +5897,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 385: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3306 | ||||
| 		// line internal/php7/php7.y:3309 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprStaticCall{ | ||||
| 				Position:            yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), | ||||
| @ -5909,7 +5912,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 386: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3319 | ||||
| 		// line internal/php7/php7.y:3322 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprStaticCall{ | ||||
| 				Position:            yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), | ||||
| @ -5924,7 +5927,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 387: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3332 | ||||
| 		// line internal/php7/php7.y:3335 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprFunctionCall{ | ||||
| 				Position:            yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node), | ||||
| @ -5937,7 +5940,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 388: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3346 | ||||
| 		// line internal/php7/php7.y:3349 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.Identifier{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -5947,31 +5950,31 @@ yydefault: | ||||
| 		} | ||||
| 	case 389: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3354 | ||||
| 		// line internal/php7/php7.y:3357 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 390: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3361 | ||||
| 		// line internal/php7/php7.y:3364 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 391: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3365 | ||||
| 		// line internal/php7/php7.y:3368 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 392: | ||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3372 | ||||
| 		// line internal/php7/php7.y:3375 | ||||
| 		{ | ||||
| 			yyVAL.node = nil | ||||
| 		} | ||||
| 	case 393: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3376 | ||||
| 		// line internal/php7/php7.y:3379 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -5982,13 +5985,13 @@ yydefault: | ||||
| 		} | ||||
| 	case 394: | ||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3388 | ||||
| 		// line internal/php7/php7.y:3391 | ||||
| 		{ | ||||
| 			yyVAL.list = []ast.Vertex{} | ||||
| 		} | ||||
| 	case 395: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3392 | ||||
| 		// line internal/php7/php7.y:3395 | ||||
| 		{ | ||||
| 			yyVAL.list = []ast.Vertex{ | ||||
| 				&ast.ScalarEncapsedStringPart{ | ||||
| @ -6000,25 +6003,25 @@ yydefault: | ||||
| 		} | ||||
| 	case 396: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3402 | ||||
| 		// line internal/php7/php7.y:3405 | ||||
| 		{ | ||||
| 			yyVAL.list = yyDollar[1].list | ||||
| 		} | ||||
| 	case 397: | ||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3409 | ||||
| 		// line internal/php7/php7.y:3412 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ArgumentList{} | ||||
| 		} | ||||
| 	case 398: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3413 | ||||
| 		// line internal/php7/php7.y:3416 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 399: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3420 | ||||
| 		// line internal/php7/php7.y:3423 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArray{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||
| @ -6031,7 +6034,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 400: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3431 | ||||
| 		// line internal/php7/php7.y:3434 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArray{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6043,7 +6046,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 401: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3441 | ||||
| 		// line internal/php7/php7.y:3444 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarString{ | ||||
| 				Position:  yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6053,7 +6056,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 402: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3452 | ||||
| 		// line internal/php7/php7.y:3455 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarLnumber{ | ||||
| 				Position:  yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6063,7 +6066,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 403: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3460 | ||||
| 		// line internal/php7/php7.y:3463 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarDnumber{ | ||||
| 				Position:  yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6073,7 +6076,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 404: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3468 | ||||
| 		// line internal/php7/php7.y:3471 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6083,7 +6086,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 405: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3476 | ||||
| 		// line internal/php7/php7.y:3479 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6093,7 +6096,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 406: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3484 | ||||
| 		// line internal/php7/php7.y:3487 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6103,7 +6106,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 407: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3492 | ||||
| 		// line internal/php7/php7.y:3495 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6113,7 +6116,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 408: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3500 | ||||
| 		// line internal/php7/php7.y:3503 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6123,7 +6126,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 409: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3508 | ||||
| 		// line internal/php7/php7.y:3511 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6133,7 +6136,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 410: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3516 | ||||
| 		// line internal/php7/php7.y:3519 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6143,7 +6146,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 411: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3524 | ||||
| 		// line internal/php7/php7.y:3527 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarMagicConstant{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6153,7 +6156,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 412: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3532 | ||||
| 		// line internal/php7/php7.y:3535 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarHeredoc{ | ||||
| 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6170,7 +6173,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 413: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3547 | ||||
| 		// line internal/php7/php7.y:3550 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarHeredoc{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[2].token), | ||||
| @ -6180,7 +6183,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 414: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3555 | ||||
| 		// line internal/php7/php7.y:3558 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarEncapsed{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6191,7 +6194,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 415: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3564 | ||||
| 		// line internal/php7/php7.y:3567 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarHeredoc{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6202,19 +6205,19 @@ yydefault: | ||||
| 		} | ||||
| 	case 416: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3573 | ||||
| 		// line internal/php7/php7.y:3576 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 417: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3577 | ||||
| 		// line internal/php7/php7.y:3580 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 418: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3584 | ||||
| 		// line internal/php7/php7.y:3587 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprConstFetch{ | ||||
| 				Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), | ||||
| @ -6223,7 +6226,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 419: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3591 | ||||
| 		// line internal/php7/php7.y:3594 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprClassConstFetch{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), | ||||
| @ -6238,7 +6241,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 420: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3604 | ||||
| 		// line internal/php7/php7.y:3607 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprClassConstFetch{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token), | ||||
| @ -6253,43 +6256,43 @@ yydefault: | ||||
| 		} | ||||
| 	case 421: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3620 | ||||
| 		// line internal/php7/php7.y:3623 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 422: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3624 | ||||
| 		// line internal/php7/php7.y:3627 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 423: | ||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3631 | ||||
| 		// line internal/php7/php7.y:3634 | ||||
| 		{ | ||||
| 			yyVAL.node = nil | ||||
| 		} | ||||
| 	case 424: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3635 | ||||
| 		// line internal/php7/php7.y:3638 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 425: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3642 | ||||
| 		// line internal/php7/php7.y:3645 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 426: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3649 | ||||
| 		// line internal/php7/php7.y:3652 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 427: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3653 | ||||
| 		// line internal/php7/php7.y:3656 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6300,19 +6303,19 @@ yydefault: | ||||
| 		} | ||||
| 	case 428: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3662 | ||||
| 		// line internal/php7/php7.y:3665 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 429: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3669 | ||||
| 		// line internal/php7/php7.y:3672 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 430: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3673 | ||||
| 		// line internal/php7/php7.y:3676 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6323,19 +6326,19 @@ yydefault: | ||||
| 		} | ||||
| 	case 431: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3682 | ||||
| 		// line internal/php7/php7.y:3685 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 432: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3689 | ||||
| 		// line internal/php7/php7.y:3692 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 433: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3693 | ||||
| 		// line internal/php7/php7.y:3696 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||
| 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | ||||
| @ -6347,7 +6350,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 434: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3703 | ||||
| 		// line internal/php7/php7.y:3706 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||
| 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | ||||
| @ -6359,7 +6362,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 435: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3713 | ||||
| 		// line internal/php7/php7.y:3716 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||
| 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | ||||
| @ -6371,7 +6374,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 436: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3723 | ||||
| 		// line internal/php7/php7.y:3726 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprMethodCall{ | ||||
| 				Position:            yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), | ||||
| @ -6386,25 +6389,25 @@ yydefault: | ||||
| 		} | ||||
| 	case 437: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3736 | ||||
| 		// line internal/php7/php7.y:3739 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 438: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3743 | ||||
| 		// line internal/php7/php7.y:3746 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 439: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3747 | ||||
| 		// line internal/php7/php7.y:3750 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 440: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3751 | ||||
| 		// line internal/php7/php7.y:3754 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprPropertyFetch{ | ||||
| 				Position:          yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||
| @ -6415,7 +6418,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 441: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3763 | ||||
| 		// line internal/php7/php7.y:3766 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprVariable{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6428,7 +6431,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 442: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3774 | ||||
| 		// line internal/php7/php7.y:3777 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprVariable{ | ||||
| 				Position:  yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||
| @ -6443,7 +6446,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 443: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3787 | ||||
| 		// line internal/php7/php7.y:3790 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprVariable{ | ||||
| 				Position:  yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||
| @ -6453,7 +6456,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 444: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3798 | ||||
| 		// line internal/php7/php7.y:3801 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||
| @ -6464,7 +6467,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 445: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3807 | ||||
| 		// line internal/php7/php7.y:3810 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||
| @ -6475,13 +6478,13 @@ yydefault: | ||||
| 		} | ||||
| 	case 446: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3819 | ||||
| 		// line internal/php7/php7.y:3822 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 447: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3823 | ||||
| 		// line internal/php7/php7.y:3826 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||
| 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | ||||
| @ -6493,7 +6496,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 448: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3833 | ||||
| 		// line internal/php7/php7.y:3836 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||
| 				Position:        yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token), | ||||
| @ -6505,7 +6508,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 449: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3843 | ||||
| 		// line internal/php7/php7.y:3846 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprPropertyFetch{ | ||||
| 				Position:          yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||
| @ -6516,7 +6519,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 450: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3852 | ||||
| 		// line internal/php7/php7.y:3855 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||
| @ -6527,7 +6530,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 451: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3861 | ||||
| 		// line internal/php7/php7.y:3864 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprStaticPropertyFetch{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||
| @ -6538,7 +6541,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 452: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3873 | ||||
| 		// line internal/php7/php7.y:3876 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.Identifier{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6548,7 +6551,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 453: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3881 | ||||
| 		// line internal/php7/php7.y:3884 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6559,13 +6562,13 @@ yydefault: | ||||
| 		} | ||||
| 	case 454: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3890 | ||||
| 		// line internal/php7/php7.y:3893 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 455: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3897 | ||||
| 		// line internal/php7/php7.y:3900 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.Identifier{ | ||||
| 				Position:      yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6575,7 +6578,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 456: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3905 | ||||
| 		// line internal/php7/php7.y:3908 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6586,13 +6589,13 @@ yydefault: | ||||
| 		} | ||||
| 	case 457: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3914 | ||||
| 		// line internal/php7/php7.y:3917 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 458: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3921 | ||||
| 		// line internal/php7/php7.y:3924 | ||||
| 		{ | ||||
| 			pairList := yyDollar[1].node.(*ast.ParserSeparatedList) | ||||
| 			fistPair := pairList.Items[0].(*ast.ExprArrayItem) | ||||
| @ -6605,19 +6608,19 @@ yydefault: | ||||
| 		} | ||||
| 	case 459: | ||||
| 		yyDollar = yyS[yypt-0 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3935 | ||||
| 		// line internal/php7/php7.y:3938 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{} | ||||
| 		} | ||||
| 	case 460: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3939 | ||||
| 		// line internal/php7/php7.y:3942 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
| 	case 461: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3946 | ||||
| 		// line internal/php7/php7.y:3949 | ||||
| 		{ | ||||
| 			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) | ||||
| @ -6626,7 +6629,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 462: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3953 | ||||
| 		// line internal/php7/php7.y:3956 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserSeparatedList{ | ||||
| 				Items: []ast.Vertex{yyDollar[1].node}, | ||||
| @ -6634,7 +6637,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 463: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3962 | ||||
| 		// line internal/php7/php7.y:3965 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node), | ||||
| @ -6645,7 +6648,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 464: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3971 | ||||
| 		// line internal/php7/php7.y:3974 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{ | ||||
| 				Position: yylex.(*Parser).builder.NewNodePosition(yyDollar[1].node), | ||||
| @ -6654,7 +6657,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 465: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3978 | ||||
| 		// line internal/php7/php7.y:3981 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node), | ||||
| @ -6669,7 +6672,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 466: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:3991 | ||||
| 		// line internal/php7/php7.y:3994 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||
| @ -6682,7 +6685,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 467: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4002 | ||||
| 		// line internal/php7/php7.y:4005 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{ | ||||
| 				Position:    yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||
| @ -6692,7 +6695,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 468: | ||||
| 		yyDollar = yyS[yypt-6 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4010 | ||||
| 		// line internal/php7/php7.y:4013 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{ | ||||
| 				Position:       yylex.(*Parser).builder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token), | ||||
| @ -6710,7 +6713,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 469: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4026 | ||||
| 		// line internal/php7/php7.y:4029 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayItem{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||
| @ -6726,13 +6729,13 @@ yydefault: | ||||
| 		} | ||||
| 	case 470: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4043 | ||||
| 		// line internal/php7/php7.y:4046 | ||||
| 		{ | ||||
| 			yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) | ||||
| 		} | ||||
| 	case 471: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4047 | ||||
| 		// line internal/php7/php7.y:4050 | ||||
| 		{ | ||||
| 			yyVAL.list = append( | ||||
| 				yyDollar[1].list, | ||||
| @ -6745,13 +6748,13 @@ yydefault: | ||||
| 		} | ||||
| 	case 472: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4058 | ||||
| 		// line internal/php7/php7.y:4061 | ||||
| 		{ | ||||
| 			yyVAL.list = []ast.Vertex{yyDollar[1].node} | ||||
| 		} | ||||
| 	case 473: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4062 | ||||
| 		// line internal/php7/php7.y:4065 | ||||
| 		{ | ||||
| 			yyVAL.list = []ast.Vertex{ | ||||
| 				&ast.ScalarEncapsedStringPart{ | ||||
| @ -6764,7 +6767,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 474: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4076 | ||||
| 		// line internal/php7/php7.y:4079 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprVariable{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6777,7 +6780,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 475: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4087 | ||||
| 		// line internal/php7/php7.y:4090 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprArrayDimFetch{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||
| @ -6796,7 +6799,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 476: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4104 | ||||
| 		// line internal/php7/php7.y:4107 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprPropertyFetch{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6818,7 +6821,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 477: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4124 | ||||
| 		// line internal/php7/php7.y:4127 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6832,7 +6835,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 478: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4136 | ||||
| 		// line internal/php7/php7.y:4139 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6850,7 +6853,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 479: | ||||
| 		yyDollar = yyS[yypt-6 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4152 | ||||
| 		// line internal/php7/php7.y:4155 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:       yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token), | ||||
| @ -6874,7 +6877,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 480: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4174 | ||||
| 		// line internal/php7/php7.y:4177 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserBrackets{ | ||||
| 				Position:        yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token), | ||||
| @ -6885,7 +6888,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 481: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4186 | ||||
| 		// line internal/php7/php7.y:4189 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ScalarString{ | ||||
| 				Position:  yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6895,7 +6898,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 482: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4194 | ||||
| 		// line internal/php7/php7.y:4197 | ||||
| 		{ | ||||
| 			// TODO: add option to handle 64 bit integer | ||||
| 			if _, err := strconv.Atoi(string(yyDollar[1].token.Value)); err == nil { | ||||
| @ -6914,7 +6917,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 483: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4211 | ||||
| 		// line internal/php7/php7.y:4214 | ||||
| 		{ | ||||
| 			_, err := strconv.Atoi(string(yyDollar[2].token.Value)) | ||||
| 			isInt := err == nil | ||||
| @ -6940,7 +6943,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 484: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4235 | ||||
| 		// line internal/php7/php7.y:4238 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprVariable{ | ||||
| 				Position: yylex.(*Parser).builder.NewTokenPosition(yyDollar[1].token), | ||||
| @ -6953,7 +6956,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 485: | ||||
| 		yyDollar = yyS[yypt-5 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4249 | ||||
| 		// line internal/php7/php7.y:4252 | ||||
| 		{ | ||||
| 			if yyDollar[4].token != nil { | ||||
| 				yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns = append(yyDollar[3].node.(*ast.ParserSeparatedList).SeparatorTkns, yyDollar[4].token) | ||||
| @ -6970,7 +6973,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 486: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4264 | ||||
| 		// line internal/php7/php7.y:4267 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprEmpty{ | ||||
| 				Position:            yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||
| @ -6982,7 +6985,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 487: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4274 | ||||
| 		// line internal/php7/php7.y:4277 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprInclude{ | ||||
| 				Position:   yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||
| @ -6992,7 +6995,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 488: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4282 | ||||
| 		// line internal/php7/php7.y:4285 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprIncludeOnce{ | ||||
| 				Position:   yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||
| @ -7002,7 +7005,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 489: | ||||
| 		yyDollar = yyS[yypt-4 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4290 | ||||
| 		// line internal/php7/php7.y:4293 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprEval{ | ||||
| 				Position:            yylex.(*Parser).builder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token), | ||||
| @ -7014,7 +7017,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 490: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4300 | ||||
| 		// line internal/php7/php7.y:4303 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprRequire{ | ||||
| 				Position:   yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||
| @ -7024,7 +7027,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 491: | ||||
| 		yyDollar = yyS[yypt-2 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4308 | ||||
| 		// line internal/php7/php7.y:4311 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ExprRequireOnce{ | ||||
| 				Position:       yylex.(*Parser).builder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node), | ||||
| @ -7034,7 +7037,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 492: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4319 | ||||
| 		// line internal/php7/php7.y:4322 | ||||
| 		{ | ||||
| 			yyVAL.node = &ast.ParserSeparatedList{ | ||||
| 				Items: []ast.Vertex{yyDollar[1].node}, | ||||
| @ -7042,7 +7045,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 493: | ||||
| 		yyDollar = yyS[yypt-3 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4325 | ||||
| 		// line internal/php7/php7.y:4328 | ||||
| 		{ | ||||
| 			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) | ||||
| @ -7051,7 +7054,7 @@ yydefault: | ||||
| 		} | ||||
| 	case 494: | ||||
| 		yyDollar = yyS[yypt-1 : yypt+1] | ||||
| 		// line internal/php7/php7.y:4335 | ||||
| 		// line internal/php7/php7.y:4338 | ||||
| 		{ | ||||
| 			yyVAL.node = yyDollar[1].node | ||||
| 		} | ||||
|  | ||||
| @ -3178,21 +3178,22 @@ expr_without_variable: | ||||
| inline_function: | ||||
|         T_FUNCTION returns_ref backup_doc_comment '(' parameter_list ')' lexical_vars return_type '{' inner_statement_list '}' | ||||
|             { | ||||
|                 $$ = &ast.ExprClosure{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($1, $11), | ||||
|                     FunctionTkn:          $1, | ||||
|                     AmpersandTkn:         $2, | ||||
|                     OpenParenthesisTkn:   $4, | ||||
|                     Params:               $5.(*ast.ParserSeparatedList).Items, | ||||
|                     SeparatorTkns:        $5.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
|                     CloseParenthesisTkn:  $6, | ||||
|                     ClosureUse:           $7, | ||||
|                     ColonTkn:             $8.(*ast.ReturnType).ColonTkn, | ||||
|                     ReturnType:           $8.(*ast.ReturnType).Type, | ||||
|                     OpenCurlyBracketTkn:  $9, | ||||
|                     Stmts:                $10, | ||||
|                     CloseCurlyBracketTkn: $11, | ||||
|                 } | ||||
|                 closure := $7.(*ast.ExprClosure) | ||||
| 
 | ||||
|                 closure.Position             = yylex.(*Parser).builder.NewTokensPosition($1, $11) | ||||
|                 closure.FunctionTkn          = $1 | ||||
|                 closure.AmpersandTkn         = $2 | ||||
|                 closure.OpenParenthesisTkn   = $4 | ||||
|                 closure.Params               = $5.(*ast.ParserSeparatedList).Items | ||||
|                 closure.SeparatorTkns        = $5.(*ast.ParserSeparatedList).SeparatorTkns | ||||
|                 closure.CloseParenthesisTkn  = $6 | ||||
|                 closure.ColonTkn             = $8.(*ast.ReturnType).ColonTkn | ||||
|                 closure.ReturnType           = $8.(*ast.ReturnType).Type | ||||
|                 closure.OpenCurlyBracketTkn  = $9 | ||||
|                 closure.Stmts                = $10 | ||||
|                 closure.CloseCurlyBracketTkn = $11 | ||||
| 
 | ||||
|                 $$ = closure | ||||
|             } | ||||
|     |   T_FN returns_ref '(' parameter_list ')' return_type backup_doc_comment T_DOUBLE_ARROW expr | ||||
|             { | ||||
| @ -3230,17 +3231,16 @@ returns_ref: | ||||
| lexical_vars: | ||||
|         /* empty */ | ||||
|             { | ||||
|                 $$ = nil | ||||
|                 $$ = &ast.ExprClosure{} | ||||
|             } | ||||
|     |   T_USE '(' lexical_var_list ')' | ||||
|             { | ||||
|                 $$ = &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($1, $4), | ||||
|                     UseTkn:              $1, | ||||
|                     OpenParenthesisTkn:  $2, | ||||
|                     Uses:                $3.(*ast.ParserSeparatedList).Items, | ||||
|                     SeparatorTkns:       $3.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
|                     CloseParenthesisTkn: $4, | ||||
|                 $$ = &ast.ExprClosure{ | ||||
|                     UseTkn:                 $1, | ||||
|                     UseOpenParenthesisTkn:  $2, | ||||
|                     Use:                    $3.(*ast.ParserSeparatedList).Items, | ||||
|                     UseSeparatorTkns:       $3.(*ast.ParserSeparatedList).SeparatorTkns, | ||||
|                     UseCloseParenthesisTkn: $4, | ||||
|                 } | ||||
|             } | ||||
| ; | ||||
| @ -3264,18 +3264,21 @@ lexical_var_list: | ||||
| lexical_var: | ||||
|     T_VARIABLE | ||||
|             { | ||||
|                 $$ = &ast.ExprVariable{ | ||||
|                 $$ = &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokenPosition($1), | ||||
|                     VarName: &ast.Identifier{ | ||||
|                     Var: &ast.ExprVariable{ | ||||
|                         Position: yylex.(*Parser).builder.NewTokenPosition($1), | ||||
|                         IdentifierTkn: $1, | ||||
|                         Value:         $1.Value, | ||||
|                         VarName: &ast.Identifier{ | ||||
|                             Position: yylex.(*Parser).builder.NewTokenPosition($1), | ||||
|                             IdentifierTkn: $1, | ||||
|                             Value:         $1.Value, | ||||
|                         }, | ||||
|                     }, | ||||
|                 } | ||||
|             } | ||||
|     |   '&' T_VARIABLE | ||||
|             { | ||||
|                 $$ = &ast.ExprReference{ | ||||
|                 $$ = &ast.ExprClosureUse{ | ||||
|                     Position: yylex.(*Parser).builder.NewTokensPosition($1, $2), | ||||
|                     AmpersandTkn: $1, | ||||
|                     Var: &ast.ExprVariable{ | ||||
|  | ||||
| @ -1274,20 +1274,24 @@ func (n *ExprClone) GetPosition() *position.Position { | ||||
| 
 | ||||
| // ExprClosure node | ||||
| type ExprClosure struct { | ||||
| 	Position             *position.Position | ||||
| 	StaticTkn            *token.Token | ||||
| 	FunctionTkn          *token.Token | ||||
| 	AmpersandTkn         *token.Token | ||||
| 	OpenParenthesisTkn   *token.Token | ||||
| 	Params               []Vertex | ||||
| 	SeparatorTkns        []*token.Token | ||||
| 	CloseParenthesisTkn  *token.Token | ||||
| 	ClosureUse           Vertex | ||||
| 	ColonTkn             *token.Token | ||||
| 	ReturnType           Vertex | ||||
| 	OpenCurlyBracketTkn  *token.Token | ||||
| 	Stmts                []Vertex | ||||
| 	CloseCurlyBracketTkn *token.Token | ||||
| 	Position               *position.Position | ||||
| 	StaticTkn              *token.Token | ||||
| 	FunctionTkn            *token.Token | ||||
| 	AmpersandTkn           *token.Token | ||||
| 	OpenParenthesisTkn     *token.Token | ||||
| 	Params                 []Vertex | ||||
| 	SeparatorTkns          []*token.Token | ||||
| 	CloseParenthesisTkn    *token.Token | ||||
| 	UseTkn                 *token.Token | ||||
| 	UseOpenParenthesisTkn  *token.Token | ||||
| 	Use                    []Vertex | ||||
| 	UseSeparatorTkns       []*token.Token | ||||
| 	UseCloseParenthesisTkn *token.Token | ||||
| 	ColonTkn               *token.Token | ||||
| 	ReturnType             Vertex | ||||
| 	OpenCurlyBracketTkn    *token.Token | ||||
| 	Stmts                  []Vertex | ||||
| 	CloseCurlyBracketTkn   *token.Token | ||||
| } | ||||
| 
 | ||||
| func (n *ExprClosure) Accept(v NodeVisitor) { | ||||
| @ -1300,12 +1304,9 @@ func (n *ExprClosure) GetPosition() *position.Position { | ||||
| 
 | ||||
| // ExprClosureUse node | ||||
| type ExprClosureUse struct { | ||||
| 	Position            *position.Position | ||||
| 	UseTkn              *token.Token | ||||
| 	OpenParenthesisTkn  *token.Token | ||||
| 	Uses                []Vertex | ||||
| 	SeparatorTkns       []*token.Token | ||||
| 	CloseParenthesisTkn *token.Token | ||||
| 	Position     *position.Position | ||||
| 	AmpersandTkn *token.Token | ||||
| 	Var          Vertex | ||||
| } | ||||
| 
 | ||||
| func (n *ExprClosureUse) Accept(v NodeVisitor) { | ||||
|  | ||||
| @ -1152,10 +1152,12 @@ func (t *DFS) Traverse(n ast.Vertex) { | ||||
| 			} | ||||
| 			t.visitor.Leave("Params", false) | ||||
| 		} | ||||
| 		if nn.ClosureUse != nil { | ||||
| 			t.visitor.Enter("ClosureUse", true) | ||||
| 			t.Traverse(nn.ClosureUse) | ||||
| 			t.visitor.Leave("ClosureUse", true) | ||||
| 		if nn.Use != nil { | ||||
| 			t.visitor.Enter("Use", false) | ||||
| 			for _, c := range nn.Use { | ||||
| 				t.Traverse(c) | ||||
| 			} | ||||
| 			t.visitor.Leave("Use", false) | ||||
| 		} | ||||
| 		if nn.ReturnType != nil { | ||||
| 			t.visitor.Enter("ReturnType", true) | ||||
| @ -1176,12 +1178,10 @@ func (t *DFS) Traverse(n ast.Vertex) { | ||||
| 		if !t.visitor.EnterNode(nn) { | ||||
| 			return | ||||
| 		} | ||||
| 		if nn.Uses != nil { | ||||
| 			t.visitor.Enter("Uses", false) | ||||
| 			for _, c := range nn.Uses { | ||||
| 				t.Traverse(c) | ||||
| 			} | ||||
| 			t.visitor.Leave("Uses", false) | ||||
| 		if nn.Var != nil { | ||||
| 			t.visitor.Enter("Var", true) | ||||
| 			t.Traverse(nn.Var) | ||||
| 			t.visitor.Leave("Var", true) | ||||
| 		} | ||||
| 	case *ast.ExprConstFetch: | ||||
| 		if nn == nil { | ||||
|  | ||||
| @ -1143,7 +1143,11 @@ func (v *Dumper) ExprClosure(n *ast.ExprClosure) { | ||||
| 	v.dumpVertexList("Params", n.Params) | ||||
| 	v.dumpTokenList("SeparatorTkns", n.SeparatorTkns) | ||||
| 	v.dumpToken("CloseParenthesisTkn", n.CloseParenthesisTkn) | ||||
| 	v.dumpVertex("ClosureUse", n.ClosureUse) | ||||
| 	v.dumpToken("UseTkn", n.UseTkn) | ||||
| 	v.dumpToken("UseOpenParenthesisTkn", n.UseOpenParenthesisTkn) | ||||
| 	v.dumpVertexList("Use", n.Use) | ||||
| 	v.dumpTokenList("UseSeparatorTkns", n.UseSeparatorTkns) | ||||
| 	v.dumpToken("UseCloseParenthesisTkn", n.UseCloseParenthesisTkn) | ||||
| 	v.dumpToken("ColonTkn", n.ColonTkn) | ||||
| 	v.dumpVertex("ReturnType", n.ReturnType) | ||||
| 	v.dumpToken("OpenCurlyBracketTkn", n.OpenCurlyBracketTkn) | ||||
| @ -1159,11 +1163,8 @@ func (v *Dumper) ExprClosureUse(n *ast.ExprClosureUse) { | ||||
| 	v.indent++ | ||||
| 
 | ||||
| 	v.dumpPosition(n.Position) | ||||
| 	v.dumpToken("UseTkn", n.UseTkn) | ||||
| 	v.dumpToken("OpenParenthesisTkn", n.OpenParenthesisTkn) | ||||
| 	v.dumpVertexList("Uses", n.Uses) | ||||
| 	v.dumpTokenList("SeparatorTkns", n.SeparatorTkns) | ||||
| 	v.dumpToken("CloseParenthesisTkn", n.CloseParenthesisTkn) | ||||
| 	v.dumpToken("AmpersandTkn", n.AmpersandTkn) | ||||
| 	v.dumpVertex("Var", n.Var) | ||||
| 
 | ||||
| 	v.indent-- | ||||
| 	v.print(v.indent, "},\n") | ||||
|  | ||||
| @ -1162,9 +1162,16 @@ func (f *formatter) ExprClosure(n *ast.ExprClosure) { | ||||
| 	} | ||||
| 	n.CloseParenthesisTkn = f.newToken(')', []byte(")")) | ||||
| 
 | ||||
| 	if n.ClosureUse != nil { | ||||
| 	n.UseTkn = nil | ||||
| 	n.UseOpenParenthesisTkn = nil | ||||
| 	n.UseCloseParenthesisTkn = nil | ||||
| 	n.UseSeparatorTkns = nil | ||||
| 	if len(n.Use) > 0 { | ||||
| 		f.addFreeFloating(token.T_WHITESPACE, []byte(" ")) | ||||
| 		n.ClosureUse.Accept(f) | ||||
| 		n.UseTkn = f.newToken(token.T_USE, []byte("use")) | ||||
| 		n.OpenParenthesisTkn = f.newToken('(', []byte("(")) | ||||
| 		n.SeparatorTkns = f.formatList(n.Use, ',') | ||||
| 		n.CloseParenthesisTkn = f.newToken(')', []byte(")")) | ||||
| 	} | ||||
| 
 | ||||
| 	n.ColonTkn = nil | ||||
| @ -1189,10 +1196,11 @@ func (f *formatter) ExprClosure(n *ast.ExprClosure) { | ||||
| } | ||||
| 
 | ||||
| func (f *formatter) ExprClosureUse(n *ast.ExprClosureUse) { | ||||
| 	n.UseTkn = f.newToken(token.T_USE, []byte("use")) | ||||
| 	n.OpenParenthesisTkn = f.newToken('(', []byte("(")) | ||||
| 	n.SeparatorTkns = f.formatList(n.Uses, ',') | ||||
| 	n.CloseParenthesisTkn = f.newToken(')', []byte(")")) | ||||
| 	if n.AmpersandTkn != nil { | ||||
| 		n.AmpersandTkn = f.newToken('&', []byte("&")) | ||||
| 	} | ||||
| 
 | ||||
| 	n.Var.Accept(f) | ||||
| } | ||||
| 
 | ||||
| func (f *formatter) ExprConstFetch(n *ast.ExprConstFetch) { | ||||
|  | ||||
| @ -3714,9 +3714,9 @@ func TestFormatter_ExprClosure_Use(t *testing.T) { | ||||
| 	o := bytes.NewBufferString("") | ||||
| 
 | ||||
| 	n := &ast.ExprClosure{ | ||||
| 		ClosureUse: &ast.ExprClosureUse{ | ||||
| 			Uses: []ast.Vertex{ | ||||
| 				&ast.ExprVariable{ | ||||
| 		Use: []ast.Vertex{ | ||||
| 			&ast.ExprClosureUse{ | ||||
| 				Var: &ast.ExprVariable{ | ||||
| 					VarName: &ast.Identifier{ | ||||
| 						Value: []byte("$foo"), | ||||
| 					}, | ||||
| @ -3748,16 +3748,9 @@ func TestFormatter_ExprClosureUse(t *testing.T) { | ||||
| 	o := bytes.NewBufferString("") | ||||
| 
 | ||||
| 	n := &ast.ExprClosureUse{ | ||||
| 		Uses: []ast.Vertex{ | ||||
| 			&ast.ExprVariable{ | ||||
| 				VarName: &ast.Identifier{ | ||||
| 					Value: []byte("$a"), | ||||
| 				}, | ||||
| 			}, | ||||
| 			&ast.ExprVariable{ | ||||
| 				VarName: &ast.Identifier{ | ||||
| 					Value: []byte("$b"), | ||||
| 				}, | ||||
| 		Var: &ast.ExprVariable{ | ||||
| 			VarName: &ast.Identifier{ | ||||
| 				Value: []byte("$a"), | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| @ -3768,7 +3761,33 @@ func TestFormatter_ExprClosureUse(t *testing.T) { | ||||
| 	p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) | ||||
| 	n.Accept(p) | ||||
| 
 | ||||
| 	expected := `use($a, $b)` | ||||
| 	expected := `$a` | ||||
| 	actual := o.String() | ||||
| 
 | ||||
| 	if expected != actual { | ||||
| 		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestFormatter_ExprClosureUse_Reference(t *testing.T) { | ||||
| 	o := bytes.NewBufferString("") | ||||
| 
 | ||||
| 	n := &ast.ExprClosureUse{ | ||||
| 		AmpersandTkn: &token.Token{}, | ||||
| 		Var: &ast.ExprVariable{ | ||||
| 			VarName: &ast.Identifier{ | ||||
| 				Value: []byte("$a"), | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	f := visitor.NewFormatter().WithState(visitor.FormatterStatePHP).WithIndent(1) | ||||
| 	n.Accept(f) | ||||
| 
 | ||||
| 	p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) | ||||
| 	n.Accept(p) | ||||
| 
 | ||||
| 	expected := `&$a` | ||||
| 	actual := o.String() | ||||
| 
 | ||||
| 	if expected != actual { | ||||
|  | ||||
| @ -562,7 +562,6 @@ func TestResolveClosureName(t *testing.T) { | ||||
| 				Var:  &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		ClosureUse: nil, | ||||
| 		ReturnType: &ast.Nullable{Expr: nameBC}, | ||||
| 		Stmts:      []ast.Vertex{}, | ||||
| 	} | ||||
|  | ||||
| @ -684,7 +684,10 @@ func (p *printer) ExprClosure(n *ast.ExprClosure) { | ||||
| 	p.printToken(n.OpenParenthesisTkn, []byte("(")) | ||||
| 	p.printSeparatedList(n.Params, n.SeparatorTkns, []byte(",")) | ||||
| 	p.printToken(n.CloseParenthesisTkn, []byte(")")) | ||||
| 	p.printNode(n.ClosureUse) | ||||
| 	p.printToken(n.UseTkn, p.ifNodeList(n.Use, []byte("use"))) | ||||
| 	p.printToken(n.UseOpenParenthesisTkn, p.ifNodeList(n.Use, []byte("("))) | ||||
| 	p.printSeparatedList(n.Use, n.UseSeparatorTkns, []byte(",")) | ||||
| 	p.printToken(n.UseCloseParenthesisTkn, p.ifNodeList(n.Use, []byte(")"))) | ||||
| 	p.printToken(n.ColonTkn, p.ifNode(n.ReturnType, []byte(":"))) | ||||
| 	p.printNode(n.ReturnType) | ||||
| 	p.printToken(n.OpenCurlyBracketTkn, []byte("{")) | ||||
| @ -693,10 +696,8 @@ func (p *printer) ExprClosure(n *ast.ExprClosure) { | ||||
| } | ||||
| 
 | ||||
| func (p *printer) ExprClosureUse(n *ast.ExprClosureUse) { | ||||
| 	p.printToken(n.UseTkn, []byte("use")) | ||||
| 	p.printToken(n.OpenParenthesisTkn, []byte("(")) | ||||
| 	p.printSeparatedList(n.Uses, n.SeparatorTkns, []byte(",")) | ||||
| 	p.printToken(n.CloseParenthesisTkn, []byte(")")) | ||||
| 	p.printToken(n.AmpersandTkn, nil) | ||||
| 	p.printNode(n.Var) | ||||
| } | ||||
| 
 | ||||
| func (p *printer) ExprConstFetch(n *ast.ExprConstFetch) { | ||||
|  | ||||
| @ -1717,18 +1717,35 @@ func TestPrinterPrintExprClosureUse(t *testing.T) { | ||||
| 
 | ||||
| 	p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) | ||||
| 	n := &ast.ExprClosureUse{ | ||||
| 		Uses: []ast.Vertex{ | ||||
| 			&ast.ExprReference{Var: &ast.ExprVariable{ | ||||
| 				VarName: &ast.Identifier{Value: []byte("$foo")}, | ||||
| 			}}, | ||||
| 			&ast.ExprVariable{ | ||||
| 				VarName: &ast.Identifier{Value: []byte("$bar")}, | ||||
| 			}, | ||||
| 		Var: &ast.ExprVariable{ | ||||
| 			VarName: &ast.Identifier{Value: []byte("$foo")}, | ||||
| 		}, | ||||
| 	} | ||||
| 	n.Accept(p) | ||||
| 
 | ||||
| 	expected := `use(&$foo,$bar)` | ||||
| 	expected := `$foo` | ||||
| 	actual := o.String() | ||||
| 
 | ||||
| 	if expected != actual { | ||||
| 		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPrinterPrintExprClosureUse_Reference(t *testing.T) { | ||||
| 	o := bytes.NewBufferString("") | ||||
| 
 | ||||
| 	p := visitor.NewPrinter(o).WithState(visitor.PrinterStatePHP) | ||||
| 	n := &ast.ExprClosureUse{ | ||||
| 		AmpersandTkn: &token.Token{ | ||||
| 			Value: []byte("&"), | ||||
| 		}, | ||||
| 		Var: &ast.ExprVariable{ | ||||
| 			VarName: &ast.Identifier{Value: []byte("$foo")}, | ||||
| 		}, | ||||
| 	} | ||||
| 	n.Accept(p) | ||||
| 
 | ||||
| 	expected := `&$foo` | ||||
| 	actual := o.String() | ||||
| 
 | ||||
| 	if expected != actual { | ||||
| @ -1754,12 +1771,17 @@ func TestPrinterPrintExprClosure(t *testing.T) { | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		ClosureUse: &ast.ExprClosureUse{ | ||||
| 			Uses: []ast.Vertex{ | ||||
| 				&ast.ExprReference{Var: &ast.ExprVariable{ | ||||
| 		Use: []ast.Vertex{ | ||||
| 			&ast.ExprClosureUse{ | ||||
| 				AmpersandTkn: &token.Token{ | ||||
| 					Value: []byte("&"), | ||||
| 				}, | ||||
| 				Var: &ast.ExprVariable{ | ||||
| 					VarName: &ast.Identifier{Value: []byte("$a")}, | ||||
| 				}}, | ||||
| 				&ast.ExprVariable{ | ||||
| 				}, | ||||
| 			}, | ||||
| 			&ast.ExprClosureUse{ | ||||
| 				Var: &ast.ExprVariable{ | ||||
| 					VarName: &ast.Identifier{Value: []byte("$b")}, | ||||
| 				}, | ||||
| 			}, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user