From 0d6d9ac4d99dee5c41df598406cf727fc4f5623f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Sun, 4 Sep 2011 13:23:40 +0200 Subject: [PATCH] Added type parameter variances & tokens. --- .../Parser/CSharpParser.cs | 20 + .../Parser/mcs/cs-parser.cs | 857 +++++++++--------- .../Parser/mcs/cs-parser.jay | 7 +- 3 files changed, 460 insertions(+), 424 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index 695652ab46..0064325e8d 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -2277,6 +2277,26 @@ namespace ICSharpCode.NRefactory.CSharp continue; TypeParameterDeclaration tp = new TypeParameterDeclaration(); + List varianceLocation; + switch (arg.Variance) { + case Variance.Contravariant: + tp.Variance = VarianceModifier.Contravariant; + varianceLocation = LocationsBag.GetLocations (arg); + if (varianceLocation != null) + tp.AddChild (new CSharpTokenNode (Convert (varianceLocation[0]), "out".Length), TypeParameterDeclaration.VarianceRole); + break; + case Variance.Covariant: + tp.Variance = VarianceModifier.Covariant; + varianceLocation = LocationsBag.GetLocations (arg); + if (varianceLocation != null) + tp.AddChild (new CSharpTokenNode (Convert (varianceLocation[0]), "out".Length), TypeParameterDeclaration.VarianceRole); + break; + default: + tp.Variance = VarianceModifier.Invariant; + break; + + } + AddAttributeSection (tp, arg.OptAttributes); switch (arg.Variance) { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index e9fc099fa2..adca942291 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -2378,13 +2378,13 @@ case 366: case_366(); break; case 368: -#line 2928 "cs-parser.jay" +#line 2931 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; case 369: -#line 2935 "cs-parser.jay" +#line 2938 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } @@ -2399,7 +2399,7 @@ case 375: case_375(); break; case 377: -#line 2973 "cs-parser.jay" +#line 2976 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2408,7 +2408,7 @@ case 378: case_378(); break; case 379: -#line 2993 "cs-parser.jay" +#line 2996 "cs-parser.jay" { yyVal = new ComposedCast (((MemberName) yyVals[-1+yyTop]).GetTypeExpression (lbag), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2417,13 +2417,13 @@ case 380: case_380(); break; case 381: -#line 3002 "cs-parser.jay" +#line 3005 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 382: -#line 3006 "cs-parser.jay" +#line 3009 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2441,63 +2441,63 @@ case 386: case_386(); break; case 387: -#line 3045 "cs-parser.jay" +#line 3048 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; case 388: -#line 3046 "cs-parser.jay" +#line 3049 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; case 389: -#line 3047 "cs-parser.jay" +#line 3050 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; case 390: -#line 3048 "cs-parser.jay" +#line 3051 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; case 391: -#line 3049 "cs-parser.jay" +#line 3052 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; case 392: -#line 3050 "cs-parser.jay" +#line 3053 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; case 394: -#line 3055 "cs-parser.jay" +#line 3058 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; case 395: -#line 3056 "cs-parser.jay" +#line 3059 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; case 396: -#line 3057 "cs-parser.jay" +#line 3060 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; case 397: -#line 3058 "cs-parser.jay" +#line 3061 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; case 398: -#line 3059 "cs-parser.jay" +#line 3062 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; case 399: -#line 3060 "cs-parser.jay" +#line 3063 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; case 400: -#line 3061 "cs-parser.jay" +#line 3064 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; case 401: -#line 3062 "cs-parser.jay" +#line 3065 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; case 402: -#line 3063 "cs-parser.jay" +#line 3066 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; case 423: @@ -2507,22 +2507,22 @@ case 424: case_424(); break; case 428: -#line 3110 "cs-parser.jay" +#line 3113 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; case 429: -#line 3114 "cs-parser.jay" +#line 3117 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; case 430: -#line 3115 "cs-parser.jay" +#line 3118 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; case 435: case_435(); break; case 436: -#line 3148 "cs-parser.jay" +#line 3151 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); } @@ -2540,7 +2540,7 @@ case 440: case_440(); break; case 441: -#line 3180 "cs-parser.jay" +#line 3183 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); } @@ -2549,7 +2549,7 @@ case 442: case_442(); break; case 443: -#line 3188 "cs-parser.jay" +#line 3191 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } @@ -2561,7 +2561,7 @@ case 445: case_445(); break; case 446: -#line 3204 "cs-parser.jay" +#line 3207 "cs-parser.jay" { yyVal = null; } break; case 448: @@ -2571,11 +2571,11 @@ case 449: case_449(); break; case 450: -#line 3227 "cs-parser.jay" +#line 3230 "cs-parser.jay" { yyVal = null; } break; case 451: -#line 3231 "cs-parser.jay" +#line 3234 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -2593,7 +2593,7 @@ case 455: case_455(); break; case 456: -#line 3264 "cs-parser.jay" +#line 3267 "cs-parser.jay" { yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } @@ -2608,7 +2608,7 @@ case 459: case_459(); break; case 462: -#line 3292 "cs-parser.jay" +#line 3295 "cs-parser.jay" { yyVal = null; } break; case 464: @@ -2627,7 +2627,7 @@ case 468: case_468(); break; case 469: -#line 3344 "cs-parser.jay" +#line 3347 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } @@ -2663,13 +2663,13 @@ case 483: case_483(); break; case 484: -#line 3431 "cs-parser.jay" +#line 3434 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 486: -#line 3439 "cs-parser.jay" +#line 3442 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } @@ -2681,13 +2681,13 @@ case 488: case_488(); break; case 489: -#line 3459 "cs-parser.jay" +#line 3462 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 490: -#line 3466 "cs-parser.jay" +#line 3469 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } @@ -2714,7 +2714,7 @@ case 497: case_497(); break; case 498: -#line 3532 "cs-parser.jay" +#line 3535 "cs-parser.jay" { ++lexer.parsing_type; } @@ -2726,7 +2726,7 @@ case 500: case_500(); break; case 503: -#line 3559 "cs-parser.jay" +#line 3562 "cs-parser.jay" { yyVal = null; } break; case 505: @@ -2757,25 +2757,25 @@ case 516: case_516(); break; case 517: -#line 3637 "cs-parser.jay" +#line 3640 "cs-parser.jay" { yyVal = 2; } break; case 518: -#line 3641 "cs-parser.jay" +#line 3644 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; case 519: -#line 3648 "cs-parser.jay" +#line 3651 "cs-parser.jay" { yyVal = null; } break; case 520: -#line 3652 "cs-parser.jay" +#line 3655 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -2793,7 +2793,7 @@ case 524: case_524(); break; case 525: -#line 3696 "cs-parser.jay" +#line 3699 "cs-parser.jay" { lexer.TypeOfParsing = true; } @@ -2838,7 +2838,7 @@ case 540: case_540(); break; case 541: -#line 3810 "cs-parser.jay" +#line 3813 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); } @@ -2847,25 +2847,25 @@ case 542: case_542(); break; case 543: -#line 3823 "cs-parser.jay" +#line 3826 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; case 544: -#line 3827 "cs-parser.jay" +#line 3830 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); } break; case 545: -#line 3834 "cs-parser.jay" +#line 3837 "cs-parser.jay" { yyVal = ParametersCompiled.Undefined; } break; case 547: -#line 3842 "cs-parser.jay" +#line 3845 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -2877,13 +2877,13 @@ case 549: case_549(); break; case 551: -#line 3868 "cs-parser.jay" +#line 3871 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 552: -#line 3872 "cs-parser.jay" +#line 3875 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -2895,37 +2895,37 @@ case 556: case_556(); break; case 558: -#line 3902 "cs-parser.jay" +#line 3905 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 559: -#line 3906 "cs-parser.jay" +#line 3909 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 560: -#line 3910 "cs-parser.jay" +#line 3913 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 561: -#line 3914 "cs-parser.jay" +#line 3917 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 562: -#line 3918 "cs-parser.jay" +#line 3921 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 563: -#line 3922 "cs-parser.jay" +#line 3925 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -2943,7 +2943,7 @@ case 569: case_569(); break; case 570: -#line 3954 "cs-parser.jay" +#line 3957 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -2952,13 +2952,13 @@ case 571: case_571(); break; case 572: -#line 3963 "cs-parser.jay" +#line 3966 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 573: -#line 3967 "cs-parser.jay" +#line 3970 "cs-parser.jay" { yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3009,7 +3009,7 @@ case 598: case_598(); break; case 599: -#line 4091 "cs-parser.jay" +#line 4094 "cs-parser.jay" { yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3060,14 +3060,14 @@ case 614: case_614(); break; case 615: -#line 4188 "cs-parser.jay" +#line 4191 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 616: case_616(); break; case 619: -#line 4203 "cs-parser.jay" +#line 4206 "cs-parser.jay" { start_block (lexer.Location); } @@ -3091,7 +3091,7 @@ case 626: case_626(); break; case 627: -#line 4248 "cs-parser.jay" +#line 4251 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3103,7 +3103,7 @@ case 629: case_629(); break; case 630: -#line 4262 "cs-parser.jay" +#line 4265 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3115,7 +3115,7 @@ case 632: case_632(); break; case 638: -#line 4287 "cs-parser.jay" +#line 4290 "cs-parser.jay" { yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } @@ -3130,13 +3130,13 @@ case 641: case_641(); break; case 643: -#line 4316 "cs-parser.jay" +#line 4319 "cs-parser.jay" { yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; case 644: -#line 4329 "cs-parser.jay" +#line 4332 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -3154,11 +3154,11 @@ case 648: case_648(); break; case 649: -#line 4370 "cs-parser.jay" +#line 4373 "cs-parser.jay" { yyVal = null; } break; case 650: -#line 4372 "cs-parser.jay" +#line 4375 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 651: @@ -3216,7 +3216,7 @@ case 671: case_671(); break; case 673: -#line 4501 "cs-parser.jay" +#line 4504 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3246,19 +3246,19 @@ case 681: case_681(); break; case 682: -#line 4591 "cs-parser.jay" +#line 4594 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; case 683: -#line 4595 "cs-parser.jay" +#line 4598 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); } break; case 684: -#line 4602 "cs-parser.jay" +#line 4605 "cs-parser.jay" { yyVal = Variance.None; } @@ -3267,22 +3267,16 @@ case 685: case_685(); break; case 686: -#line 4616 "cs-parser.jay" - { - yyVal = Variance.Covariant; - } + case_686(); break; case 687: -#line 4620 "cs-parser.jay" - { - yyVal = Variance.Contravariant; - } + case_687(); break; case 688: case_688(); break; case 689: -#line 4645 "cs-parser.jay" +#line 4650 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3300,13 +3294,13 @@ case 693: case_693(); break; case 698: -#line 4689 "cs-parser.jay" +#line 4694 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 699: -#line 4693 "cs-parser.jay" +#line 4698 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } @@ -3315,13 +3309,13 @@ case 701: case_701(); break; case 704: -#line 4717 "cs-parser.jay" +#line 4722 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 705: -#line 4721 "cs-parser.jay" +#line 4726 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } @@ -3354,13 +3348,13 @@ case 744: case_744(); break; case 745: -#line 4865 "cs-parser.jay" +#line 4870 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 746: -#line 4869 "cs-parser.jay" +#line 4874 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -3372,7 +3366,7 @@ case 749: case_749(); break; case 750: -#line 4890 "cs-parser.jay" +#line 4895 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } @@ -3402,7 +3396,7 @@ case 763: case_763(); break; case 764: -#line 4979 "cs-parser.jay" +#line 4984 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); } @@ -3423,15 +3417,15 @@ case 774: case_774(); break; case 775: -#line 5029 "cs-parser.jay" +#line 5034 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 776: -#line 5033 "cs-parser.jay" +#line 5038 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 777: -#line 5034 "cs-parser.jay" +#line 5039 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 778: @@ -3450,7 +3444,7 @@ case 784: case_784(); break; case 785: -#line 5102 "cs-parser.jay" +#line 5107 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); } @@ -3471,13 +3465,13 @@ case 791: case_791(); break; case 792: -#line 5146 "cs-parser.jay" +#line 5151 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; case 793: -#line 5150 "cs-parser.jay" +#line 5155 "cs-parser.jay" { yyVal = new SwitchSection ((List) yyVals[-2+yyTop], current_block); } @@ -3492,7 +3486,7 @@ case 796: case_796(); break; case 797: -#line 5179 "cs-parser.jay" +#line 5184 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } @@ -3507,7 +3501,7 @@ case 804: case_804(); break; case 805: -#line 5218 "cs-parser.jay" +#line 5223 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3519,7 +3513,7 @@ case 807: case_807(); break; case 808: -#line 5246 "cs-parser.jay" +#line 5251 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 810: @@ -3529,11 +3523,11 @@ case 811: case_811(); break; case 813: -#line 5267 "cs-parser.jay" +#line 5272 "cs-parser.jay" { yyVal = null; } break; case 815: -#line 5272 "cs-parser.jay" +#line 5277 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 819: @@ -3576,7 +3570,7 @@ case 837: case_837(); break; case 840: -#line 5427 "cs-parser.jay" +#line 5432 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } @@ -3597,7 +3591,7 @@ case 845: case_845(); break; case 848: -#line 5480 "cs-parser.jay" +#line 5485 "cs-parser.jay" { yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3606,7 +3600,7 @@ case 849: case_849(); break; case 850: -#line 5499 "cs-parser.jay" +#line 5504 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } @@ -3615,13 +3609,13 @@ case 851: case_851(); break; case 852: -#line 5517 "cs-parser.jay" +#line 5522 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 853: -#line 5524 "cs-parser.jay" +#line 5529 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3630,7 +3624,7 @@ case 854: case_854(); break; case 855: -#line 5534 "cs-parser.jay" +#line 5539 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } @@ -3660,7 +3654,7 @@ case 863: case_863(); break; case 864: -#line 5617 "cs-parser.jay" +#line 5622 "cs-parser.jay" { report.Error (210, lexer.Location, "You must provide an initializer in a fixed or using statement declaration"); } @@ -3693,7 +3687,7 @@ case 873: case_873(); break; case 874: -#line 5717 "cs-parser.jay" +#line 5722 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3702,7 +3696,7 @@ case 875: case_875(); break; case 876: -#line 5732 "cs-parser.jay" +#line 5737 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3717,7 +3711,7 @@ case 880: case_880(); break; case 881: -#line 5777 "cs-parser.jay" +#line 5782 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3738,7 +3732,7 @@ case 889: case_889(); break; case 895: -#line 5836 "cs-parser.jay" +#line 5841 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3747,7 +3741,7 @@ case 896: case_896(); break; case 897: -#line 5855 "cs-parser.jay" +#line 5860 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3780,13 +3774,13 @@ case 906: case_906(); break; case 908: -#line 5999 "cs-parser.jay" +#line 6004 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 909: -#line 6006 "cs-parser.jay" +#line 6011 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3807,7 +3801,7 @@ case 916: case_916(); break; case 917: -#line 6052 "cs-parser.jay" +#line 6057 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } @@ -3819,7 +3813,7 @@ case 919: case_919(); break; case 920: -#line 6069 "cs-parser.jay" +#line 6074 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } @@ -3843,13 +3837,13 @@ case 929: case_929(); break; case 937: -#line 6193 "cs-parser.jay" +#line 6198 "cs-parser.jay" { module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; } break; case 938: -#line 6200 "cs-parser.jay" +#line 6205 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; } @@ -3861,13 +3855,13 @@ case 940: case_940(); break; case 941: -#line 6217 "cs-parser.jay" +#line 6222 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], new MemberName (MemberCache.IndexerNameAlias)); } break; case 942: -#line 6221 "cs-parser.jay" +#line 6226 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3885,25 +3879,25 @@ case 946: case_946(); break; case 948: -#line 6257 "cs-parser.jay" +#line 6262 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; case 950: -#line 6265 "cs-parser.jay" +#line 6270 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 951: -#line 6269 "cs-parser.jay" +#line 6274 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 952: -#line 6276 "cs-parser.jay" +#line 6281 "cs-parser.jay" { yyVal = new List (0); } @@ -5977,11 +5971,14 @@ void case_365() #line 2905 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop]; - yyVal = new TypeParameterName (lt.Value, (Attributes)yyVals[-2+yyTop], (Variance) yyVals[-1+yyTop], lt.Location); + var variance = (Variance) yyVals[-1+yyTop]; + yyVal = new TypeParameterName (lt.Value, (Attributes)yyVals[-2+yyTop], variance, lt.Location); + if (variance != Variance.None) + lbag.AddLocation (yyVal, savedLocation); } void case_366() -#line 2910 "cs-parser.jay" +#line 2913 "cs-parser.jay" { if (GetTokenName (yyToken) == "type") report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); @@ -5992,28 +5989,28 @@ void case_366() } void case_371() -#line 2944 "cs-parser.jay" +#line 2947 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_373() -#line 2953 "cs-parser.jay" +#line 2956 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_375() -#line 2962 "cs-parser.jay" +#line 2965 "cs-parser.jay" { report.Error (1536, GetLocation (yyVals[0+yyTop]), "Invalid parameter type `void'"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_378() -#line 2978 "cs-parser.jay" +#line 2981 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-1+yyTop]; @@ -6028,14 +6025,14 @@ void case_378() } void case_380() -#line 2995 "cs-parser.jay" +#line 2998 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } void case_383() -#line 3011 "cs-parser.jay" +#line 3014 "cs-parser.jay" { var types = new List (2); types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6043,7 +6040,7 @@ void case_383() } void case_384() -#line 3017 "cs-parser.jay" +#line 3020 "cs-parser.jay" { var types = (List) yyVals[-2+yyTop]; types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6052,7 +6049,7 @@ void case_384() } void case_385() -#line 3027 "cs-parser.jay" +#line 3030 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) { report.Error (1521, GetLocation (yyVals[0+yyTop]), "Invalid base type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -6061,35 +6058,35 @@ void case_385() } void case_386() -#line 3034 "cs-parser.jay" +#line 3037 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } void case_423() -#line 3096 "cs-parser.jay" +#line 3099 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } void case_424() -#line 3100 "cs-parser.jay" +#line 3103 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); } void case_435() -#line 3141 "cs-parser.jay" +#line 3144 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_437() -#line 3153 "cs-parser.jay" +#line 3156 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -6097,7 +6094,7 @@ void case_437() } void case_438() -#line 3159 "cs-parser.jay" +#line 3162 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -6105,7 +6102,7 @@ void case_438() } void case_439() -#line 3165 "cs-parser.jay" +#line 3168 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -6113,7 +6110,7 @@ void case_439() } void case_440() -#line 3171 "cs-parser.jay" +#line 3174 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6123,28 +6120,28 @@ void case_440() } void case_442() -#line 3181 "cs-parser.jay" +#line 3184 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } void case_444() -#line 3189 "cs-parser.jay" +#line 3192 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } void case_445() -#line 3197 "cs-parser.jay" +#line 3200 "cs-parser.jay" { yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_448() -#line 3210 "cs-parser.jay" +#line 3213 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = CollectionOrObjectInitializers.Empty; @@ -6156,14 +6153,14 @@ void case_448() } void case_449() -#line 3220 "cs-parser.jay" +#line 3223 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_452() -#line 3236 "cs-parser.jay" +#line 3239 "cs-parser.jay" { var a = new List (); a.Add ((Expression) yyVals[0+yyTop]); @@ -6171,7 +6168,7 @@ void case_452() } void case_453() -#line 3242 "cs-parser.jay" +#line 3245 "cs-parser.jay" { var a = (List)yyVals[-2+yyTop]; a.Add ((Expression) yyVals[0+yyTop]); @@ -6180,14 +6177,14 @@ void case_453() } void case_454() -#line 3248 "cs-parser.jay" +#line 3251 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } void case_455() -#line 3256 "cs-parser.jay" +#line 3259 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); @@ -6195,7 +6192,7 @@ void case_455() } void case_457() -#line 3265 "cs-parser.jay" +#line 3268 "cs-parser.jay" { CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName; if (csn == null) @@ -6205,7 +6202,7 @@ void case_457() } void case_458() -#line 3273 "cs-parser.jay" +#line 3276 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = null; @@ -6214,14 +6211,14 @@ void case_458() } void case_459() -#line 3280 "cs-parser.jay" +#line 3283 "cs-parser.jay" { report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); yyVal = null; } void case_464() -#line 3298 "cs-parser.jay" +#line 3301 "cs-parser.jay" { Arguments list = new Arguments (4); list.Add ((Argument) yyVals[0+yyTop]); @@ -6229,7 +6226,7 @@ void case_464() } void case_465() -#line 3304 "cs-parser.jay" +#line 3307 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; if (list [list.Count - 1] is NamedArgument) @@ -6241,7 +6238,7 @@ void case_465() } void case_466() -#line 3314 "cs-parser.jay" +#line 3317 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; NamedArgument a = (NamedArgument) yyVals[0+yyTop]; @@ -6258,56 +6255,56 @@ void case_466() } void case_467() -#line 3329 "cs-parser.jay" +#line 3332 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[0+yyTop]), "An argument is missing"); yyVal = yyVals[-1+yyTop]; } void case_468() -#line 3334 "cs-parser.jay" +#line 3337 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } void case_473() -#line 3355 "cs-parser.jay" +#line 3358 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_474() -#line 3360 "cs-parser.jay" +#line 3363 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_475() -#line 3365 "cs-parser.jay" +#line 3368 "cs-parser.jay" { yyVal = new Argument (new Arglist ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_476() -#line 3370 "cs-parser.jay" +#line 3373 "cs-parser.jay" { yyVal = new Argument (new Arglist (GetLocation (yyVals[-2+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_478() -#line 3382 "cs-parser.jay" +#line 3385 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_479() -#line 3390 "cs-parser.jay" +#line 3393 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); @@ -6315,7 +6312,7 @@ void case_479() } void case_480() -#line 3396 "cs-parser.jay" +#line 3399 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6324,14 +6321,14 @@ void case_480() } void case_481() -#line 3402 "cs-parser.jay" +#line 3405 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } void case_482() -#line 3410 "cs-parser.jay" +#line 3413 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); @@ -6339,7 +6336,7 @@ void case_482() } void case_483() -#line 3416 "cs-parser.jay" +#line 3419 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) @@ -6351,21 +6348,21 @@ void case_483() } void case_487() -#line 3444 "cs-parser.jay" +#line 3447 "cs-parser.jay" { yyVal = new ElementAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_488() -#line 3449 "cs-parser.jay" +#line 3452 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); } void case_491() -#line 3471 "cs-parser.jay" +#line 3474 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (lang_version <= LanguageVersion.ISO_2) @@ -6380,7 +6377,7 @@ void case_491() } void case_492() -#line 3484 "cs-parser.jay" +#line 3487 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); @@ -6389,7 +6386,7 @@ void case_492() } void case_493() -#line 3496 "cs-parser.jay" +#line 3499 "cs-parser.jay" { yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (List) yyVals[-3+yyTop], new ComposedTypeSpecifier (((List) yyVals[-3+yyTop]).Count, GetLocation (yyVals[-4+yyTop])) { @@ -6399,7 +6396,7 @@ void case_493() } void case_494() -#line 3504 "cs-parser.jay" +#line 3507 "cs-parser.jay" { if (yyVals[0+yyTop] == null) report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); @@ -6408,7 +6405,7 @@ void case_494() } void case_495() -#line 3511 "cs-parser.jay" +#line 3514 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays"); @@ -6417,28 +6414,28 @@ void case_495() } void case_496() -#line 3518 "cs-parser.jay" +#line 3521 "cs-parser.jay" { report.Error (178, GetLocation (yyVals[-1+yyTop]), "Invalid rank specifier, expecting `,' or `]'"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], null, GetLocation (yyVals[-6+yyTop])); } void case_497() -#line 3523 "cs-parser.jay" +#line 3526 "cs-parser.jay" { Error_SyntaxError (1526, yyToken, "Unexpected symbol"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } void case_499() -#line 3534 "cs-parser.jay" +#line 3537 "cs-parser.jay" { --lexer.parsing_type; yyVal = yyVals[0+yyTop]; } void case_500() -#line 3542 "cs-parser.jay" +#line 3545 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); @@ -6450,7 +6447,7 @@ void case_500() } void case_505() -#line 3565 "cs-parser.jay" +#line 3568 "cs-parser.jay" { var a = new List (4); a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -6458,7 +6455,7 @@ void case_505() } void case_506() -#line 3571 "cs-parser.jay" +#line 3574 "cs-parser.jay" { var a = (List) yyVals[-2+yyTop]; a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -6468,7 +6465,7 @@ void case_506() } void case_507() -#line 3582 "cs-parser.jay" +#line 3585 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[-2+yyTop]; yyVal = new AnonymousTypeParameter ((Expression)yyVals[0+yyTop], lt.Value, lt.Location); @@ -6476,7 +6473,7 @@ void case_507() } void case_508() -#line 3588 "cs-parser.jay" +#line 3591 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), @@ -6484,14 +6481,14 @@ void case_508() } void case_509() -#line 3594 "cs-parser.jay" +#line 3597 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } void case_510() -#line 3599 "cs-parser.jay" +#line 3602 "cs-parser.jay" { report.Error (746, lexer.Location, "Invalid anonymous type member declarator. Anonymous type members must be a member assignment, simple name or member access expression"); @@ -6499,28 +6496,28 @@ void case_510() } void case_514() -#line 3614 "cs-parser.jay" +#line 3617 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_515() -#line 3622 "cs-parser.jay" +#line 3625 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_516() -#line 3627 "cs-parser.jay" +#line 3630 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_521() -#line 3657 "cs-parser.jay" +#line 3660 "cs-parser.jay" { var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); ai.VariableDeclaration = current_variable; @@ -6529,7 +6526,7 @@ void case_521() } void case_522() -#line 3664 "cs-parser.jay" +#line 3667 "cs-parser.jay" { var ai = new ArrayInitializer ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); ai.VariableDeclaration = current_variable; @@ -6542,7 +6539,7 @@ void case_522() } void case_523() -#line 3678 "cs-parser.jay" +#line 3681 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); @@ -6550,7 +6547,7 @@ void case_523() } void case_524() -#line 3684 "cs-parser.jay" +#line 3687 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6559,7 +6556,7 @@ void case_524() } void case_526() -#line 3698 "cs-parser.jay" +#line 3701 "cs-parser.jay" { lexer.TypeOfParsing = false; yyVal = new TypeOf ((FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); @@ -6567,14 +6564,14 @@ void case_526() } void case_529() -#line 3709 "cs-parser.jay" +#line 3712 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } void case_530() -#line 3717 "cs-parser.jay" +#line 3720 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6582,7 +6579,7 @@ void case_530() } void case_531() -#line 3723 "cs-parser.jay" +#line 3726 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6592,7 +6589,7 @@ void case_531() } void case_532() -#line 3731 "cs-parser.jay" +#line 3734 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6600,7 +6597,7 @@ void case_532() } void case_533() -#line 3737 "cs-parser.jay" +#line 3740 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6608,7 +6605,7 @@ void case_533() } void case_534() -#line 3743 "cs-parser.jay" +#line 3746 "cs-parser.jay" { var te = ((MemberName) yyVals[-3+yyTop]).GetTypeExpression (lbag); if (te.HasTypeArguments) @@ -6619,7 +6616,7 @@ void case_534() } void case_535() -#line 3755 "cs-parser.jay" +#line 3758 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); @@ -6628,7 +6625,7 @@ void case_535() } void case_536() -#line 3765 "cs-parser.jay" +#line 3768 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) @@ -6638,35 +6635,35 @@ void case_536() } void case_537() -#line 3776 "cs-parser.jay" +#line 3779 "cs-parser.jay" { yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_538() -#line 3784 "cs-parser.jay" +#line 3787 "cs-parser.jay" { yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_539() -#line 3792 "cs-parser.jay" +#line 3795 "cs-parser.jay" { yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_540() -#line 3800 "cs-parser.jay" +#line 3803 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new Indirection ((Expression) yyVals[-3+yyTop], GetLocation (yyVals[-2+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } void case_542() -#line 3812 "cs-parser.jay" +#line 3815 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { @@ -6677,7 +6674,7 @@ void case_542() } void case_548() -#line 3844 "cs-parser.jay" +#line 3847 "cs-parser.jay" { valid_param_mod = 0; yyVal = yyVals[-1+yyTop]; @@ -6686,7 +6683,7 @@ void case_548() } void case_549() -#line 3854 "cs-parser.jay" +#line 3857 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); @@ -6696,147 +6693,147 @@ void case_549() } void case_555() -#line 3879 "cs-parser.jay" +#line 3882 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_556() -#line 3887 "cs-parser.jay" +#line 3890 "cs-parser.jay" { current_block.ParametersBlock.IsAsync = true; yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_565() -#line 3928 "cs-parser.jay" +#line 3931 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_566() -#line 3933 "cs-parser.jay" +#line 3936 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_567() -#line 3938 "cs-parser.jay" +#line 3941 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_569() -#line 3947 "cs-parser.jay" +#line 3950 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_571() -#line 3956 "cs-parser.jay" +#line 3959 "cs-parser.jay" { /* Shift/Reduce conflict*/ yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_575() -#line 3973 "cs-parser.jay" +#line 3976 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_576() -#line 3978 "cs-parser.jay" +#line 3981 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_578() -#line 3987 "cs-parser.jay" +#line 3990 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_579() -#line 3992 "cs-parser.jay" +#line 3995 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_580() -#line 3997 "cs-parser.jay" +#line 4000 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_581() -#line 4002 "cs-parser.jay" +#line 4005 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_583() -#line 4011 "cs-parser.jay" +#line 4014 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_584() -#line 4016 "cs-parser.jay" +#line 4019 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_586() -#line 4025 "cs-parser.jay" +#line 4028 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_588() -#line 4034 "cs-parser.jay" +#line 4037 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_590() -#line 4043 "cs-parser.jay" +#line 4046 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_592() -#line 4052 "cs-parser.jay" +#line 4055 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_594() -#line 4061 "cs-parser.jay" +#line 4064 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_596() -#line 4070 "cs-parser.jay" +#line 4073 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); @@ -6845,84 +6842,84 @@ void case_596() } void case_598() -#line 4081 "cs-parser.jay" +#line 4084 "cs-parser.jay" { yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_600() -#line 4093 "cs-parser.jay" +#line 4096 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_601() -#line 4098 "cs-parser.jay" +#line 4101 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_602() -#line 4103 "cs-parser.jay" +#line 4106 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_603() -#line 4108 "cs-parser.jay" +#line 4111 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_604() -#line 4113 "cs-parser.jay" +#line 4116 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_605() -#line 4118 "cs-parser.jay" +#line 4121 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_606() -#line 4123 "cs-parser.jay" +#line 4126 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_607() -#line 4128 "cs-parser.jay" +#line 4131 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_608() -#line 4133 "cs-parser.jay" +#line 4136 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_609() -#line 4138 "cs-parser.jay" +#line 4141 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_610() -#line 4146 "cs-parser.jay" +#line 4149 "cs-parser.jay" { var pars = new List (4); pars.Add ((Parameter) yyVals[0+yyTop]); @@ -6931,7 +6928,7 @@ void case_610() } void case_611() -#line 4153 "cs-parser.jay" +#line 4156 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; @@ -6946,7 +6943,7 @@ void case_611() } void case_612() -#line 4169 "cs-parser.jay" +#line 4172 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6954,7 +6951,7 @@ void case_612() } void case_613() -#line 4175 "cs-parser.jay" +#line 4178 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6962,21 +6959,21 @@ void case_613() } void case_614() -#line 4181 "cs-parser.jay" +#line 4184 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } void case_616() -#line 4189 "cs-parser.jay" +#line 4192 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); } void case_620() -#line 4205 "cs-parser.jay" +#line 4208 "cs-parser.jay" { Block b = end_block (lexer.Location); b.IsCompilerGenerated = true; @@ -6985,14 +6982,14 @@ void case_620() } void case_622() -#line 4216 "cs-parser.jay" +#line 4219 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = EmptyExpression.Null; } void case_623() -#line 4224 "cs-parser.jay" +#line 4227 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); @@ -7000,14 +6997,14 @@ void case_623() } void case_624() -#line 4230 "cs-parser.jay" +#line 4233 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } void case_625() -#line 4235 "cs-parser.jay" +#line 4238 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); @@ -7015,63 +7012,63 @@ void case_625() } void case_626() -#line 4241 "cs-parser.jay" +#line 4244 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } void case_628() -#line 4250 "cs-parser.jay" +#line 4253 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop])); } void case_629() -#line 4255 "cs-parser.jay" +#line 4258 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } void case_631() -#line 4264 "cs-parser.jay" +#line 4267 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop])); } void case_632() -#line 4269 "cs-parser.jay" +#line 4272 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } void case_639() -#line 4292 "cs-parser.jay" +#line 4295 "cs-parser.jay" { yyVal = new RefValueExpr ((Expression) yyVals[-3+yyTop], (FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_640() -#line 4297 "cs-parser.jay" +#line 4300 "cs-parser.jay" { yyVal = new RefTypeExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_641() -#line 4302 "cs-parser.jay" +#line 4305 "cs-parser.jay" { yyVal = new MakeRefExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_645() -#line 4331 "cs-parser.jay" +#line 4334 "cs-parser.jay" { MemberName name = MakeName ((MemberName) yyVals[0+yyTop]); Class c = new Class (current_namespace, current_class, name, (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]); @@ -7084,7 +7081,7 @@ void case_645() } void case_646() -#line 4343 "cs-parser.jay" +#line 4346 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -7097,7 +7094,7 @@ void case_646() } void case_647() -#line 4354 "cs-parser.jay" +#line 4357 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) @@ -7105,7 +7102,7 @@ void case_647() } void case_648() -#line 4360 "cs-parser.jay" +#line 4363 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); if (yyVals[0+yyTop] != null) @@ -7114,14 +7111,14 @@ void case_648() } void case_651() -#line 4377 "cs-parser.jay" +#line 4380 "cs-parser.jay" { mod_locations = null; yyVal = ModifierNone; } void case_654() -#line 4387 "cs-parser.jay" +#line 4390 "cs-parser.jay" { var m1 = (Modifiers) yyVals[-1+yyTop]; var m2 = (Modifiers) yyVals[0+yyTop]; @@ -7139,7 +7136,7 @@ void case_654() } void case_655() -#line 4406 "cs-parser.jay" +#line 4409 "cs-parser.jay" { yyVal = Modifiers.NEW; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7149,91 +7146,91 @@ void case_655() } void case_656() -#line 4414 "cs-parser.jay" +#line 4417 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_657() -#line 4419 "cs-parser.jay" +#line 4422 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_658() -#line 4424 "cs-parser.jay" +#line 4427 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_659() -#line 4429 "cs-parser.jay" +#line 4432 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_660() -#line 4434 "cs-parser.jay" +#line 4437 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_661() -#line 4439 "cs-parser.jay" +#line 4442 "cs-parser.jay" { yyVal = Modifiers.SEALED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_662() -#line 4444 "cs-parser.jay" +#line 4447 "cs-parser.jay" { yyVal = Modifiers.STATIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_663() -#line 4449 "cs-parser.jay" +#line 4452 "cs-parser.jay" { yyVal = Modifiers.READONLY; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_664() -#line 4454 "cs-parser.jay" +#line 4457 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_665() -#line 4459 "cs-parser.jay" +#line 4462 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_666() -#line 4464 "cs-parser.jay" +#line 4467 "cs-parser.jay" { yyVal = Modifiers.EXTERN; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_667() -#line 4469 "cs-parser.jay" +#line 4472 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_668() -#line 4474 "cs-parser.jay" +#line 4477 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7242,28 +7239,28 @@ void case_668() } void case_669() -#line 4481 "cs-parser.jay" +#line 4484 "cs-parser.jay" { yyVal = Modifiers.ASYNC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_671() -#line 4490 "cs-parser.jay" +#line 4493 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-1+yyTop])); current_container.AddBasesForPart (current_class, (List) yyVals[0+yyTop]); } void case_674() -#line 4503 "cs-parser.jay" +#line 4506 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_675() -#line 4511 "cs-parser.jay" +#line 4514 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((Constraints) yyVals[0+yyTop]); @@ -7271,7 +7268,7 @@ void case_675() } void case_676() -#line 4517 "cs-parser.jay" +#line 4520 "cs-parser.jay" { var constraints = (List) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; @@ -7289,7 +7286,7 @@ void case_676() } void case_677() -#line 4536 "cs-parser.jay" +#line 4539 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); @@ -7297,7 +7294,7 @@ void case_677() } void case_678() -#line 4545 "cs-parser.jay" +#line 4548 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -7305,7 +7302,7 @@ void case_678() } void case_679() -#line 4551 "cs-parser.jay" +#line 4554 "cs-parser.jay" { var constraints = (List) yyVals[-2+yyTop]; var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; @@ -7330,7 +7327,7 @@ void case_679() } void case_680() -#line 4577 "cs-parser.jay" +#line 4580 "cs-parser.jay" { if (yyVals[0+yyTop] is ComposedCast) report.Error (706, GetLocation (yyVals[0+yyTop]), "Invalid constraint type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ()); @@ -7339,14 +7336,14 @@ void case_680() } void case_681() -#line 4584 "cs-parser.jay" +#line 4587 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_685() -#line 4604 "cs-parser.jay" +#line 4607 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (lexer.Location, "generic type variance"); @@ -7354,78 +7351,92 @@ void case_685() yyVal = yyVals[0+yyTop]; } +void case_686() +#line 4617 "cs-parser.jay" +{ + yyVal = Variance.Covariant; + savedLocation = GetLocation (yyVals[0+yyTop]); + } + +void case_687() +#line 4622 "cs-parser.jay" +{ + yyVal = Variance.Contravariant; + savedLocation = GetLocation (yyVals[0+yyTop]); + } + void case_688() -#line 4638 "cs-parser.jay" +#line 4643 "cs-parser.jay" { ++lexer.parsing_block; start_block (GetLocation (yyVals[0+yyTop])); } void case_690() -#line 4650 "cs-parser.jay" +#line 4655 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } void case_691() -#line 4655 "cs-parser.jay" +#line 4660 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (lexer.Location); } void case_692() -#line 4664 "cs-parser.jay" +#line 4669 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } void case_693() -#line 4669 "cs-parser.jay" +#line 4674 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } void case_701() -#line 4696 "cs-parser.jay" +#line 4701 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_734() -#line 4760 "cs-parser.jay" +#line 4765 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } void case_735() -#line 4765 "cs-parser.jay" +#line 4770 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } void case_736() -#line 4770 "cs-parser.jay" +#line 4775 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } void case_737() -#line 4778 "cs-parser.jay" +#line 4783 "cs-parser.jay" { /* Uses lexer.Location because semicolon location is not kept in quick mode*/ yyVal = new EmptyStatement (lexer.Location); } void case_738() -#line 4786 "cs-parser.jay" +#line 4791 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); @@ -7435,7 +7446,7 @@ void case_738() } void case_741() -#line 4799 "cs-parser.jay" +#line 4804 "cs-parser.jay" { if (yyVals[-1+yyTop] is VarExpr) yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); @@ -7444,7 +7455,7 @@ void case_741() } void case_742() -#line 4815 "cs-parser.jay" +#line 4820 "cs-parser.jay" { /* Ok, the above "primary_expression" is there to get rid of*/ /* both reduce/reduce and shift/reduces in the grammar, it should*/ @@ -7476,7 +7487,7 @@ void case_742() } void case_743() -#line 4845 "cs-parser.jay" +#line 4850 "cs-parser.jay" { ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; @@ -7489,7 +7500,7 @@ void case_743() } void case_744() -#line 4856 "cs-parser.jay" +#line 4861 "cs-parser.jay" { if (yyVals[0+yyTop] == null) yyVal = yyVals[-1+yyTop]; @@ -7498,21 +7509,21 @@ void case_744() } void case_747() -#line 4871 "cs-parser.jay" +#line 4876 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_749() -#line 4880 "cs-parser.jay" +#line 4885 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_751() -#line 4895 "cs-parser.jay" +#line 4900 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -7521,7 +7532,7 @@ void case_751() } void case_752() -#line 4902 "cs-parser.jay" +#line 4907 "cs-parser.jay" { yyVal = current_variable; current_variable = null; @@ -7529,7 +7540,7 @@ void case_752() } void case_753() -#line 4908 "cs-parser.jay" +#line 4913 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7538,7 +7549,7 @@ void case_753() } void case_754() -#line 4915 "cs-parser.jay" +#line 4920 "cs-parser.jay" { if (current_variable.Initializer != null) { lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); @@ -7550,14 +7561,14 @@ void case_754() } void case_756() -#line 4929 "cs-parser.jay" +#line 4934 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); } void case_757() -#line 4934 "cs-parser.jay" +#line 4939 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -7568,7 +7579,7 @@ void case_757() } void case_762() -#line 4956 "cs-parser.jay" +#line 4961 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7579,7 +7590,7 @@ void case_762() } void case_763() -#line 4965 "cs-parser.jay" +#line 4970 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7590,14 +7601,14 @@ void case_763() } void case_765() -#line 4981 "cs-parser.jay" +#line 4986 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); current_variable.Initializer = (Expression) yyVals[0+yyTop]; } void case_770() -#line 4999 "cs-parser.jay" +#line 5004 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7608,28 +7619,28 @@ void case_770() } void case_772() -#line 5012 "cs-parser.jay" +#line 5017 "cs-parser.jay" { yyVal = new StackAlloc ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_773() -#line 5017 "cs-parser.jay" +#line 5022 "cs-parser.jay" { report.Error (1575, GetLocation (yyVals[-1+yyTop]), "A stackalloc expression requires [] after type"); yyVal = new StackAlloc ((Expression) yyVals[0+yyTop], null, GetLocation (yyVals[-1+yyTop])); } void case_774() -#line 5025 "cs-parser.jay" +#line 5030 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_778() -#line 5043 "cs-parser.jay" +#line 5048 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { @@ -7641,7 +7652,7 @@ void case_778() } void case_779() -#line 5056 "cs-parser.jay" +#line 5061 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; ExpressionStatement s; @@ -7651,14 +7662,14 @@ void case_779() } void case_780() -#line 5064 "cs-parser.jay" +#line 5069 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } void case_783() -#line 5078 "cs-parser.jay" +#line 5083 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7668,7 +7679,7 @@ void case_783() } void case_784() -#line 5087 "cs-parser.jay" +#line 5092 "cs-parser.jay" { yyVal = new If ((BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); @@ -7680,7 +7691,7 @@ void case_784() } void case_786() -#line 5104 "cs-parser.jay" +#line 5109 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, (List) yyVals[-1+yyTop], GetLocation (yyVals[-7+yyTop])); end_block (GetLocation (yyVals[0+yyTop])); @@ -7688,14 +7699,14 @@ void case_786() } void case_787() -#line 5113 "cs-parser.jay" +#line 5118 "cs-parser.jay" { report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); yyVal = new List (); } void case_789() -#line 5122 "cs-parser.jay" +#line 5127 "cs-parser.jay" { var sections = new List (4); @@ -7704,7 +7715,7 @@ void case_789() } void case_790() -#line 5129 "cs-parser.jay" +#line 5134 "cs-parser.jay" { var sections = (List) yyVals[-1+yyTop]; @@ -7713,14 +7724,14 @@ void case_790() } void case_791() -#line 5136 "cs-parser.jay" +#line 5141 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new List (); } void case_794() -#line 5155 "cs-parser.jay" +#line 5160 "cs-parser.jay" { var labels = new List (2); @@ -7729,7 +7740,7 @@ void case_794() } void case_795() -#line 5162 "cs-parser.jay" +#line 5167 "cs-parser.jay" { var labels = (List) (yyVals[-1+yyTop]); labels.Add ((SwitchLabel) yyVals[0+yyTop]); @@ -7738,14 +7749,14 @@ void case_795() } void case_796() -#line 5172 "cs-parser.jay" +#line 5177 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_802() -#line 5191 "cs-parser.jay" +#line 5196 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7755,21 +7766,21 @@ void case_802() } void case_803() -#line 5203 "cs-parser.jay" +#line 5208 "cs-parser.jay" { yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_804() -#line 5211 "cs-parser.jay" +#line 5216 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); current_block.IsCompilerGenerated = true; } void case_806() -#line 5227 "cs-parser.jay" +#line 5232 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7783,14 +7794,14 @@ void case_806() } void case_807() -#line 5239 "cs-parser.jay" +#line 5244 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = end_block (current_block.StartLocation); } void case_810() -#line 5252 "cs-parser.jay" +#line 5257 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -7799,14 +7810,14 @@ void case_810() } void case_811() -#line 5259 "cs-parser.jay" +#line 5264 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_819() -#line 5283 "cs-parser.jay" +#line 5288 "cs-parser.jay" { var sl = yyVals[-2+yyTop] as StatementList; if (sl == null) { @@ -7821,14 +7832,14 @@ void case_819() } void case_820() -#line 5299 "cs-parser.jay" +#line 5304 "cs-parser.jay" { report.Error (230, GetLocation (yyVals[-5+yyTop]), "Type and identifier are both required in a foreach statement"); yyVal = null; } void case_821() -#line 5304 "cs-parser.jay" +#line 5309 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -7839,7 +7850,7 @@ void case_821() } void case_822() -#line 5313 "cs-parser.jay" +#line 5318 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7852,21 +7863,21 @@ void case_822() } void case_829() -#line 5336 "cs-parser.jay" +#line 5341 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_830() -#line 5344 "cs-parser.jay" +#line 5349 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_831() -#line 5352 "cs-parser.jay" +#line 5357 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); @@ -7874,35 +7885,35 @@ void case_831() } void case_832() -#line 5358 "cs-parser.jay" +#line 5363 "cs-parser.jay" { yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_833() -#line 5363 "cs-parser.jay" +#line 5368 "cs-parser.jay" { yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_834() -#line 5371 "cs-parser.jay" +#line 5376 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_835() -#line 5379 "cs-parser.jay" +#line 5384 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_836() -#line 5387 "cs-parser.jay" +#line 5392 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -7920,7 +7931,7 @@ void case_836() } void case_837() -#line 5403 "cs-parser.jay" +#line 5408 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -7936,28 +7947,28 @@ void case_837() } void case_841() -#line 5429 "cs-parser.jay" +#line 5434 "cs-parser.jay" { yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (Block) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_842() -#line 5434 "cs-parser.jay" +#line 5439 "cs-parser.jay" { yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop]), true), (Block) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_843() -#line 5439 "cs-parser.jay" +#line 5444 "cs-parser.jay" { report.Error (1524, GetLocation (yyVals[-2+yyTop]), "Expected catch or finally"); yyVal = null; } void case_844() -#line 5447 "cs-parser.jay" +#line 5452 "cs-parser.jay" { var l = new List (2); @@ -7966,7 +7977,7 @@ void case_844() } void case_845() -#line 5454 "cs-parser.jay" +#line 5459 "cs-parser.jay" { var l = (List) yyVals[-1+yyTop]; @@ -7984,7 +7995,7 @@ void case_845() } void case_849() -#line 5482 "cs-parser.jay" +#line 5487 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch (current_block, GetLocation (yyVals[-4+yyTop])); @@ -8001,7 +8012,7 @@ void case_849() } void case_851() -#line 5501 "cs-parser.jay" +#line 5506 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -8014,14 +8025,14 @@ void case_851() } void case_854() -#line 5529 "cs-parser.jay" +#line 5534 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } void case_856() -#line 5539 "cs-parser.jay" +#line 5544 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8031,7 +8042,7 @@ void case_856() } void case_857() -#line 5550 "cs-parser.jay" +#line 5555 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8043,14 +8054,14 @@ void case_857() } void case_858() -#line 5560 "cs-parser.jay" +#line 5565 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_859() -#line 5565 "cs-parser.jay" +#line 5570 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8062,7 +8073,7 @@ void case_859() } void case_860() -#line 5578 "cs-parser.jay" +#line 5583 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8074,14 +8085,14 @@ void case_860() } void case_861() -#line 5588 "cs-parser.jay" +#line 5593 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_862() -#line 5593 "cs-parser.jay" +#line 5598 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8093,7 +8104,7 @@ void case_862() } void case_863() -#line 5603 "cs-parser.jay" +#line 5608 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8104,14 +8115,14 @@ void case_863() } void case_865() -#line 5619 "cs-parser.jay" +#line 5624 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; yyVal = current_variable; } void case_866() -#line 5630 "cs-parser.jay" +#line 5635 "cs-parser.jay" { lexer.query_parsing = false; @@ -8125,7 +8136,7 @@ void case_866() } void case_867() -#line 5642 "cs-parser.jay" +#line 5647 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -8137,7 +8148,7 @@ void case_867() } void case_868() -#line 5653 "cs-parser.jay" +#line 5658 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -8147,7 +8158,7 @@ void case_868() } void case_869() -#line 5660 "cs-parser.jay" +#line 5665 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); @@ -8155,7 +8166,7 @@ void case_869() } void case_870() -#line 5669 "cs-parser.jay" +#line 5674 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8165,7 +8176,7 @@ void case_870() } void case_871() -#line 5677 "cs-parser.jay" +#line 5682 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8179,7 +8190,7 @@ void case_871() } void case_872() -#line 5692 "cs-parser.jay" +#line 5697 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8189,7 +8200,7 @@ void case_872() } void case_873() -#line 5700 "cs-parser.jay" +#line 5705 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8203,7 +8214,7 @@ void case_873() } void case_875() -#line 5719 "cs-parser.jay" +#line 5724 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8216,7 +8227,7 @@ void case_875() } void case_877() -#line 5734 "cs-parser.jay" +#line 5739 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8232,7 +8243,7 @@ void case_877() } void case_878() -#line 5751 "cs-parser.jay" +#line 5756 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -8249,14 +8260,14 @@ void case_878() } void case_880() -#line 5767 "cs-parser.jay" +#line 5772 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_882() -#line 5779 "cs-parser.jay" +#line 5784 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8265,7 +8276,7 @@ void case_882() } void case_883() -#line 5786 "cs-parser.jay" +#line 5791 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8275,7 +8286,7 @@ void case_883() } void case_884() -#line 5794 "cs-parser.jay" +#line 5799 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8284,7 +8295,7 @@ void case_884() } void case_885() -#line 5801 "cs-parser.jay" +#line 5806 "cs-parser.jay" { yyVal = new Linq.GroupBy ((Linq.QueryBlock)current_block, (Expression)yyVals[-3+yyTop], linq_clause_blocks.Pop (), (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); @@ -8294,14 +8305,14 @@ void case_885() } void case_889() -#line 5818 "cs-parser.jay" +#line 5823 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_896() -#line 5838 "cs-parser.jay" +#line 5843 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8315,7 +8326,7 @@ void case_896() } void case_898() -#line 5857 "cs-parser.jay" +#line 5862 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8324,7 +8335,7 @@ void case_898() } void case_899() -#line 5867 "cs-parser.jay" +#line 5872 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8334,7 +8345,7 @@ void case_899() } void case_900() -#line 5875 "cs-parser.jay" +#line 5880 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8344,7 +8355,7 @@ void case_900() } void case_901() -#line 5883 "cs-parser.jay" +#line 5888 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8354,7 +8365,7 @@ void case_901() } void case_902() -#line 5891 "cs-parser.jay" +#line 5896 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8394,7 +8405,7 @@ void case_902() } void case_903() -#line 5929 "cs-parser.jay" +#line 5934 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8404,7 +8415,7 @@ void case_903() } void case_904() -#line 5937 "cs-parser.jay" +#line 5942 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8414,7 +8425,7 @@ void case_904() } void case_905() -#line 5945 "cs-parser.jay" +#line 5950 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8424,7 +8435,7 @@ void case_905() } void case_906() -#line 5953 "cs-parser.jay" +#line 5958 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8466,7 +8477,7 @@ void case_906() } void case_910() -#line 6008 "cs-parser.jay" +#line 6013 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8475,7 +8486,7 @@ void case_910() } void case_912() -#line 6019 "cs-parser.jay" +#line 6024 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8484,14 +8495,14 @@ void case_912() } void case_913() -#line 6026 "cs-parser.jay" +#line 6031 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } void case_915() -#line 6035 "cs-parser.jay" +#line 6040 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8500,42 +8511,42 @@ void case_915() } void case_916() -#line 6042 "cs-parser.jay" +#line 6047 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } void case_918() -#line 6054 "cs-parser.jay" +#line 6059 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_919() -#line 6059 "cs-parser.jay" +#line 6064 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_921() -#line 6071 "cs-parser.jay" +#line 6076 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_922() -#line 6076 "cs-parser.jay" +#line 6081 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_924() -#line 6086 "cs-parser.jay" +#line 6091 "cs-parser.jay" { /* query continuation block is not linked with query block but with block*/ /* before. This means each query can use same range variable names for*/ @@ -8553,7 +8564,7 @@ void case_924() } void case_925() -#line 6102 "cs-parser.jay" +#line 6107 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -8564,7 +8575,7 @@ void case_925() } void case_928() -#line 6129 "cs-parser.jay" +#line 6134 "cs-parser.jay" { current_container = new Class (current_namespace, current_class, new MemberName (""), Modifiers.PUBLIC, null); current_class = current_container; @@ -8596,7 +8607,7 @@ void case_928() } void case_929() -#line 6159 "cs-parser.jay" +#line 6164 "cs-parser.jay" { --lexer.parsing_block; Method method = (Method) oob_stack.Pop (); @@ -8608,7 +8619,7 @@ void case_929() } void case_939() -#line 6202 "cs-parser.jay" +#line 6207 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -8616,7 +8627,7 @@ void case_939() } void case_940() -#line 6208 "cs-parser.jay" +#line 6213 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -8625,14 +8636,14 @@ void case_940() } void case_943() -#line 6223 "cs-parser.jay" +#line 6228 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], new MemberName (MemberCache.IndexerNameAlias)); } void case_944() -#line 6228 "cs-parser.jay" +#line 6233 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8642,7 +8653,7 @@ void case_944() } void case_945() -#line 6236 "cs-parser.jay" +#line 6241 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8652,7 +8663,7 @@ void case_945() } void case_946() -#line 6244 "cs-parser.jay" +#line 6249 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); module.DocumentationBuilder.ParsedParameters = p; @@ -8661,7 +8672,7 @@ void case_946() } void case_954() -#line 6282 "cs-parser.jay" +#line 6287 "cs-parser.jay" { var parameters = new List (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); @@ -8669,7 +8680,7 @@ void case_954() } void case_955() -#line 6288 "cs-parser.jay" +#line 6293 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); @@ -8677,7 +8688,7 @@ void case_955() } void case_956() -#line 6297 "cs-parser.jay" +#line 6302 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -12013,7 +12024,7 @@ void case_956() -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, }; -#line 6306 "cs-parser.jay" +#line 6311 "cs-parser.jay" // // A class used to hold info about an operator declarator diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index df82d27754..1357783e1f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -2904,7 +2904,10 @@ type_parameter : opt_attributes opt_type_parameter_variance IDENTIFIER { var lt = (Tokenizer.LocatedToken)$3; - $$ = new TypeParameterName (lt.Value, (Attributes)$1, (Variance) $2, lt.Location); + var variance = (Variance) $2; + $$ = new TypeParameterName (lt.Value, (Attributes)$1, variance, lt.Location); + if (variance != Variance.None) + lbag.AddLocation ($$, savedLocation); } | error { @@ -4613,10 +4616,12 @@ type_parameter_variance : OUT { $$ = Variance.Covariant; + savedLocation = GetLocation ($1); } | IN { $$ = Variance.Contravariant; + savedLocation = GetLocation ($1); } ;