[refactoring] update ast structure of "MagicConstant" and "String" nodes

This commit is contained in:
Vadym Slizov 2020-11-20 23:53:58 +02:00
parent e6a23dfa3a
commit 3bda40e8ce
No known key found for this signature in database
GPG Key ID: AEA2A9388EF42A4A
5 changed files with 1374 additions and 1349 deletions

590
internal/php5/php5.go generated

File diff suppressed because it is too large Load Diff

View File

@ -4020,15 +4020,19 @@ combined_scalar_offset:
}
| T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']'
{
str := &ast.ScalarString{ast.Node{}, $1.Value}
str := &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
StringTkn: $1,
Value: $1.Value,
}
$$ = &ast.ExprArrayDimFetch{ast.Node{}, str, $3}
// save position
str.GetNode().Position = position.NewTokenPosition($1)
$$.GetNode().Position = position.NewNodeTokenPosition(str, $4)
// save comments
yylex.(*Parser).setFreeFloating(str, token.Start, $1.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens($$, token.Var, $2.SkippedTokens)
yylex.(*Parser).setFreeFloatingTokens($$, token.Expr, $4.SkippedTokens)
}
@ -4517,83 +4521,83 @@ common_scalar:
}
| T_CONSTANT_ENCAPSED_STRING
{
$$ = &ast.ScalarString{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
StringTkn: $1,
Value: $1.Value,
}
}
| T_LINE
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_FILE
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_DIR
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_TRAIT_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_METHOD_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_FUNC_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_NS_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
{
@ -4734,13 +4738,13 @@ static_scalar_value:
}
| T_CLASS_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| static_operation
{
@ -5213,13 +5217,13 @@ scalar:
}
| T_CLASS_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
;
@ -6151,13 +6155,13 @@ encaps_var:
encaps_var_offset:
T_STRING
{
$$ = &ast.ScalarString{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
StringTkn: $1,
Value: $1.Value,
}
}
| T_NUM_STRING
{
@ -6171,7 +6175,13 @@ encaps_var_offset:
Value: $1.Value,
}
} else {
$$ = &ast.ScalarString{ast.Node{}, $1.Value}
$$ = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
StringTkn: $1,
Value: $1.Value,
}
}
// save position

197
internal/php7/php7.go generated
View File

@ -347,7 +347,7 @@ const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16
// line internal/php7/php7.y:4988
// line internal/php7/php7.y:4989
// line yacctab:1
var yyExca = [...]int{
@ -6541,13 +6541,13 @@ yydefault:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3933
{
yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
StringTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 402:
yyDollar = yyS[yypt-1 : yypt+1]
@ -6577,97 +6577,97 @@ yydefault:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3966
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 405:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3976
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 406:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3986
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 407:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:3996
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 408:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4006
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 409:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4016
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 410:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4026
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 411:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4036
{
yyVAL.node = &ast.ScalarMagicConstant{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
MagicConstTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 412:
yyDollar = yyS[yypt-3 : yypt+1]
@ -7497,13 +7497,13 @@ yydefault:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4792
{
yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
yyVAL.node = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
StringTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
case 482:
yyDollar = yyS[yypt-1 : yypt+1]
@ -7519,14 +7519,14 @@ yydefault:
Value: yyDollar[1].token.Value,
}
} else {
yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[1].token.Value}
yyVAL.node = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition(yyDollar[1].token),
},
StringTkn: yyDollar[1].token,
Value: yyDollar[1].token.Value,
}
}
// save position
yyVAL.node.GetNode().Position = position.NewTokenPosition(yyDollar[1].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
}
case 483:
yyDollar = yyS[yypt-2 : yypt+1]
@ -7544,20 +7544,21 @@ yydefault:
Value: yyDollar[2].token.Value,
}
yyVAL.node = &ast.ExprUnaryMinus{ast.Node{}, lnumber}
} else {
yyDollar[2].token.Value = append([]byte("-"), yyDollar[2].token.Value...)
yyVAL.node = &ast.ScalarString{ast.Node{}, yyDollar[2].token.Value}
}
// save position
yyVAL.node.GetNode().Position = position.NewTokensPosition(yyDollar[1].token, yyDollar[2].token)
// save comments
yylex.(*Parser).setFreeFloating(yyVAL.node, token.Start, yyDollar[1].token.SkippedTokens)
} else {
yyVAL.node = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokensPosition(yyDollar[1].token, yyDollar[2].token),
},
MinusTkn: yyDollar[1].token,
StringTkn: yyDollar[2].token,
Value: append([]byte("-"), yyDollar[2].token.Value...),
}
}
}
case 484:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4848
// line internal/php7/php7.y:4849
{
identifier := &ast.Identifier{
Node: ast.Node{
@ -7576,7 +7577,7 @@ yydefault:
}
case 485:
yyDollar = yyS[yypt-5 : yypt+1]
// line internal/php7/php7.y:4868
// line internal/php7/php7.y:4869
{
yyVAL.node = &ast.ExprIsset{ast.Node{}, yyDollar[3].list}
@ -7594,7 +7595,7 @@ yydefault:
}
case 486:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4884
// line internal/php7/php7.y:4885
{
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
@ -7616,7 +7617,7 @@ yydefault:
}
case 487:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4904
// line internal/php7/php7.y:4905
{
yyVAL.node = &ast.ExprInclude{ast.Node{}, yyDollar[2].node}
@ -7628,7 +7629,7 @@ yydefault:
}
case 488:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4914
// line internal/php7/php7.y:4915
{
yyVAL.node = &ast.ExprIncludeOnce{ast.Node{}, yyDollar[2].node}
@ -7640,7 +7641,7 @@ yydefault:
}
case 489:
yyDollar = yyS[yypt-4 : yypt+1]
// line internal/php7/php7.y:4924
// line internal/php7/php7.y:4925
{
exprBrackets := &ast.ParserBrackets{
Node: ast.Node{
@ -7662,7 +7663,7 @@ yydefault:
}
case 490:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4944
// line internal/php7/php7.y:4945
{
yyVAL.node = &ast.ExprRequire{ast.Node{}, yyDollar[2].node}
@ -7674,7 +7675,7 @@ yydefault:
}
case 491:
yyDollar = yyS[yypt-2 : yypt+1]
// line internal/php7/php7.y:4954
// line internal/php7/php7.y:4955
{
yyVAL.node = &ast.ExprRequireOnce{ast.Node{}, yyDollar[2].node}
@ -7686,13 +7687,13 @@ yydefault:
}
case 492:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4967
// line internal/php7/php7.y:4968
{
yyVAL.list = []ast.Vertex{yyDollar[1].node}
}
case 493:
yyDollar = yyS[yypt-3 : yypt+1]
// line internal/php7/php7.y:4971
// line internal/php7/php7.y:4972
{
yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
@ -7701,7 +7702,7 @@ yydefault:
}
case 494:
yyDollar = yyS[yypt-1 : yypt+1]
// line internal/php7/php7.y:4981
// line internal/php7/php7.y:4982
{
yyVAL.node = yyDollar[1].node
}

View File

@ -3931,13 +3931,13 @@ dereferencable_scalar:
}
| T_CONSTANT_ENCAPSED_STRING
{
$$ = &ast.ScalarString{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
StringTkn: $1,
Value: $1.Value,
}
}
;
@ -3964,83 +3964,83 @@ scalar:
}
| T_LINE
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_FILE
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_DIR
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_TRAIT_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_METHOD_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_FUNC_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_NS_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_CLASS_C
{
$$ = &ast.ScalarMagicConstant{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarMagicConstant{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
MagicConstTkn: $1,
Value: $1.Value,
}
}
| T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
{
@ -4790,13 +4790,13 @@ encaps_var:
encaps_var_offset:
T_STRING
{
$$ = &ast.ScalarString{ast.Node{}, $1.Value}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
$$ = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
StringTkn: $1,
Value: $1.Value,
}
}
| T_NUM_STRING
{
@ -4810,14 +4810,14 @@ encaps_var_offset:
Value: $1.Value,
}
} else {
$$ = &ast.ScalarString{ast.Node{}, $1.Value}
$$ = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokenPosition($1),
},
StringTkn: $1,
Value: $1.Value,
}
}
// save position
$$.GetNode().Position = position.NewTokenPosition($1)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
}
| '-' T_NUM_STRING
{
@ -4833,16 +4833,17 @@ encaps_var_offset:
Value: $2.Value,
}
$$ = &ast.ExprUnaryMinus{ast.Node{}, lnumber}
} else {
$2.Value = append([]byte("-"), $2.Value...)
$$ = &ast.ScalarString{ast.Node{}, $2.Value}
}
// save position
$$.GetNode().Position = position.NewTokensPosition($1, $2)
// save comments
yylex.(*Parser).setFreeFloating($$, token.Start, $1.SkippedTokens)
} else {
$$ = &ast.ScalarString{
Node: ast.Node{
Position: position.NewTokensPosition($1, $2),
},
MinusTkn: $1,
StringTkn: $2,
Value: append([]byte("-"), $2.Value...),
}
}
}
| T_VARIABLE
{

View File

@ -172,6 +172,7 @@ func (n *ScalarLnumber) Accept(v NodeVisitor) {
// ScalarMagicConstant node
type ScalarMagicConstant struct {
Node
MagicConstTkn *token.Token
Value []byte
}
@ -182,6 +183,8 @@ func (n *ScalarMagicConstant) Accept(v NodeVisitor) {
// ScalarString node
type ScalarString struct {
Node
MinusTkn *token.Token
StringTkn *token.Token
Value []byte
}