[refactoring] keep $ in variable identifier
This commit is contained in:
		
							parent
							
								
									d7652b1c7f
								
							
						
					
					
						commit
						ee3fe3b5c0
					
				| @ -2,7 +2,6 @@ package php5 | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/z7zmey/php-parser/internal/scanner" | ||||
| 	"github.com/z7zmey/php-parser/pkg/ast" | ||||
| @ -63,10 +62,6 @@ func lastNode(nn []ast.Vertex) ast.Vertex { | ||||
| 	return nn[len(nn)-1] | ||||
| } | ||||
| 
 | ||||
| func isDollar(r rune) bool { | ||||
| 	return r == '$' | ||||
| } | ||||
| 
 | ||||
| func (p *Parser) MoveFreeFloating(src ast.Vertex, dst ast.Vertex) { | ||||
| 	if p.withTokens == false { | ||||
| 		return | ||||
| @ -110,19 +105,6 @@ func (p *Parser) GetFreeFloatingToken(t *scanner.Token) []token.Token { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (p *Parser) addDollarToken(v ast.Vertex) { | ||||
| 	if p.withTokens == false { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	p.setFreeFloating(v, token.Dollar, []token.Token{ | ||||
| 		{ | ||||
| 			ID:    token.ID('$'), | ||||
| 			Value: []byte("$"), | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func (p *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast.Vertex) { | ||||
| 	if p.withTokens == false { | ||||
| 		return | ||||
| @ -144,7 +126,6 @@ func (p *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast. | ||||
| 	} | ||||
| 
 | ||||
| 	vlen := len(semiColon[0].Value) | ||||
| 	fmt.Printf("vlen: %q\n", string(semiColon[0].Value)) | ||||
| 
 | ||||
| 	tlen := 2 | ||||
| 	if bytes.HasSuffix(semiColon[0].Value, []byte("?>\n")) { | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1418,7 +1418,7 @@ catch_statement: | ||||
|             } | ||||
|     |   T_CATCH '(' fully_qualified_class_name T_VARIABLE ')' '{' inner_statement_list '}' additional_catches | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($4.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $4.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 catchNode := &ast.StmtCatch{ast.Node{}, []ast.Vertex{$3}, variable, $7} | ||||
|                 $$ = append([]ast.Vertex{catchNode}, $9...) | ||||
| @ -1432,7 +1432,6 @@ catch_statement: | ||||
|                 yylex.(*Parser).setFreeFloating(catchNode, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(catchNode, token.Catch, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $4.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(catchNode, token.Var, $5.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(catchNode, token.Cond, $6.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(catchNode, token.Stmts, $8.Hidden) | ||||
| @ -1497,7 +1496,7 @@ non_empty_additional_catches: | ||||
| additional_catch: | ||||
|         T_CATCH '(' fully_qualified_class_name T_VARIABLE ')' '{' inner_statement_list '}' | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($4.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $4.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.StmtCatch{ast.Node{}, []ast.Vertex{$3}, variable, $7} | ||||
| 
 | ||||
| @ -1510,7 +1509,6 @@ additional_catch: | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Catch, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $4.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, $5.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Cond, $6.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Stmts, $8.Hidden) | ||||
| @ -2284,7 +2282,7 @@ non_empty_parameter_list: | ||||
| parameter: | ||||
|         optional_class_type is_reference is_variadic T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($4.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $4.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.Parameter{ast.Node{}, $2 != nil, $3 != nil, $1, variable, nil} | ||||
| 
 | ||||
| @ -2312,7 +2310,6 @@ parameter: | ||||
|                     yylex.(*Parser).setFreeFloating($$, token.Ampersand, $3.Hidden) | ||||
|                 } | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 // normalize | ||||
|                 if $3 == nil { | ||||
| @ -2329,7 +2326,7 @@ parameter: | ||||
|             } | ||||
|     |   optional_class_type is_reference is_variadic T_VARIABLE '=' static_scalar | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($4.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $4.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.Parameter{ast.Node{}, $2 != nil, $3 != nil, $1, variable, $6} | ||||
| 
 | ||||
| @ -2358,7 +2355,6 @@ parameter: | ||||
|                 } | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, $5.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 // normalize | ||||
|                 if $3 == nil { | ||||
| @ -2552,7 +2548,7 @@ global_var_list: | ||||
| global_var: | ||||
|         T_VARIABLE | ||||
|             { | ||||
|                 name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 name := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, name} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -2561,7 +2557,6 @@ global_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -2574,7 +2569,6 @@ global_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Dollar, yylex.(*Parser).GetFreeFloatingToken($1)) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -2587,7 +2581,6 @@ global_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Dollar, yylex.(*Parser).GetFreeFloatingToken($1)) | ||||
|                 yylex.(*Parser).setFreeFloating($3, token.Start, append($2.Hidden, append(yylex.(*Parser).GetFreeFloatingToken($2), $3.GetNode().Tokens[token.Start]...)...)) | ||||
|                 yylex.(*Parser).setFreeFloating($3, token.End, append($3.GetNode().Tokens[token.End], append($4.Hidden, yylex.(*Parser).GetFreeFloatingToken($4)...)...)) | ||||
| 
 | ||||
| @ -2599,7 +2592,7 @@ global_var: | ||||
| static_var_list: | ||||
|         static_var_list ',' T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($3.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $3.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 staticVar := &ast.StmtStaticVar{ast.Node{}, variable, nil} | ||||
|                 $$ = append($1, staticVar) | ||||
| @ -2611,14 +2604,13 @@ static_var_list: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(staticVar, token.Start, $3.Hidden) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   static_var_list ',' T_VARIABLE '=' static_scalar | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($3.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $3.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 staticVar := &ast.StmtStaticVar{ast.Node{}, variable, $5} | ||||
|                 $$ = append($1, staticVar) | ||||
| @ -2630,7 +2622,6 @@ static_var_list: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(staticVar, token.Start, $3.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(staticVar, token.Var, $4.Hidden) | ||||
| 
 | ||||
| @ -2638,7 +2629,7 @@ static_var_list: | ||||
|             } | ||||
|     |   T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 staticVar := &ast.StmtStaticVar{ast.Node{}, variable, nil} | ||||
|                 $$ = []ast.Vertex{staticVar} | ||||
| @ -2649,14 +2640,13 @@ static_var_list: | ||||
|                 staticVar.GetNode().Position = position.NewTokenPosition($1) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(staticVar, token.Start, $1.Hidden) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   T_VARIABLE '=' static_scalar | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 staticVar := &ast.StmtStaticVar{ast.Node{}, variable, $3} | ||||
|                 $$ = []ast.Vertex{staticVar} | ||||
| @ -2667,7 +2657,6 @@ static_var_list: | ||||
|                 staticVar.GetNode().Position = position.NewTokenNodePosition($1, $3) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(staticVar, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(staticVar, token.Var, $2.Hidden) | ||||
| 
 | ||||
| @ -3154,7 +3143,7 @@ member_modifier: | ||||
| class_variable_declaration: | ||||
|         class_variable_declaration ',' T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($3.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $3.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 property := &ast.StmtProperty{ast.Node{}, variable, nil} | ||||
|                 $$ = append($1, property) | ||||
| @ -3165,7 +3154,6 @@ class_variable_declaration: | ||||
|                 property.GetNode().Position = position.NewTokenPosition($3) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(property, token.Start, $3.Hidden) | ||||
| 
 | ||||
| @ -3173,7 +3161,7 @@ class_variable_declaration: | ||||
|             } | ||||
|     |   class_variable_declaration ',' T_VARIABLE '=' static_scalar | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($3.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $3.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 property := &ast.StmtProperty{ast.Node{}, variable, $5} | ||||
|                 $$ = append($1, property) | ||||
| @ -3185,7 +3173,6 @@ class_variable_declaration: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(property, token.Start, $3.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(property, token.Var, $4.Hidden) | ||||
| 
 | ||||
| @ -3193,7 +3180,7 @@ class_variable_declaration: | ||||
|             } | ||||
|     |   T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 property := &ast.StmtProperty{ast.Node{}, variable, nil} | ||||
|                 $$ = []ast.Vertex{property} | ||||
| @ -3204,14 +3191,13 @@ class_variable_declaration: | ||||
|                 property.GetNode().Position = position.NewTokenPosition($1) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(property, token.Start, $1.Hidden) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   T_VARIABLE '=' static_scalar | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 property := &ast.StmtProperty{ast.Node{}, variable, $3} | ||||
|                 $$ = []ast.Vertex{property} | ||||
| @ -3222,7 +3208,6 @@ class_variable_declaration: | ||||
|                 property.GetNode().Position = position.NewTokenNodePosition($1, $3) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(property, token.Start, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(property, token.Var, $2.Hidden) | ||||
| 
 | ||||
| @ -4592,7 +4577,7 @@ lexical_vars: | ||||
| lexical_var_list: | ||||
|         lexical_var_list ',' T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($3.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $3.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = append($1, variable) | ||||
| 
 | ||||
| @ -4603,13 +4588,12 @@ lexical_var_list: | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $3.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   lexical_var_list ',' '&' T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($4.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $4.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 reference := &ast.ExprReference{ast.Node{}, variable} | ||||
|                 $$ = append($1, reference) | ||||
| @ -4623,13 +4607,12 @@ lexical_var_list: | ||||
|                 yylex.(*Parser).setFreeFloating(lastNode($1), token.End, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(reference, token.Start, $3.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $4.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = []ast.Vertex{variable} | ||||
| 
 | ||||
| @ -4639,13 +4622,12 @@ lexical_var_list: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   '&' T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($2.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $2.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 reference := &ast.ExprReference{ast.Node{}, variable} | ||||
|                 $$ = []ast.Vertex{reference} | ||||
| @ -4658,7 +4640,6 @@ lexical_var_list: | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(reference, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $2.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -6390,7 +6371,7 @@ reference_variable: | ||||
| compound_variable: | ||||
|         T_VARIABLE | ||||
|             { | ||||
|                 name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 name := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, name} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -6399,7 +6380,6 @@ compound_variable: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -6412,7 +6392,6 @@ compound_variable: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Dollar, yylex.(*Parser).GetFreeFloatingToken($1)) | ||||
|                 yylex.(*Parser).setFreeFloating($3, token.Start, append($2.Hidden, append(yylex.(*Parser).GetFreeFloatingToken($2), $3.GetNode().Tokens[token.Start]...)...)) | ||||
|                 yylex.(*Parser).setFreeFloating($3, token.End, append($3.GetNode().Tokens[token.End], append($4.Hidden, yylex.(*Parser).GetFreeFloatingToken($4)...)...)) | ||||
| 
 | ||||
| @ -6535,7 +6514,6 @@ simple_indirect_reference: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(n, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(n, token.Dollar, yylex.(*Parser).GetFreeFloatingToken($1)) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -6553,9 +6531,8 @@ simple_indirect_reference: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating(n, token.Start, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(n, token.Dollar, yylex.(*Parser).GetFreeFloatingToken($2)) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)  | ||||
|             } | ||||
| ; | ||||
| 
 | ||||
| @ -6817,7 +6794,7 @@ encaps_list: | ||||
| encaps_var: | ||||
|         T_VARIABLE | ||||
|             { | ||||
|                 name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 name := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, name} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -6826,13 +6803,12 @@ encaps_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   T_VARIABLE '[' encaps_var_offset ']' | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.ExprArrayDimFetch{ast.Node{}, variable, $3} | ||||
| 
 | ||||
| @ -6842,7 +6818,6 @@ encaps_var: | ||||
|                 $$.GetNode().Position = position.NewTokensPosition($1, $4) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, append($2.Hidden, yylex.(*Parser).GetFreeFloatingToken($2)...)) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Expr, append($4.Hidden, yylex.(*Parser).GetFreeFloatingToken($4)...)) | ||||
| 
 | ||||
| @ -6850,7 +6825,7 @@ encaps_var: | ||||
|             } | ||||
|     |   T_VARIABLE T_OBJECT_OPERATOR T_STRING | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 fetch := &ast.Identifier{ast.Node{}, $3.Value} | ||||
|                 $$ = &ast.ExprPropertyFetch{ast.Node{}, variable, fetch} | ||||
| @ -6862,7 +6837,6 @@ encaps_var: | ||||
|                 $$.GetNode().Position = position.NewTokensPosition($1, $3) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(fetch, token.Start, $3.Hidden) | ||||
| 
 | ||||
| @ -6963,7 +6937,7 @@ encaps_var_offset: | ||||
|             } | ||||
|     |   T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, identifier} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -6972,7 +6946,6 @@ encaps_var_offset: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -62,10 +62,6 @@ func lastNode(nn []ast.Vertex) ast.Vertex { | ||||
| 	return nn[len(nn)-1] | ||||
| } | ||||
| 
 | ||||
| func isDollar(r rune) bool { | ||||
| 	return r == '$' | ||||
| } | ||||
| 
 | ||||
| func (p *Parser) MoveFreeFloating(src ast.Vertex, dst ast.Vertex) { | ||||
| 	if p.withTokens == false { | ||||
| 		return | ||||
| @ -109,19 +105,6 @@ func (p *Parser) GetFreeFloatingToken(t *scanner.Token) []token.Token { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (p *Parser) addDollarToken(v ast.Vertex) { | ||||
| 	if p.withTokens == false { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	p.setFreeFloating(v, token.Dollar, []token.Token{ | ||||
| 		{ | ||||
| 			ID:    token.ID('$'), | ||||
| 			Value: []byte("$"), | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func (p *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast.Vertex) { | ||||
| 	if p.withTokens == false { | ||||
| 		return | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1352,7 +1352,7 @@ catch_list: | ||||
|             } | ||||
|     |   catch_list T_CATCH '(' catch_name_list T_VARIABLE ')' '{' inner_statement_list '}' | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($5.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $5.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 catch := &ast.StmtCatch{ast.Node{}, $4, variable, $8} | ||||
|                 $$ = append($1, catch) | ||||
| @ -1366,7 +1366,6 @@ catch_list: | ||||
|                 yylex.(*Parser).setFreeFloating(catch, token.Start, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(catch, token.Catch, $3.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $5.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating(catch, token.Var, $6.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(catch, token.Cond, $7.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(catch, token.Stmts, $9.Hidden) | ||||
| @ -2142,7 +2141,7 @@ non_empty_parameter_list: | ||||
| parameter: | ||||
|         optional_type is_reference is_variadic T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($4.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $4.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.Parameter{ast.Node{}, $2 != nil, $3 != nil, $1, variable, nil} | ||||
| 
 | ||||
| @ -2171,7 +2170,6 @@ parameter: | ||||
|                 } | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Hidden) | ||||
| 
 | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 // normalize | ||||
|                 if $3 == nil { | ||||
| @ -2188,7 +2186,7 @@ parameter: | ||||
|             } | ||||
|     |   optional_type is_reference is_variadic T_VARIABLE '=' expr | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($4.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $4.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.Parameter{ast.Node{}, $2 != nil, $3 != nil, $1, variable, $6} | ||||
| 
 | ||||
| @ -2218,7 +2216,6 @@ parameter: | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Variadic, $4.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, $5.Hidden) | ||||
| 
 | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 // normalize | ||||
|                 if $3 == nil { | ||||
| @ -2448,7 +2445,7 @@ static_var_list: | ||||
| static_var: | ||||
|         T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.StmtStaticVar{ast.Node{}, variable, nil} | ||||
| 
 | ||||
| @ -2459,13 +2456,12 @@ static_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   T_VARIABLE '=' expr | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.StmtStaticVar{ast.Node{}, variable, $3} | ||||
| 
 | ||||
| @ -2476,7 +2472,6 @@ static_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, $2.Hidden) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
| @ -2975,7 +2970,7 @@ property_list: | ||||
| property: | ||||
|         T_VARIABLE backup_doc_comment | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.StmtProperty{ast.Node{}, variable, nil} | ||||
| 
 | ||||
| @ -2986,13 +2981,12 @@ property: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   T_VARIABLE '=' expr backup_doc_comment | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.StmtProperty{ast.Node{}, variable, $3} | ||||
| 
 | ||||
| @ -3003,7 +2997,6 @@ property: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, $2.Hidden) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
| @ -4289,7 +4282,7 @@ lexical_var_list: | ||||
| lexical_var: | ||||
|     T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, identifier} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -4298,13 +4291,12 @@ lexical_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   '&' T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($2.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $2.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.ExprReference{ast.Node{}, variable} | ||||
| 
 | ||||
| @ -4316,7 +4308,6 @@ lexical_var: | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(variable, token.Start, $2.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -4937,7 +4928,7 @@ variable: | ||||
| simple_variable: | ||||
|         T_VARIABLE | ||||
|             { | ||||
|                 name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 name := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, name} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -4946,7 +4937,6 @@ simple_variable: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -4959,7 +4949,6 @@ simple_variable: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Dollar, yylex.(*Parser).GetFreeFloatingToken($1)) | ||||
|                 yylex.(*Parser).setFreeFloating($3, token.Start, append($2.Hidden, append(yylex.(*Parser).GetFreeFloatingToken($2), $3.GetNode().Tokens[token.Start]...)...)) | ||||
|                 yylex.(*Parser).setFreeFloating($3, token.End, append($3.GetNode().Tokens[token.End], append($4.Hidden, yylex.(*Parser).GetFreeFloatingToken($4)...)...)) | ||||
| 
 | ||||
| @ -4974,7 +4963,6 @@ simple_variable: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Dollar, yylex.(*Parser).GetFreeFloatingToken($1)) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
| @ -5347,7 +5335,7 @@ encaps_list: | ||||
| encaps_var: | ||||
|         T_VARIABLE | ||||
|             { | ||||
|                 name := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 name := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, name} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -5356,13 +5344,12 @@ encaps_var: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|     |   T_VARIABLE '[' encaps_var_offset ']' | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 $$ = &ast.ExprArrayDimFetch{ast.Node{}, variable, $3} | ||||
| 
 | ||||
| @ -5372,7 +5359,6 @@ encaps_var: | ||||
|                 $$.GetNode().Position = position.NewTokensPosition($1, $4) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, append($2.Hidden, yylex.(*Parser).GetFreeFloatingToken($2)...)) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Expr, append($4.Hidden, yylex.(*Parser).GetFreeFloatingToken($4)...)) | ||||
| 
 | ||||
| @ -5380,7 +5366,7 @@ encaps_var: | ||||
|             } | ||||
|     |   T_VARIABLE T_OBJECT_OPERATOR T_STRING | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 variable := &ast.ExprVariable{ast.Node{}, identifier} | ||||
|                 fetch := &ast.Identifier{ast.Node{}, $3.Value} | ||||
|                 $$ = &ast.ExprPropertyFetch{ast.Node{}, variable, fetch} | ||||
| @ -5392,7 +5378,6 @@ encaps_var: | ||||
|                 $$.GetNode().Position = position.NewTokensPosition($1, $3) | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).addDollarToken(variable) | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Var, $2.Hidden) | ||||
|                 yylex.(*Parser).setFreeFloating(fetch, token.Start, $3.Hidden) | ||||
| 
 | ||||
| @ -5519,7 +5504,7 @@ encaps_var_offset: | ||||
|             } | ||||
|     |   T_VARIABLE | ||||
|             { | ||||
|                 identifier := &ast.Identifier{ast.Node{}, bytes.TrimLeftFunc($1.Value, isDollar)} | ||||
|                 identifier := &ast.Identifier{ast.Node{}, $1.Value} | ||||
|                 $$ = &ast.ExprVariable{ast.Node{}, identifier} | ||||
| 
 | ||||
|                 // save position | ||||
| @ -5528,7 +5513,6 @@ encaps_var_offset: | ||||
| 
 | ||||
|                 // save comments | ||||
|                 yylex.(*Parser).setFreeFloating($$, token.Start, $1.Hidden) | ||||
|                 yylex.(*Parser).addDollarToken($$) | ||||
| 
 | ||||
|                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) | ||||
|             } | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,10 +1,11 @@ | ||||
| package printer | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/z7zmey/php-parser/pkg/ast" | ||||
| 	"github.com/z7zmey/php-parser/pkg/token" | ||||
| 	"io" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/z7zmey/php-parser/pkg/ast" | ||||
| 	"github.com/z7zmey/php-parser/pkg/token" | ||||
| ) | ||||
| 
 | ||||
| type printerState int | ||||
| @ -1860,7 +1861,7 @@ func (p *Printer) printExprVariable(n ast.Vertex) { | ||||
| 	p.printFreeFloating(nn, token.Start) | ||||
| 
 | ||||
| 	p.printFreeFloating(nn, token.Dollar) | ||||
| 	if nn.GetNode().Tokens.IsEmpty() { | ||||
| 	if _, ok := nn.VarName.(*ast.Identifier); !ok { | ||||
| 		io.WriteString(p.w, "$") | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -1084,7 +1084,7 @@ func TestParseAndPrintPhp5Shebang(t *testing.T) { | ||||
| 	<?php | ||||
| 	$a;?>test<? ` | ||||
| 
 | ||||
| 	actual := print(parse(src)) | ||||
| 	actual := printPhp5(parsePhp5(src)) | ||||
| 
 | ||||
| 	if src != actual { | ||||
| 		t.Errorf("\nexpected: %s\ngot: %s\n", src, actual) | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user