scanner.NewToken returns pointer, and scanner.Token saves position as position.Position
This commit is contained in:
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/z7zmey/php-parser/scanner"
|
||||
)
|
||||
|
||||
func (lval *yySymType) Token(t scanner.Token) {
|
||||
func (lval *yySymType) Token(t *scanner.Token) {
|
||||
lval.token = t
|
||||
}
|
||||
|
||||
@@ -45,12 +45,12 @@ func NewParser(src io.Reader, path string) *Parser {
|
||||
// Lex proxy to lexer Lex
|
||||
func (l *Parser) Lex(lval *yySymType) int {
|
||||
t := l.Lexer.Lex(lval)
|
||||
l.lastToken = &lval.token
|
||||
l.lastToken = lval.token
|
||||
return t
|
||||
}
|
||||
|
||||
func (l *Parser) Error(msg string) {
|
||||
l.errors = append(l.errors, errors.NewError(msg, *l.lastToken))
|
||||
l.errors = append(l.errors, errors.NewError(msg, l.lastToken))
|
||||
}
|
||||
|
||||
// Parse the php7 Parser entrypoint
|
||||
|
||||
19
php7/php7.go
19
php7/php7.go
@@ -23,7 +23,7 @@ import (
|
||||
type yySymType struct {
|
||||
yys int
|
||||
node node.Node
|
||||
token scanner.Token
|
||||
token *scanner.Token
|
||||
boolWithToken boolWithToken
|
||||
list []node.Node
|
||||
foreachVariable foreachVariable
|
||||
@@ -345,6 +345,7 @@ const yyErrCode = 2
|
||||
const yyInitialStackSize = 16
|
||||
|
||||
//line php7/php7.y:2635
|
||||
|
||||
type foreachVariable struct {
|
||||
node node.Node
|
||||
byRef bool
|
||||
@@ -352,7 +353,7 @@ type foreachVariable struct {
|
||||
|
||||
type nodesWithEndToken struct {
|
||||
nodes []node.Node
|
||||
endToken scanner.Token
|
||||
endToken *scanner.Token
|
||||
}
|
||||
|
||||
type boolWithToken struct {
|
||||
@@ -3242,7 +3243,7 @@ yydefault:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php7/php7.y:764
|
||||
{
|
||||
yyVAL.boolWithToken = boolWithToken{true, &yyDollar[1].token}
|
||||
yyVAL.boolWithToken = boolWithToken{true, yyDollar[1].token}
|
||||
}
|
||||
case 167:
|
||||
yyDollar = yyS[yypt-0 : yypt+1]
|
||||
@@ -3254,7 +3255,7 @@ yydefault:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php7/php7.y:769
|
||||
{
|
||||
yyVAL.boolWithToken = boolWithToken{true, &yyDollar[1].token}
|
||||
yyVAL.boolWithToken = boolWithToken{true, yyDollar[1].token}
|
||||
}
|
||||
case 169:
|
||||
yyDollar = yyS[yypt-9 : yypt+1]
|
||||
@@ -3623,11 +3624,11 @@ yydefault:
|
||||
yylex.(*Parser).comments.AddComments(yyVAL.node, yylex.(*Parser).comments[yyDollar[1].node])
|
||||
} else if yyDollar[2].boolWithToken.value == true {
|
||||
yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value)
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokensPosition(*yyDollar[2].boolWithToken.token, yyDollar[4].token))
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[2].boolWithToken.token, yyDollar[4].token))
|
||||
yylex.(*Parser).comments.AddComments(yyVAL.node, yyDollar[2].boolWithToken.token.Comments())
|
||||
} else if yyDollar[3].boolWithToken.value == true {
|
||||
yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value)
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokensPosition(*yyDollar[3].boolWithToken.token, yyDollar[4].token))
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[3].boolWithToken.token, yyDollar[4].token))
|
||||
yylex.(*Parser).comments.AddComments(yyVAL.node, yyDollar[3].boolWithToken.token.Comments())
|
||||
} else {
|
||||
yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value)
|
||||
@@ -3653,11 +3654,11 @@ yydefault:
|
||||
yylex.(*Parser).comments.AddComments(yyVAL.node, yylex.(*Parser).comments[yyDollar[1].node])
|
||||
} else if yyDollar[2].boolWithToken.value == true {
|
||||
yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value)
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokenNodePosition(*yyDollar[2].boolWithToken.token, yyDollar[6].node))
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[2].boolWithToken.token, yyDollar[6].node))
|
||||
yylex.(*Parser).comments.AddComments(yyVAL.node, yyDollar[2].boolWithToken.token.Comments())
|
||||
} else if yyDollar[3].boolWithToken.value == true {
|
||||
yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value)
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokenNodePosition(*yyDollar[3].boolWithToken.token, yyDollar[6].node))
|
||||
yylex.(*Parser).positions.AddPosition(yyVAL.node, yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[3].boolWithToken.token, yyDollar[6].node))
|
||||
yylex.(*Parser).comments.AddComments(yyVAL.node, yyDollar[3].boolWithToken.token.Comments())
|
||||
} else {
|
||||
yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value)
|
||||
@@ -4893,7 +4894,7 @@ yydefault:
|
||||
yyDollar = yyS[yypt-1 : yypt+1]
|
||||
//line php7/php7.y:1963
|
||||
{
|
||||
yyVAL.boolWithToken = boolWithToken{true, &yyDollar[1].token}
|
||||
yyVAL.boolWithToken = boolWithToken{true, yyDollar[1].token}
|
||||
}
|
||||
case 374:
|
||||
yyDollar = yyS[yypt-0 : yypt+1]
|
||||
|
||||
18
php7/php7.y
18
php7/php7.y
@@ -20,7 +20,7 @@ import (
|
||||
|
||||
%union{
|
||||
node node.Node
|
||||
token scanner.Token
|
||||
token *scanner.Token
|
||||
boolWithToken boolWithToken
|
||||
list []node.Node
|
||||
foreachVariable foreachVariable
|
||||
@@ -761,12 +761,12 @@ function_declaration_statement:
|
||||
|
||||
is_reference:
|
||||
/* empty */ { $$ = boolWithToken{false, nil} }
|
||||
| '&' { $$ = boolWithToken{true, &$1} }
|
||||
| '&' { $$ = boolWithToken{true, $1} }
|
||||
;
|
||||
|
||||
is_variadic:
|
||||
/* empty */ { $$ = boolWithToken{false, nil} }
|
||||
| T_ELLIPSIS { $$ = boolWithToken{true, &$1} }
|
||||
| T_ELLIPSIS { $$ = boolWithToken{true, $1} }
|
||||
;
|
||||
|
||||
class_declaration_statement:
|
||||
@@ -1044,11 +1044,11 @@ parameter:
|
||||
yylex.(*Parser).comments.AddComments($$, yylex.(*Parser).comments[$1])
|
||||
} else if $2.value == true {
|
||||
$$ = node.NewParameter($1, variable, nil, $2.value, $3.value)
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition(*$2.token, $4))
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition($2.token, $4))
|
||||
yylex.(*Parser).comments.AddComments($$, $2.token.Comments())
|
||||
} else if $3.value == true {
|
||||
$$ = node.NewParameter($1, variable, nil, $2.value, $3.value)
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition(*$3.token, $4))
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokensPosition($3.token, $4))
|
||||
yylex.(*Parser).comments.AddComments($$, $3.token.Comments())
|
||||
} else {
|
||||
$$ = node.NewParameter($1, variable, nil, $2.value, $3.value)
|
||||
@@ -1072,11 +1072,11 @@ parameter:
|
||||
yylex.(*Parser).comments.AddComments($$, yylex.(*Parser).comments[$1])
|
||||
} else if $2.value == true {
|
||||
$$ = node.NewParameter($1, variable, $6, $2.value, $3.value)
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokenNodePosition(*$2.token, $6))
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokenNodePosition($2.token, $6))
|
||||
yylex.(*Parser).comments.AddComments($$, $2.token.Comments())
|
||||
} else if $3.value == true {
|
||||
$$ = node.NewParameter($1, variable, $6, $2.value, $3.value)
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokenNodePosition(*$3.token, $6))
|
||||
yylex.(*Parser).positions.AddPosition($$, yylex.(*Parser).positionBuilder.NewTokenNodePosition($3.token, $6))
|
||||
yylex.(*Parser).comments.AddComments($$, $3.token.Comments())
|
||||
} else {
|
||||
$$ = node.NewParameter($1, variable, $6, $2.value, $3.value)
|
||||
@@ -1960,7 +1960,7 @@ backup_doc_comment:
|
||||
|
||||
returns_ref:
|
||||
/* empty */ { $$ = boolWithToken{false, nil} }
|
||||
| '&' { $$ = boolWithToken{true, &$1} }
|
||||
| '&' { $$ = boolWithToken{true, $1} }
|
||||
;
|
||||
|
||||
lexical_vars:
|
||||
@@ -2641,7 +2641,7 @@ type foreachVariable struct {
|
||||
|
||||
type nodesWithEndToken struct {
|
||||
nodes []node.Node
|
||||
endToken scanner.Token
|
||||
endToken *scanner.Token
|
||||
}
|
||||
|
||||
type boolWithToken struct {
|
||||
|
||||
Reference in New Issue
Block a user