[refactoring] remove *FreeFloating* functions
This commit is contained in:
		
							parent
							
								
									af968a7c3b
								
							
						
					
					
						commit
						94897d8c66
					
				@ -1,8 +1,6 @@
 | 
			
		||||
package php5
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
 | 
			
		||||
	"github.com/z7zmey/php-parser/internal/scanner"
 | 
			
		||||
	"github.com/z7zmey/php-parser/pkg/ast"
 | 
			
		||||
	"github.com/z7zmey/php-parser/pkg/errors"
 | 
			
		||||
@ -62,110 +60,3 @@ func lastNode(nn []ast.Vertex) ast.Vertex {
 | 
			
		||||
	}
 | 
			
		||||
	return nn[len(nn)-1]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) MoveFreeFloating(src ast.Vertex, dst ast.Vertex) {
 | 
			
		||||
	if _, ok := src.GetNode().Tokens[token.Start]; !ok {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if src.GetNode().Tokens == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	(*dstCollection)[token.Start] = src.GetNode().Tokens[token.Start]
 | 
			
		||||
	delete(src.GetNode().Tokens, token.Start)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) setFreeFloating(dst ast.Vertex, pos token.Position, tokens []*token.Token) {
 | 
			
		||||
	if len(tokens) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	l := len(tokens)
 | 
			
		||||
	for _, v := range tokens[0 : l-1] {
 | 
			
		||||
		(*dstCollection)[pos] = append((*dstCollection)[pos], v)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) setFreeFloatingTokens(dst ast.Vertex, pos token.Position, tokens []*token.Token) {
 | 
			
		||||
	if len(tokens) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	(*dstCollection)[pos] = make([]*token.Token, 0)
 | 
			
		||||
 | 
			
		||||
	for _, v := range tokens {
 | 
			
		||||
		(*dstCollection)[pos] = append((*dstCollection)[pos], v)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) setToken(dst ast.Vertex, pos token.Position, tokens []*token.Token) {
 | 
			
		||||
	if len(tokens) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	l := len(tokens)
 | 
			
		||||
	(*dstCollection)[pos] = append((*dstCollection)[pos], tokens[l-1])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast.Vertex) {
 | 
			
		||||
	if _, ok := prevNode.GetNode().Tokens[token.SemiColon]; !ok {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	semiColon := prevNode.GetNode().Tokens[token.SemiColon]
 | 
			
		||||
	delete(prevNode.GetNode().Tokens, token.SemiColon)
 | 
			
		||||
	if len(semiColon) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if semiColon[0].Value[0] == ';' {
 | 
			
		||||
		p.setFreeFloatingTokens(prevNode, token.SemiColon, []*token.Token{
 | 
			
		||||
			{
 | 
			
		||||
				ID:    token.ID(';'),
 | 
			
		||||
				Value: semiColon[0].Value[0:1],
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	vlen := len(semiColon[0].Value)
 | 
			
		||||
	tlen := 2
 | 
			
		||||
	if bytes.HasSuffix(semiColon[0].Value, []byte("?>\n")) {
 | 
			
		||||
		tlen = 3
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	phpCloseTag := []*token.Token{}
 | 
			
		||||
	if vlen-tlen > 1 {
 | 
			
		||||
		phpCloseTag = append(phpCloseTag, &token.Token{
 | 
			
		||||
			ID:    token.T_WHITESPACE,
 | 
			
		||||
			Value: semiColon[0].Value[1 : vlen-tlen],
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	phpCloseTag = append(phpCloseTag, &token.Token{
 | 
			
		||||
		ID:    T_CLOSE_TAG,
 | 
			
		||||
		Value: semiColon[0].Value[vlen-tlen:],
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	p.setFreeFloatingTokens(htmlNode, token.Start, append(phpCloseTag, htmlNode.GetNode().Tokens[token.Start]...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1129
									
								
								internal/php5/php5.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1129
									
								
								internal/php5/php5.go
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -280,11 +280,6 @@ start:
 | 
			
		||||
top_statement_list:
 | 
			
		||||
        top_statement_list top_statement
 | 
			
		||||
            {
 | 
			
		||||
                if inlineHtmlNode, ok := $2.(*ast.StmtInlineHtml); ok && len($1) > 0 {
 | 
			
		||||
                    prevNode := lastNode($1)
 | 
			
		||||
                    yylex.(*Parser).splitSemiColonAndPhpCloseTag(inlineHtmlNode, prevNode)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if $2 != nil {
 | 
			
		||||
                    $$ = append($1, $2)
 | 
			
		||||
                }
 | 
			
		||||
@ -744,8 +739,6 @@ constant_declaration:
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                $$ = $1
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating(lastNode($$.(*ast.StmtConstList).Consts).(*ast.StmtConstant).Name, token.Start, $3.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
    |   T_CONST T_STRING '=' static_scalar
 | 
			
		||||
            {
 | 
			
		||||
@ -771,19 +764,12 @@ constant_declaration:
 | 
			
		||||
                        },
 | 
			
		||||
                    },
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating(lastNode($$.(*ast.StmtConstList).Consts).(*ast.StmtConstant).Name, token.Start, $2.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
inner_statement_list:
 | 
			
		||||
        inner_statement_list inner_statement
 | 
			
		||||
            {
 | 
			
		||||
                if inlineHtmlNode, ok := $2.(*ast.StmtInlineHtml); ok && len($1) > 0 {
 | 
			
		||||
                    prevNode := lastNode($1)
 | 
			
		||||
                    yylex.(*Parser).splitSemiColonAndPhpCloseTag(inlineHtmlNode, prevNode)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if $2 != nil {
 | 
			
		||||
                    $$ = append($1, $2)
 | 
			
		||||
                }
 | 
			
		||||
@ -1752,8 +1738,6 @@ declare_list:
 | 
			
		||||
                        },
 | 
			
		||||
                    },
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating(lastNode($$.(*ast.ParserSeparatedList).Items).(*ast.StmtConstant).Name, token.Start, $1.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
    |   declare_list ',' T_STRING '=' static_scalar
 | 
			
		||||
            {
 | 
			
		||||
@ -1777,8 +1761,6 @@ declare_list:
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
                $$ = $1
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating(lastNode($$.(*ast.ParserSeparatedList).Items).(*ast.StmtConstant).Name, token.Start, $3.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
@ -2923,8 +2905,6 @@ class_constant_declaration:
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
                $$ = $1
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating(lastNode($$.(*ast.StmtClassConstList).Consts).(*ast.StmtConstant).Name, token.Start, $3.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
    |   T_CONST T_STRING '=' static_scalar
 | 
			
		||||
            {
 | 
			
		||||
@ -2950,8 +2930,6 @@ class_constant_declaration:
 | 
			
		||||
                        },
 | 
			
		||||
                    },
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating(lastNode($$.(*ast.StmtClassConstList).Consts).(*ast.StmtConstant).Name, token.Start, $2.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
@ -3624,7 +3602,6 @@ expr_without_variable:
 | 
			
		||||
                    OpTkn: $2,
 | 
			
		||||
                    Right: $3,
 | 
			
		||||
                }
 | 
			
		||||
                yylex.(*Parser).setToken($$, token.Equal, $2.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
    |   expr '<' expr
 | 
			
		||||
            {
 | 
			
		||||
@ -4416,13 +4393,11 @@ dynamic_class_name_reference:
 | 
			
		||||
                            nn.Var = $$
 | 
			
		||||
                            $$.GetNode().Position = position.NewNodesPosition($$, nn)
 | 
			
		||||
                            $$ = nn
 | 
			
		||||
                            yylex.(*Parser).MoveFreeFloating(nn.Var, $$)
 | 
			
		||||
 | 
			
		||||
                        case *ast.ExprPropertyFetch:
 | 
			
		||||
                            nn.Var = $$
 | 
			
		||||
                            $$.GetNode().Position = position.NewNodesPosition($$, nn)
 | 
			
		||||
                            $$ = nn
 | 
			
		||||
                            yylex.(*Parser).MoveFreeFloating(nn.Var, $$)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
@ -4432,13 +4407,11 @@ dynamic_class_name_reference:
 | 
			
		||||
                            nn.Var = $$
 | 
			
		||||
                            $$.GetNode().Position = position.NewNodesPosition($$, nn)
 | 
			
		||||
                            $$ = nn
 | 
			
		||||
                            yylex.(*Parser).MoveFreeFloating(nn.Var, $$)
 | 
			
		||||
 | 
			
		||||
                        case *ast.ExprPropertyFetch:
 | 
			
		||||
                            nn.Var = $$
 | 
			
		||||
                            $$.GetNode().Position = position.NewNodesPosition($$, nn)
 | 
			
		||||
                            $$ = nn
 | 
			
		||||
                            yylex.(*Parser).MoveFreeFloating(nn.Var, $$)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@ -5046,7 +5019,6 @@ static_operation:
 | 
			
		||||
                    OpTkn: $2,
 | 
			
		||||
                    Right: $3,
 | 
			
		||||
                }
 | 
			
		||||
                yylex.(*Parser).setToken($$, token.Equal, $2.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
    |   static_scalar_value '<' static_scalar_value
 | 
			
		||||
            {
 | 
			
		||||
@ -6333,12 +6305,6 @@ encaps_var_offset:
 | 
			
		||||
                        Value:     $1.Value,
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                // save position
 | 
			
		||||
                $$.GetNode().Position = position.NewTokenPosition($1)
 | 
			
		||||
 | 
			
		||||
                // save comments
 | 
			
		||||
                yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
    |   T_VARIABLE
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,6 @@
 | 
			
		||||
package php7
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
 | 
			
		||||
	"github.com/z7zmey/php-parser/internal/scanner"
 | 
			
		||||
	"github.com/z7zmey/php-parser/pkg/ast"
 | 
			
		||||
	"github.com/z7zmey/php-parser/pkg/errors"
 | 
			
		||||
@ -62,110 +60,3 @@ func lastNode(nn []ast.Vertex) ast.Vertex {
 | 
			
		||||
	}
 | 
			
		||||
	return nn[len(nn)-1]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) MoveFreeFloating(src ast.Vertex, dst ast.Vertex) {
 | 
			
		||||
	if _, ok := src.GetNode().Tokens[token.Start]; !ok {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if src.GetNode().Tokens == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	(*dstCollection)[token.Start] = src.GetNode().Tokens[token.Start]
 | 
			
		||||
	delete(src.GetNode().Tokens, token.Start)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) setFreeFloating(dst ast.Vertex, pos token.Position, tokens []*token.Token) {
 | 
			
		||||
	if len(tokens) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	l := len(tokens)
 | 
			
		||||
	for _, v := range tokens[0 : l-1] {
 | 
			
		||||
		(*dstCollection)[pos] = append((*dstCollection)[pos], v)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) setFreeFloatingTokens(dst ast.Vertex, pos token.Position, tokens []*token.Token) {
 | 
			
		||||
	if len(tokens) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	(*dstCollection)[pos] = make([]*token.Token, 0)
 | 
			
		||||
 | 
			
		||||
	for _, v := range tokens {
 | 
			
		||||
		(*dstCollection)[pos] = append((*dstCollection)[pos], v)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) setToken(dst ast.Vertex, pos token.Position, tokens []*token.Token) {
 | 
			
		||||
	if len(tokens) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	dstCollection := &dst.GetNode().Tokens
 | 
			
		||||
	if *dstCollection == nil {
 | 
			
		||||
		*dstCollection = make(token.Collection)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	l := len(tokens)
 | 
			
		||||
	(*dstCollection)[pos] = append((*dstCollection)[pos], tokens[l-1])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) splitSemiColonAndPhpCloseTag(htmlNode ast.Vertex, prevNode ast.Vertex) {
 | 
			
		||||
	if _, ok := prevNode.GetNode().Tokens[token.SemiColon]; !ok {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	semiColon := prevNode.GetNode().Tokens[token.SemiColon]
 | 
			
		||||
	delete(prevNode.GetNode().Tokens, token.SemiColon)
 | 
			
		||||
	if len(semiColon) == 0 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if semiColon[0].Value[0] == ';' {
 | 
			
		||||
		p.setFreeFloatingTokens(prevNode, token.SemiColon, []*token.Token{
 | 
			
		||||
			{
 | 
			
		||||
				ID:    token.ID(';'),
 | 
			
		||||
				Value: semiColon[0].Value[0:1],
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	vlen := len(semiColon[0].Value)
 | 
			
		||||
	tlen := 2
 | 
			
		||||
	if bytes.HasSuffix(semiColon[0].Value, []byte("?>\n")) {
 | 
			
		||||
		tlen = 3
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	phpCloseTag := []*token.Token{}
 | 
			
		||||
	if vlen-tlen > 1 {
 | 
			
		||||
		phpCloseTag = append(phpCloseTag, &token.Token{
 | 
			
		||||
			ID:    token.T_WHITESPACE,
 | 
			
		||||
			Value: semiColon[0].Value[1 : vlen-tlen],
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	phpCloseTag = append(phpCloseTag, &token.Token{
 | 
			
		||||
		ID:    T_CLOSE_TAG,
 | 
			
		||||
		Value: semiColon[0].Value[vlen-tlen:],
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	p.setFreeFloatingTokens(htmlNode, token.Start, append(phpCloseTag, htmlNode.GetNode().Tokens[token.Start]...))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										928
									
								
								internal/php7/php7.go
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										928
									
								
								internal/php7/php7.go
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -329,11 +329,6 @@ identifier:
 | 
			
		||||
top_statement_list:
 | 
			
		||||
        top_statement_list top_statement
 | 
			
		||||
            {
 | 
			
		||||
                if inlineHtmlNode, ok := $2.(*ast.StmtInlineHtml); ok && len($1) > 0 {
 | 
			
		||||
                    prevNode := lastNode($1)
 | 
			
		||||
                    yylex.(*Parser).splitSemiColonAndPhpCloseTag(inlineHtmlNode, prevNode)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if $2 != nil {
 | 
			
		||||
                    $$ = append($1, $2)
 | 
			
		||||
                }
 | 
			
		||||
@ -796,11 +791,6 @@ const_list:
 | 
			
		||||
inner_statement_list:
 | 
			
		||||
        inner_statement_list inner_statement
 | 
			
		||||
            {
 | 
			
		||||
                if inlineHtmlNode, ok := $2.(*ast.StmtInlineHtml); ok && len($1) > 0 {
 | 
			
		||||
                    prevNode := lastNode($1)
 | 
			
		||||
                    yylex.(*Parser).splitSemiColonAndPhpCloseTag(inlineHtmlNode, prevNode)
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if $2 != nil {
 | 
			
		||||
                    $$ = append($1, $2)
 | 
			
		||||
                }
 | 
			
		||||
@ -2633,8 +2623,6 @@ class_const_decl:
 | 
			
		||||
                    EqualTkn: $2,
 | 
			
		||||
                    Expr:     $3,
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating($$.(*ast.StmtConstant).Name, token.Start, $1.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
@ -2655,8 +2643,6 @@ const_decl:
 | 
			
		||||
                    EqualTkn: $2,
 | 
			
		||||
                    Expr:     $3,
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                yylex.(*Parser).setFreeFloating($$.(*ast.StmtConstant).Name, token.Start, $1.SkippedTokens)
 | 
			
		||||
            }
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user