From 4abd14d2a6bc158cbe591e261005b1f808dd745f Mon Sep 17 00:00:00 2001 From: z7zmey Date: Mon, 31 Dec 2018 18:27:46 +0200 Subject: [PATCH] #70: [php7] inherit meta.Data at expr.FunctionCall, expr.StaticCall, expr.ConstFetch, expr.ArrayDimFetch, expr.MethodCall, expr.PropertyFetch, expr.StaticPropertyFetch, expr.ArrayItem --- php7/php7.go | 332 ++++++++++++++++------------- php7/php7.y | 86 ++++++-- visitor/dumper_test.go | 4 +- visitor/go_dumper_test.go | 26 +-- visitor/json_dumper_test.go | 2 +- visitor/pretty_json_dumper_test.go | 14 +- 6 files changed, 274 insertions(+), 190 deletions(-) diff --git a/php7/php7.go b/php7/php7.go index a9c5f79..5c73743 100644 --- a/php7/php7.go +++ b/php7/php7.go @@ -346,7 +346,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line php7/php7.y:5610 +//line php7/php7.y:5652 //line yacctab:1 var yyExca = [...]int{ @@ -6861,11 +6861,14 @@ yydefault: // save position yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node)) + // save comments + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 381: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4296 + //line php7/php7.y:4299 { yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*node.ArgumentList)) @@ -6874,12 +6877,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 382: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4308 + //line php7/php7.y:4312 { yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*node.ArgumentList)) @@ -6888,23 +6892,25 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 383: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:4320 + //line php7/php7.y:4325 { yyVAL.node = expr.NewFunctionCall(yyDollar[1].node, yyDollar[2].node.(*node.ArgumentList)) // save position yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition(yyDollar[1].node, yyDollar[2].node)) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 384: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4332 + //line php7/php7.y:4338 { yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value) @@ -6918,7 +6924,7 @@ yydefault: } case 385: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4344 + //line php7/php7.y:4350 { yyVAL.node = yyDollar[1].node @@ -6926,7 +6932,7 @@ yydefault: } case 386: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4353 + //line php7/php7.y:4359 { yyVAL.node = yyDollar[1].node @@ -6934,7 +6940,7 @@ yydefault: } case 387: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4359 + //line php7/php7.y:4365 { yyVAL.node = yyDollar[1].node @@ -6942,7 +6948,7 @@ yydefault: } case 388: yyDollar = yyS[yypt-0 : yypt+1] - //line php7/php7.y:4368 + //line php7/php7.y:4374 { yyVAL.node = nil @@ -6950,7 +6956,7 @@ yydefault: } case 389: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4374 + //line php7/php7.y:4380 { yyVAL.node = expr.NewExit(yyDollar[2].node) @@ -6958,8 +6964,8 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.OpenParenthesisToken).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[1].token, meta.OpenParenthesisToken) + yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[1].token, meta.OpenParenthesisToken) + yyDollar[1].token.Meta.SetTokenName(meta.OpenParenthesisToken).PrependTo(yyVAL.node.GetMeta()) yyDollar[3].token.Meta.SetTokenName(meta.CloseParenthesisToken).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[3].token, meta.CloseParenthesisToken) @@ -6967,7 +6973,7 @@ yydefault: } case 390: yyDollar = yyS[yypt-0 : yypt+1] - //line php7/php7.y:4392 + //line php7/php7.y:4398 { yyVAL.list = []node.Node{} @@ -6975,7 +6981,7 @@ yydefault: } case 391: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4398 + //line php7/php7.y:4404 { yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token.Value)} @@ -6983,7 +6989,7 @@ yydefault: } case 392: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4404 + //line php7/php7.y:4410 { yyVAL.list = yyDollar[1].list @@ -6991,7 +6997,7 @@ yydefault: } case 393: yyDollar = yyS[yypt-0 : yypt+1] - //line php7/php7.y:4413 + //line php7/php7.y:4419 { yyVAL.node = nil @@ -6999,7 +7005,7 @@ yydefault: } case 394: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4419 + //line php7/php7.y:4425 { yyVAL.node = yyDollar[1].node @@ -7007,7 +7013,7 @@ yydefault: } case 395: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4428 + //line php7/php7.y:4434 { yyVAL.node = expr.NewArray(yyDollar[3].list) @@ -7023,7 +7029,7 @@ yydefault: } case 396: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4442 + //line php7/php7.y:4448 { yyVAL.node = expr.NewShortArray(yyDollar[2].list) @@ -7038,7 +7044,7 @@ yydefault: } case 397: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4455 + //line php7/php7.y:4461 { yyVAL.node = scalar.NewString(yyDollar[1].token.Value) @@ -7052,7 +7058,7 @@ yydefault: } case 398: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4470 + //line php7/php7.y:4476 { yyVAL.node = scalar.NewLnumber(yyDollar[1].token.Value) @@ -7066,7 +7072,7 @@ yydefault: } case 399: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4482 + //line php7/php7.y:4488 { yyVAL.node = scalar.NewDnumber(yyDollar[1].token.Value) @@ -7080,7 +7086,7 @@ yydefault: } case 400: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4494 + //line php7/php7.y:4500 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7094,7 +7100,7 @@ yydefault: } case 401: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4506 + //line php7/php7.y:4512 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7108,7 +7114,7 @@ yydefault: } case 402: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4518 + //line php7/php7.y:4524 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7122,7 +7128,7 @@ yydefault: } case 403: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4530 + //line php7/php7.y:4536 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7136,7 +7142,7 @@ yydefault: } case 404: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4542 + //line php7/php7.y:4548 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7150,7 +7156,7 @@ yydefault: } case 405: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4554 + //line php7/php7.y:4560 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7164,7 +7170,7 @@ yydefault: } case 406: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4566 + //line php7/php7.y:4572 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7178,7 +7184,7 @@ yydefault: } case 407: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4578 + //line php7/php7.y:4584 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value) @@ -7192,7 +7198,7 @@ yydefault: } case 408: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4590 + //line php7/php7.y:4596 { encapsed := scalar.NewEncapsedStringPart(yyDollar[2].token.Value) yyVAL.node = scalar.NewHeredoc(yyDollar[1].token.Value, []node.Node{encapsed}) @@ -7208,7 +7214,7 @@ yydefault: } case 409: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:4604 + //line php7/php7.y:4610 { yyVAL.node = scalar.NewHeredoc(yyDollar[1].token.Value, nil) @@ -7222,7 +7228,7 @@ yydefault: } case 410: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4616 + //line php7/php7.y:4622 { yyVAL.node = scalar.NewEncapsed(yyDollar[2].list) @@ -7236,7 +7242,7 @@ yydefault: } case 411: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4628 + //line php7/php7.y:4634 { yyVAL.node = scalar.NewHeredoc(yyDollar[1].token.Value, yyDollar[2].list) @@ -7250,7 +7256,7 @@ yydefault: } case 412: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4640 + //line php7/php7.y:4646 { yyVAL.node = yyDollar[1].node @@ -7258,7 +7264,7 @@ yydefault: } case 413: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4646 + //line php7/php7.y:4652 { yyVAL.node = yyDollar[1].node @@ -7266,18 +7272,21 @@ yydefault: } case 414: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4655 + //line php7/php7.y:4661 { yyVAL.node = expr.NewConstFetch(yyDollar[1].node) // save position yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodePosition(yyDollar[1].node)) + // save comments + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 415: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4664 + //line php7/php7.y:4673 { target := node.NewIdentifier(yyDollar[3].token.Value) yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, target) @@ -7290,11 +7299,13 @@ yydefault: yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) yyDollar[3].token.Meta.SetTokenName(meta.NodeStart).AppendTo(target.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 416: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4679 + //line php7/php7.y:4690 { target := node.NewIdentifier(yyDollar[3].token.Value) yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, target) @@ -7307,11 +7318,13 @@ yydefault: yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) yyDollar[3].token.Meta.SetTokenName(meta.NodeStart).AppendTo(target.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 417: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4697 + //line php7/php7.y:4710 { yyVAL.node = yyDollar[1].node @@ -7319,7 +7332,7 @@ yydefault: } case 418: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4703 + //line php7/php7.y:4716 { yyVAL.node = yyDollar[1].node @@ -7327,7 +7340,7 @@ yydefault: } case 419: yyDollar = yyS[yypt-0 : yypt+1] - //line php7/php7.y:4712 + //line php7/php7.y:4725 { yyVAL.node = nil @@ -7335,7 +7348,7 @@ yydefault: } case 420: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4718 + //line php7/php7.y:4731 { yyVAL.node = yyDollar[1].node @@ -7343,7 +7356,7 @@ yydefault: } case 421: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4727 + //line php7/php7.y:4740 { yyVAL.node = yyDollar[1].node @@ -7351,7 +7364,7 @@ yydefault: } case 422: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4736 + //line php7/php7.y:4749 { yyVAL.node = yyDollar[1].node @@ -7359,7 +7372,7 @@ yydefault: } case 423: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4742 + //line php7/php7.y:4755 { yyVAL.node = yyDollar[2].node @@ -7373,7 +7386,7 @@ yydefault: } case 424: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4754 + //line php7/php7.y:4767 { yyVAL.node = yyDollar[1].node @@ -7381,7 +7394,7 @@ yydefault: } case 425: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4763 + //line php7/php7.y:4776 { yyVAL.node = yyDollar[1].node @@ -7389,13 +7402,13 @@ yydefault: } case 426: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4769 + //line php7/php7.y:4782 { yyVAL.node = yyDollar[2].node // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[1].token, meta.NodeStart) + yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[1].token, meta.NodeStart) + yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).PrependTo(yyVAL.node.GetMeta()) yyDollar[3].token.Meta.SetTokenName(meta.NodeEnd).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[3].token, meta.NodeEnd) @@ -7403,7 +7416,7 @@ yydefault: } case 427: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4781 + //line php7/php7.y:4794 { yyVAL.node = yyDollar[1].node @@ -7411,7 +7424,7 @@ yydefault: } case 428: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4790 + //line php7/php7.y:4803 { yyVAL.node = yyDollar[1].node @@ -7419,7 +7432,7 @@ yydefault: } case 429: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4796 + //line php7/php7.y:4809 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) @@ -7427,31 +7440,16 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) // save comments - yyDollar[2].token.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenSquareBracket) + yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenSquareBracket) + yyDollar[2].token.Meta.SetTokenName(meta.OpenSquareBracket).PrependTo(yyVAL.node.GetMeta()) yyDollar[4].token.Meta.SetTokenName(meta.CloseSquareBracket).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[4].token, meta.CloseSquareBracket) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 430: - yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4811 - { - yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) - - // save position - yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) - - // save comments - yyDollar[2].token.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenSquareBracket) - yyDollar[4].token.Meta.SetTokenName(meta.CloseSquareBracket).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[4].token, meta.CloseSquareBracket) - - yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) - } - case 431: yyDollar = yyS[yypt-4 : yypt+1] //line php7/php7.y:4826 { @@ -7461,16 +7459,37 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) // save comments - yyDollar[2].token.Meta.SetTokenName(meta.OpenCurlyBracesToken).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenCurlyBracesToken) + yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenSquareBracket) + yyDollar[2].token.Meta.SetTokenName(meta.OpenSquareBracket).PrependTo(yyVAL.node.GetMeta()) + yyDollar[4].token.Meta.SetTokenName(meta.CloseSquareBracket).AppendTo(yyVAL.node.GetMeta()) + yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[4].token, meta.CloseSquareBracket) + + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) + } + case 431: + yyDollar = yyS[yypt-4 : yypt+1] + //line php7/php7.y:4843 + { + yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) + + // save position + yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + + // save comments + yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenCurlyBracesToken) + yyDollar[2].token.Meta.SetTokenName(meta.OpenCurlyBracesToken).PrependTo(yyVAL.node.GetMeta()) yyDollar[4].token.Meta.SetTokenName(meta.CloseCurlyBracesToken).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[4].token, meta.CloseCurlyBracesToken) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 432: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4841 + //line php7/php7.y:4860 { yyVAL.node = expr.NewMethodCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(*node.ArgumentList)) @@ -7480,11 +7499,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 433: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4853 + //line php7/php7.y:4874 { yyVAL.node = yyDollar[1].node @@ -7492,7 +7513,7 @@ yydefault: } case 434: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4862 + //line php7/php7.y:4883 { yyVAL.node = yyDollar[1].node @@ -7500,7 +7521,7 @@ yydefault: } case 435: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4868 + //line php7/php7.y:4889 { yyVAL.node = yyDollar[1].node @@ -7508,7 +7529,7 @@ yydefault: } case 436: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4874 + //line php7/php7.y:4895 { yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node) @@ -7518,11 +7539,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 437: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4889 + //line php7/php7.y:4912 { name := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar)) yyVAL.node = expr.NewVariable(name) @@ -7539,7 +7562,7 @@ yydefault: } case 438: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4904 + //line php7/php7.y:4927 { yyVAL.node = expr.NewVariable(yyDollar[3].node) @@ -7558,7 +7581,7 @@ yydefault: } case 439: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:4921 + //line php7/php7.y:4944 { yyVAL.node = expr.NewVariable(yyDollar[2].node) @@ -7573,7 +7596,7 @@ yydefault: } case 440: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4937 + //line php7/php7.y:4960 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) @@ -7583,11 +7606,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 441: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:4949 + //line php7/php7.y:4974 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) @@ -7597,11 +7622,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 442: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:4964 + //line php7/php7.y:4991 { yyVAL.node = yyDollar[1].node @@ -7609,7 +7636,7 @@ yydefault: } case 443: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4970 + //line php7/php7.y:4997 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) @@ -7617,16 +7644,18 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) // save comments - yyDollar[2].token.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenSquareBracket) + yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenSquareBracket) + yyDollar[2].token.Meta.SetTokenName(meta.OpenSquareBracket).PrependTo(yyVAL.node.GetMeta()) yyDollar[4].token.Meta.SetTokenName(meta.CloseSquareBracket).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[4].token, meta.CloseSquareBracket) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 444: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:4985 + //line php7/php7.y:5014 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) @@ -7634,16 +7663,18 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) // save comments - yyDollar[2].token.Meta.SetTokenName(meta.OpenCurlyBracesToken).AppendTo(yyVAL.node.GetMeta()) - yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenCurlyBracesToken) + yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenCurlyBracesToken) + yyDollar[2].token.Meta.SetTokenName(meta.OpenCurlyBracesToken).PrependTo(yyVAL.node.GetMeta()) yyDollar[4].token.Meta.SetTokenName(meta.CloseCurlyBracesToken).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[4].token, meta.CloseCurlyBracesToken) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 445: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5000 + //line php7/php7.y:5031 { yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node) @@ -7653,11 +7684,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 446: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5012 + //line php7/php7.y:5045 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) @@ -7667,11 +7700,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 447: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5024 + //line php7/php7.y:5059 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) @@ -7681,11 +7716,13 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 448: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5039 + //line php7/php7.y:5076 { yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value) @@ -7699,7 +7736,7 @@ yydefault: } case 449: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5051 + //line php7/php7.y:5088 { yyVAL.node = yyDollar[2].node @@ -7713,7 +7750,7 @@ yydefault: } case 450: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5063 + //line php7/php7.y:5100 { yyVAL.node = yyDollar[1].node @@ -7721,7 +7758,7 @@ yydefault: } case 451: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5072 + //line php7/php7.y:5109 { yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value) @@ -7735,7 +7772,7 @@ yydefault: } case 452: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5084 + //line php7/php7.y:5121 { yyVAL.node = yyDollar[2].node @@ -7749,7 +7786,7 @@ yydefault: } case 453: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5096 + //line php7/php7.y:5133 { yyVAL.node = yyDollar[1].node @@ -7757,7 +7794,7 @@ yydefault: } case 454: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5105 + //line php7/php7.y:5142 { yyVAL.list = yyDollar[1].list @@ -7765,7 +7802,7 @@ yydefault: } case 455: yyDollar = yyS[yypt-0 : yypt+1] - //line php7/php7.y:5114 + //line php7/php7.y:5151 { yyVAL.node = expr.NewArrayItem(nil, nil) @@ -7773,7 +7810,7 @@ yydefault: } case 456: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5120 + //line php7/php7.y:5157 { yyVAL.node = yyDollar[1].node @@ -7781,7 +7818,7 @@ yydefault: } case 457: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5129 + //line php7/php7.y:5166 { if len(yyDollar[1].list) == 0 { yyDollar[1].list = []node.Node{expr.NewArrayItem(nil, nil)} @@ -7796,7 +7833,7 @@ yydefault: } case 458: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5142 + //line php7/php7.y:5179 { if yyDollar[1].node.(*expr.ArrayItem).Key == nil && yyDollar[1].node.(*expr.ArrayItem).Val == nil { yyVAL.list = []node.Node{} @@ -7808,7 +7845,7 @@ yydefault: } case 459: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5155 + //line php7/php7.y:5192 { yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node) @@ -7818,22 +7855,26 @@ yydefault: // save comments yyDollar[2].token.Meta.SetTokenName(meta.DoubleArrowToken).AppendTo(yyVAL.node.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 460: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5167 + //line php7/php7.y:5206 { yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node) // save position yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodePosition(yyDollar[1].node)) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 461: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:5176 + //line php7/php7.y:5217 { reference := expr.NewReference(yyDollar[4].node) yyVAL.node = expr.NewArrayItem(yyDollar[1].node, reference) @@ -7846,11 +7887,13 @@ yydefault: yyDollar[2].token.Meta.SetTokenName(meta.DoubleArrowToken).AppendTo(yyVAL.node.GetMeta()) yyDollar[3].token.Meta.SetTokenName(meta.NodeStart).AppendTo(reference.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 462: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5191 + //line php7/php7.y:5234 { reference := expr.NewReference(yyDollar[2].node) yyVAL.node = expr.NewArrayItem(nil, reference) @@ -7860,13 +7903,13 @@ yydefault: reference.SetPosition(yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(reference.GetMeta()) + yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 463: yyDollar = yyS[yypt-6 : yypt+1] - //line php7/php7.y:5205 + //line php7/php7.y:5248 { // TODO: Cannot use list() as standalone expression list := expr.NewList(yyDollar[5].list) @@ -7882,11 +7925,13 @@ yydefault: yyDollar[4].token.Meta.SetTokenName(meta.OpenParenthesisToken).AppendTo(list.GetMeta()) yyDollar[6].token.Meta.SetTokenName(meta.CloseParenthesisToken).AppendTo(list.GetMeta()) + yyDollar[1].node.GetMeta().Cut(newInheritMetaFilter()).PrependTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 464: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:5223 + //line php7/php7.y:5268 { // TODO: Cannot use list() as standalone expression list := expr.NewList(yyDollar[3].list) @@ -7897,7 +7942,7 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(list.GetMeta()) + yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(yyVAL.node.GetMeta()) yyDollar[2].token.Meta.SetTokenName(meta.OpenParenthesisToken).AppendTo(list.GetMeta()) yyDollar[4].token.Meta.SetTokenName(meta.CloseParenthesisToken).AppendTo(list.GetMeta()) @@ -7905,7 +7950,7 @@ yydefault: } case 465: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5243 + //line php7/php7.y:5288 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) @@ -7913,7 +7958,7 @@ yydefault: } case 466: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5249 + //line php7/php7.y:5294 { encapsed := scalar.NewEncapsedStringPart(yyDollar[2].token.Value) yyVAL.list = append(yyDollar[1].list, encapsed) @@ -7928,7 +7973,7 @@ yydefault: } case 467: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5262 + //line php7/php7.y:5307 { yyVAL.list = []node.Node{yyDollar[1].node} @@ -7936,7 +7981,7 @@ yydefault: } case 468: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5268 + //line php7/php7.y:5313 { encapsed := scalar.NewEncapsedStringPart(yyDollar[1].token.Value) yyVAL.list = []node.Node{encapsed, yyDollar[2].node} @@ -7951,7 +7996,7 @@ yydefault: } case 469: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5284 + //line php7/php7.y:5329 { name := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar)) yyVAL.node = expr.NewVariable(name) @@ -7968,7 +8013,7 @@ yydefault: } case 470: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:5299 + //line php7/php7.y:5344 { identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar)) variable := expr.NewVariable(identifier) @@ -7980,7 +8025,6 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(variable.GetMeta()) yylex.(*Parser).appendMeta(variable, &meta.Data{"$", meta.TokenType, nil, meta.NodeStart}, meta.NodeStart) yyDollar[2].token.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[2].token, meta.OpenCurlyBracesToken) @@ -7991,7 +8035,7 @@ yydefault: } case 471: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5320 + //line php7/php7.y:5364 { identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar)) variable := expr.NewVariable(identifier) @@ -8005,7 +8049,6 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(variable.GetMeta()) yylex.(*Parser).appendMeta(variable, &meta.Data{"$", meta.TokenType, nil, meta.NodeStart}, meta.NodeStart) yyDollar[2].token.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo(yyVAL.node.GetMeta()) yyDollar[3].token.Meta.SetTokenName(meta.NodeStart).AppendTo(fetch.GetMeta()) @@ -8014,7 +8057,7 @@ yydefault: } case 472: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5341 + //line php7/php7.y:5384 { variable := expr.NewVariable(yyDollar[2].node) @@ -8024,7 +8067,6 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[1].token, meta.NodeStart) yyDollar[3].token.Meta.SetTokenName(meta.NodeEnd).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[3].token, meta.NodeEnd) @@ -8033,7 +8075,7 @@ yydefault: } case 473: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5358 + //line php7/php7.y:5400 { name := node.NewIdentifier(yyDollar[2].token.Value) variable := expr.NewVariable(name) @@ -8045,7 +8087,6 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[1].token, meta.NodeStart) yyDollar[2].token.Meta.SetTokenName(meta.NodeStart).AppendTo(name.GetMeta()) yyDollar[3].token.Meta.SetTokenName(meta.NodeEnd).AppendTo(yyVAL.node.GetMeta()) @@ -8055,7 +8096,7 @@ yydefault: } case 474: yyDollar = yyS[yypt-6 : yypt+1] - //line php7/php7.y:5378 + //line php7/php7.y:5419 { identifier := node.NewIdentifier(yyDollar[2].token.Value) variable := expr.NewVariable(identifier) @@ -8067,7 +8108,6 @@ yydefault: yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[6].token)) // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[1].token, meta.NodeStart) yyDollar[3].token.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[3].token, meta.OpenSquareBracket) @@ -8080,12 +8120,11 @@ yydefault: } case 475: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5401 + //line php7/php7.y:5441 { yyVAL.node = yyDollar[2].node // save comments - yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).PrependTo(yyVAL.node.GetMeta()) yylex.(*Parser).prependMetaToken(yyVAL.node, yyDollar[1].token, meta.NodeStart) yyDollar[3].token.Meta.SetTokenName(meta.NodeEnd).AppendTo(yyVAL.node.GetMeta()) yylex.(*Parser).appendMetaToken(yyVAL.node, yyDollar[3].token, meta.NodeEnd) @@ -8094,7 +8133,7 @@ yydefault: } case 476: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5416 + //line php7/php7.y:5455 { yyVAL.node = scalar.NewString(yyDollar[1].token.Value) @@ -8108,7 +8147,7 @@ yydefault: } case 477: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5428 + //line php7/php7.y:5467 { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(yyDollar[1].token.Value); err == nil { @@ -8120,11 +8159,14 @@ yydefault: // save position yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokenPosition(yyDollar[1].token)) + // save comments + yyDollar[1].token.Meta.SetTokenName(meta.NodeStart).AppendTo(yyVAL.node.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } case 478: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5442 + //line php7/php7.y:5484 { var lnumber *scalar.Lnumber // TODO: add option to handle 64 bit integer @@ -8152,7 +8194,7 @@ yydefault: } case 479: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5468 + //line php7/php7.y:5510 { identifier := node.NewIdentifier(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar)) yyVAL.node = expr.NewVariable(identifier) @@ -8169,7 +8211,7 @@ yydefault: } case 480: yyDollar = yyS[yypt-5 : yypt+1] - //line php7/php7.y:5486 + //line php7/php7.y:5528 { yyVAL.node = expr.NewIsset(yyDollar[3].list) @@ -8189,7 +8231,7 @@ yydefault: } case 481: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:5504 + //line php7/php7.y:5546 { yyVAL.node = expr.NewEmpty(yyDollar[3].node) @@ -8205,7 +8247,7 @@ yydefault: } case 482: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5518 + //line php7/php7.y:5560 { yyVAL.node = expr.NewInclude(yyDollar[2].node) @@ -8219,7 +8261,7 @@ yydefault: } case 483: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5530 + //line php7/php7.y:5572 { yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node) @@ -8233,7 +8275,7 @@ yydefault: } case 484: yyDollar = yyS[yypt-4 : yypt+1] - //line php7/php7.y:5542 + //line php7/php7.y:5584 { yyVAL.node = expr.NewEval(yyDollar[3].node) @@ -8249,7 +8291,7 @@ yydefault: } case 485: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5556 + //line php7/php7.y:5598 { yyVAL.node = expr.NewRequire(yyDollar[2].node) @@ -8263,7 +8305,7 @@ yydefault: } case 486: yyDollar = yyS[yypt-2 : yypt+1] - //line php7/php7.y:5568 + //line php7/php7.y:5610 { yyVAL.node = expr.NewRequireOnce(yyDollar[2].node) @@ -8277,7 +8319,7 @@ yydefault: } case 487: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5583 + //line php7/php7.y:5625 { yyVAL.list = []node.Node{yyDollar[1].node} @@ -8285,7 +8327,7 @@ yydefault: } case 488: yyDollar = yyS[yypt-3 : yypt+1] - //line php7/php7.y:5589 + //line php7/php7.y:5631 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) @@ -8296,7 +8338,7 @@ yydefault: } case 489: yyDollar = yyS[yypt-1 : yypt+1] - //line php7/php7.y:5601 + //line php7/php7.y:5643 { yyVAL.node = yyDollar[1].node diff --git a/php7/php7.y b/php7/php7.y index e78c9d6..cb3cb14 100644 --- a/php7/php7.y +++ b/php7/php7.y @@ -4290,6 +4290,9 @@ function_call: // save position $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition($1, $2)) + // save comments + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list @@ -4301,6 +4304,7 @@ function_call: // save comments $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4313,6 +4317,7 @@ function_call: // save comments $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4322,6 +4327,7 @@ function_call: // save position $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition($1, $2)) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -4378,8 +4384,8 @@ exit_expr: $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3)) // save comments - $1.Meta.SetTokenName(meta.OpenParenthesisToken).AppendTo($$.GetMeta()) - yylex.(*Parser).appendMetaToken($$, $1, meta.OpenParenthesisToken) + yylex.(*Parser).prependMetaToken($$, $1, meta.OpenParenthesisToken) + $1.Meta.SetTokenName(meta.OpenParenthesisToken).PrependTo($$.GetMeta()) $3.Meta.SetTokenName(meta.CloseParenthesisToken).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $3, meta.CloseParenthesisToken) @@ -4658,6 +4664,9 @@ constant: // save position $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodePosition($1)) + // save comments + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | class_name T_PAAMAYIM_NEKUDOTAYIM identifier @@ -4673,6 +4682,8 @@ constant: $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) $3.Meta.SetTokenName(meta.NodeStart).AppendTo(target.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM identifier @@ -4688,6 +4699,8 @@ constant: $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) $3.Meta.SetTokenName(meta.NodeStart).AppendTo(target.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } ; @@ -4770,8 +4783,8 @@ callable_expr: $$ = $2; // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo($$.GetMeta()) - yylex.(*Parser).appendMetaToken($$, $1, meta.NodeStart) + yylex.(*Parser).prependMetaToken($$, $1, meta.NodeStart) + $1.Meta.SetTokenName(meta.NodeStart).PrependTo($$.GetMeta()) $3.Meta.SetTokenName(meta.NodeEnd).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $3, meta.NodeEnd) @@ -4800,11 +4813,13 @@ callable_variable: $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition($1, $4)) // save comments - $2.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo($$.GetMeta()) - yylex.(*Parser).appendMetaToken($$, $2, meta.OpenSquareBracket) + yylex.(*Parser).prependMetaToken($$, $2, meta.OpenSquareBracket) + $2.Meta.SetTokenName(meta.OpenSquareBracket).PrependTo($$.GetMeta()) $4.Meta.SetTokenName(meta.CloseSquareBracket).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $4, meta.CloseSquareBracket) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | constant '[' optional_expr ']' @@ -4815,11 +4830,13 @@ callable_variable: $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition($1, $4)) // save comments - $2.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo($$.GetMeta()) - yylex.(*Parser).appendMetaToken($$, $2, meta.OpenSquareBracket) + yylex.(*Parser).prependMetaToken($$, $2, meta.OpenSquareBracket) + $2.Meta.SetTokenName(meta.OpenSquareBracket).PrependTo($$.GetMeta()) $4.Meta.SetTokenName(meta.CloseSquareBracket).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $4, meta.CloseSquareBracket) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | dereferencable '{' expr '}' @@ -4830,11 +4847,13 @@ callable_variable: $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition($1, $4)) // save comments - $2.Meta.SetTokenName(meta.OpenCurlyBracesToken).AppendTo($$.GetMeta()) - yylex.(*Parser).appendMetaToken($$, $2, meta.OpenCurlyBracesToken) + yylex.(*Parser).prependMetaToken($$, $2, meta.OpenCurlyBracesToken) + $2.Meta.SetTokenName(meta.OpenCurlyBracesToken).PrependTo($$.GetMeta()) $4.Meta.SetTokenName(meta.CloseCurlyBracesToken).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $4, meta.CloseCurlyBracesToken) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | dereferencable T_OBJECT_OPERATOR property_name argument_list @@ -4847,6 +4866,8 @@ callable_variable: // save comments $2.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | function_call @@ -4880,6 +4901,8 @@ variable: // save comments $2.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } ; @@ -4943,6 +4966,8 @@ static_member: // save comments $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable @@ -4955,6 +4980,8 @@ static_member: // save comments $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } ; @@ -4974,11 +5001,13 @@ new_variable: $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition($1, $4)) // save comments - $2.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo($$.GetMeta()) - yylex.(*Parser).appendMetaToken($$, $2, meta.OpenSquareBracket) + yylex.(*Parser).prependMetaToken($$, $2, meta.OpenSquareBracket) + $2.Meta.SetTokenName(meta.OpenSquareBracket).PrependTo($$.GetMeta()) $4.Meta.SetTokenName(meta.CloseSquareBracket).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $4, meta.CloseSquareBracket) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | new_variable '{' expr '}' @@ -4989,11 +5018,13 @@ new_variable: $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodeTokenPosition($1, $4)) // save comments - $2.Meta.SetTokenName(meta.OpenCurlyBracesToken).AppendTo($$.GetMeta()) - yylex.(*Parser).appendMetaToken($$, $2, meta.OpenCurlyBracesToken) + yylex.(*Parser).prependMetaToken($$, $2, meta.OpenCurlyBracesToken) + $2.Meta.SetTokenName(meta.OpenCurlyBracesToken).PrependTo($$.GetMeta()) $4.Meta.SetTokenName(meta.CloseCurlyBracesToken).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $4, meta.CloseCurlyBracesToken) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | new_variable T_OBJECT_OPERATOR property_name @@ -5006,6 +5037,8 @@ new_variable: // save comments $2.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable @@ -5018,6 +5051,8 @@ new_variable: // save comments $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable @@ -5030,6 +5065,8 @@ new_variable: // save comments $2.Meta.SetTokenName(meta.PaamayimNekudotayimToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } ; @@ -5161,6 +5198,8 @@ array_pair: // save comments $2.Meta.SetTokenName(meta.DoubleArrowToken).AppendTo($$.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | expr @@ -5170,6 +5209,8 @@ array_pair: // save position $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodePosition($1)) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | expr T_DOUBLE_ARROW '&' variable @@ -5185,6 +5226,8 @@ array_pair: $2.Meta.SetTokenName(meta.DoubleArrowToken).AppendTo($$.GetMeta()) $3.Meta.SetTokenName(meta.NodeStart).AppendTo(reference.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | '&' variable @@ -5197,7 +5240,7 @@ array_pair: reference.SetPosition(yylex.(*Parser).positionBuilder.NewTokenNodePosition($1, $2)) // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo(reference.GetMeta()) + $1.Meta.SetTokenName(meta.NodeStart).AppendTo($$.GetMeta()) yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } @@ -5217,6 +5260,8 @@ array_pair: $4.Meta.SetTokenName(meta.OpenParenthesisToken).AppendTo(list.GetMeta()) $6.Meta.SetTokenName(meta.CloseParenthesisToken).AppendTo(list.GetMeta()) + $1.GetMeta().Cut(newInheritMetaFilter()).PrependTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | T_LIST '(' array_pair_list ')' @@ -5230,7 +5275,7 @@ array_pair: $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $4)) // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo(list.GetMeta()) + $1.Meta.SetTokenName(meta.NodeStart).AppendTo($$.GetMeta()) $2.Meta.SetTokenName(meta.OpenParenthesisToken).AppendTo(list.GetMeta()) $4.Meta.SetTokenName(meta.CloseParenthesisToken).AppendTo(list.GetMeta()) @@ -5307,7 +5352,6 @@ encaps_var: $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $4)) // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo(variable.GetMeta()) yylex.(*Parser).appendMeta(variable, &meta.Data{"$", meta.TokenType, nil, meta.NodeStart}, meta.NodeStart) $2.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $2, meta.OpenCurlyBracesToken) @@ -5330,7 +5374,6 @@ encaps_var: $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3)) // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo(variable.GetMeta()) yylex.(*Parser).appendMeta(variable, &meta.Data{"$", meta.TokenType, nil, meta.NodeStart}, meta.NodeStart) $2.Meta.SetTokenName(meta.ObjectOperatorToken).AppendTo($$.GetMeta()) $3.Meta.SetTokenName(meta.NodeStart).AppendTo(fetch.GetMeta()) @@ -5347,7 +5390,6 @@ encaps_var: $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3)) // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $1, meta.NodeStart) $3.Meta.SetTokenName(meta.NodeEnd).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $3, meta.NodeEnd) @@ -5366,7 +5408,6 @@ encaps_var: $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $3)) // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $1, meta.NodeStart) $2.Meta.SetTokenName(meta.NodeStart).AppendTo(name.GetMeta()) $3.Meta.SetTokenName(meta.NodeEnd).AppendTo($$.GetMeta()) @@ -5386,7 +5427,6 @@ encaps_var: $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $6)) // save comments - $1.Meta.SetTokenName(meta.NodeStart).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $1, meta.NodeStart) $3.Meta.SetTokenName(meta.OpenSquareBracket).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $3, meta.OpenSquareBracket) @@ -5402,7 +5442,6 @@ encaps_var: $$ = $2; // save comments - $1.Meta.SetTokenName(meta.NodeStart).PrependTo($$.GetMeta()) yylex.(*Parser).prependMetaToken($$, $1, meta.NodeStart) $3.Meta.SetTokenName(meta.NodeEnd).AppendTo($$.GetMeta()) yylex.(*Parser).appendMetaToken($$, $3, meta.NodeEnd) @@ -5436,6 +5475,9 @@ encaps_var_offset: // save position $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokenPosition($1)) + // save comments + $1.Meta.SetTokenName(meta.NodeStart).AppendTo($$.GetMeta()) + yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL) } | '-' T_NUM_STRING diff --git a/visitor/dumper_test.go b/visitor/dumper_test.go index 8944b64..6451ca1 100644 --- a/visitor/dumper_test.go +++ b/visitor/dumper_test.go @@ -117,12 +117,12 @@ func ExampleDumper() { // | "DefaultValue": // | [*expr.ConstFetch] // | "Position": Pos{Line: 5-5 Pos: 86-89} + // | "Meta": + // | " " before "NodeStart" // | "Constant": // | [*name.Name] // | "Position": Pos{Line: 5-5 Pos: 86-89} // | "NamespacedName": "null" - // | "Meta": - // | " " before "NodeStart" // | "Parts": // | [*name.NamePart] // | "Position": Pos{Line: 5-5 Pos: 86-89} diff --git a/visitor/go_dumper_test.go b/visitor/go_dumper_test.go index a3c13c6..c7aa0db 100644 --- a/visitor/go_dumper_test.go +++ b/visitor/go_dumper_test.go @@ -346,6 +346,19 @@ func ExampleGoDumper() { // StartPos: 86, // EndPos: 89, // }, + // Meta: meta.Collection{ + // &meta.Data{ + // Type: meta.WhiteSpaceType, + // Position: &position.Position{ + // StartLine: 5, + // EndLine: 5, + // StartPos: 85, + // EndPos: 85, + // }, + // Value: " ", + // TokenName: meta.NodeStart, + // }, + // }, // Constant: &name.Name{ // Position: &position.Position{ // StartLine: 5, @@ -353,19 +366,6 @@ func ExampleGoDumper() { // StartPos: 86, // EndPos: 89, // }, - // Meta: meta.Collection{ - // &meta.Data{ - // Type: meta.WhiteSpaceType, - // Position: &position.Position{ - // StartLine: 5, - // EndLine: 5, - // StartPos: 85, - // EndPos: 85, - // }, - // Value: " ", - // TokenName: meta.NodeStart, - // }, - // }, // Parts: []node.Node{ // &name.NamePart{ // Position: &position.Position{ diff --git a/visitor/json_dumper_test.go b/visitor/json_dumper_test.go index 81af330..aacc186 100644 --- a/visitor/json_dumper_test.go +++ b/visitor/json_dumper_test.go @@ -37,5 +37,5 @@ func ExampleJsonDumper() { nodes.Walk(dumper) // Output: - // {"type":"*node.Root","position":{"startPos":10,"endPos":166,"startLine":3,"endLine":12},"Stmts":[{"type":"*stmt.Namespace","position":{"startPos":10,"endPos":166,"startLine":3,"endLine":12},"meta":[{"type":"*meta.TokenType","value":"