diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index 582a22558c..c1bac7ccfe 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -392,9 +392,8 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null && curLoc < location.Count) { newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.RBrace); - // optional semicolon - if (location != null && curLoc < location.Count) - newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.Semicolon); + if (c.HasOptionalSemicolon) + newType.AddChild (new CSharpTokenNode (Convert (c.OptionalSemicolon), 1), AstNode.Roles.Semicolon); } else { // parser error, set end node to max value. @@ -446,9 +445,8 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null && location.Count > 2) { if (location != null && curLoc < location.Count) newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.RBrace); - // optional semicolon - if (location != null && curLoc < location.Count) - newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.Semicolon); + if (s.HasOptionalSemicolon) + newType.AddChild (new CSharpTokenNode (Convert (s.OptionalSemicolon), 1), AstNode.Roles.Semicolon); } else { // parser error, set end node to max value. newType.AddChild (new ErrorNode (), AstNode.Roles.Error); @@ -497,9 +495,8 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null && location.Count > 2) { if (location != null && curLoc < location.Count) newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.RBrace); - // optional semicolon - if (location != null && curLoc < location.Count) - newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.Semicolon); + if (i.HasOptionalSemicolon) + newType.AddChild (new CSharpTokenNode (Convert (i.OptionalSemicolon), 1), AstNode.Roles.Semicolon); } else { // parser error, set end node to max value. newType.AddChild (new ErrorNode (), AstNode.Roles.Error); @@ -578,13 +575,19 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null && curLoc < location.Count) newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.LBrace); typeStack.Push (newType); - base.Visit (e); + + foreach (EnumMember member in e.OrderedAllMembers) { + Visit (member); + if (location != null && curLoc < location.Count - 1) //last one is closing brace + newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.Comma); + } + if (location != null && location.Count > 2) { if (location != null && curLoc < location.Count) newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.RBrace); - // optional semicolon - if (location != null && curLoc < location.Count) - newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), 1), AstNode.Roles.Semicolon); + + if (e.HasOptionalSemicolon) + newType.AddChild (new CSharpTokenNode (Convert (e.OptionalSemicolon), 1), AstNode.Roles.Semicolon); } else { // parser error, set end node to max value. newType.AddChild (new ErrorNode (), AstNode.Roles.Error); @@ -1884,16 +1887,19 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild ((Expression)leftExpr, MemberReferenceExpression.Roles.TargetExpression); } } - + var location = LocationsBag.GetLocations (memberAccess); + if (location != null) + result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberReferenceExpression.Roles.Dot); + result.AddChild (Identifier.Create (memberAccess.Name, Convert (memberAccess.Location)), MemberReferenceExpression.Roles.Identifier); if (memberAccess.TypeArguments != null) { - var location = LocationsBag.GetLocations (memberAccess); - if (location != null) - result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MemberReferenceExpression.Roles.LChevron); - AddTypeArguments (result, location, memberAccess.TypeArguments); - if (location != null && location.Count > 1) - result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), MemberReferenceExpression.Roles.RChevron); + var locationTypeArgs = LocationsBag.GetLocations (memberAccess.TypeArguments); + if (locationTypeArgs != null) + result.AddChild (new CSharpTokenNode (Convert (locationTypeArgs[0]), 1), MemberReferenceExpression.Roles.LChevron); + AddTypeArguments (result, locationTypeArgs, memberAccess.TypeArguments); + if (locationTypeArgs != null && locationTypeArgs.Count > 1) + result.AddChild (new CSharpTokenNode (Convert (locationTypeArgs[1]), 1), MemberReferenceExpression.Roles.RChevron); } return result; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index fef9d4c0f6..172d9d419b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -144,11 +144,12 @@ namespace Mono.CSharp LocationsBag lbag; UsingsBag ubag; List> mod_locations; - Location parameterModifierLocation, savedLocation, savedOpenLocation, savedCloseLocation, savedEnumBaseTypeColonLocation; + Location parameterModifierLocation, savedLocation, savedOpenLocation, savedCloseLocation; Location savedAttrParenOpenLocation, savedAttrParenCloseLocation; Stack> locationListStack = new Stack> (); // used for type parameters List attributeCommas = new List (); List parameterListCommas = new List (); + List enumCommas = new List (); object lastYYVal; @@ -1400,20 +1401,20 @@ namespace Mono.CSharp yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: -#line 397 "cs-parser.jay" +#line 398 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 2: -#line 398 "cs-parser.jay" +#line 399 "cs-parser.jay" { Lexer.CompleteOnEOF = false; } break; case 6: case_6(); break; case 7: -#line 415 "cs-parser.jay" +#line 416 "cs-parser.jay" { module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace); } @@ -1425,7 +1426,7 @@ case 13: case_13(); break; case 14: -#line 453 "cs-parser.jay" +#line 454 "cs-parser.jay" { syntax_error (GetLocation (yyVals[-1+yyTop]), "`alias' expected"); /* TODO: better*/ } @@ -1470,7 +1471,7 @@ case 41: case_41(); break; case 42: -#line 641 "cs-parser.jay" +#line 642 "cs-parser.jay" { current_namespace.DeclarationFound = true; } @@ -1500,18 +1501,18 @@ case 57: case_57(); break; case 58: -#line 737 "cs-parser.jay" +#line 738 "cs-parser.jay" { yyVal = "event"; } break; case 59: -#line 738 "cs-parser.jay" +#line 739 "cs-parser.jay" { yyVal = "return"; } break; case 60: case_60(); break; case 61: -#line 755 "cs-parser.jay" +#line 756 "cs-parser.jay" { yyVal = new List (4) { (Attribute) yyVals[0+yyTop] }; } @@ -1520,7 +1521,7 @@ case 62: case_62(); break; case 63: -#line 770 "cs-parser.jay" +#line 771 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1529,14 +1530,14 @@ case 64: case_64(); break; case 66: -#line 794 "cs-parser.jay" +#line 795 "cs-parser.jay" { yyVal = null; } break; case 67: case_67(); break; case 68: -#line 805 "cs-parser.jay" +#line 806 "cs-parser.jay" { yyVal = null; } break; case 69: @@ -1552,13 +1553,13 @@ case 72: case_72(); break; case 73: -#line 849 "cs-parser.jay" +#line 850 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 75: -#line 857 "cs-parser.jay" +#line 858 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1570,17 +1571,17 @@ case 77: case_77(); break; case 78: -#line 882 "cs-parser.jay" +#line 883 "cs-parser.jay" { yyVal = null; } break; case 79: -#line 886 "cs-parser.jay" +#line 887 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; case 80: -#line 890 "cs-parser.jay" +#line 891 "cs-parser.jay" { yyVal = Argument.AType.Out; } @@ -1589,7 +1590,7 @@ case 95: case_95(); break; case 96: -#line 931 "cs-parser.jay" +#line 932 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -1607,7 +1608,7 @@ case 100: case_100(); break; case 101: -#line 963 "cs-parser.jay" +#line 965 "cs-parser.jay" { Error_SyntaxError (yyToken); } @@ -1616,7 +1617,7 @@ case 102: case_102(); break; case 103: -#line 975 "cs-parser.jay" +#line 977 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } @@ -1628,13 +1629,13 @@ case 119: case_119(); break; case 122: -#line 1044 "cs-parser.jay" +#line 1046 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 123: -#line 1048 "cs-parser.jay" +#line 1050 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } @@ -1643,7 +1644,7 @@ case 124: case_124(); break; case 125: -#line 1064 "cs-parser.jay" +#line 1066 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1667,7 +1668,7 @@ case 133: case_133(); break; case 134: -#line 1143 "cs-parser.jay" +#line 1145 "cs-parser.jay" { report.Error (1641, GetLocation (yyVals[-1+yyTop]), "A fixed size buffer field must have the array size specifier after the field name"); } @@ -1679,13 +1680,13 @@ case 137: case_137(); break; case 140: -#line 1173 "cs-parser.jay" +#line 1175 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 141: -#line 1177 "cs-parser.jay" +#line 1179 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } @@ -1694,7 +1695,7 @@ case 142: case_142(); break; case 143: -#line 1190 "cs-parser.jay" +#line 1192 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1703,13 +1704,13 @@ case 144: case_144(); break; case 147: -#line 1209 "cs-parser.jay" +#line 1211 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 148: -#line 1213 "cs-parser.jay" +#line 1215 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } @@ -1718,7 +1719,7 @@ case 149: case_149(); break; case 150: -#line 1229 "cs-parser.jay" +#line 1231 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1739,13 +1740,13 @@ case 157: case_157(); break; case 158: -#line 1297 "cs-parser.jay" +#line 1299 "cs-parser.jay" { valid_param_mod = ParameterModifierType.All; } break; case 159: -#line 1301 "cs-parser.jay" +#line 1303 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -1754,7 +1755,7 @@ case 160: case_160(); break; case 161: -#line 1341 "cs-parser.jay" +#line 1343 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } @@ -1763,7 +1764,7 @@ case 162: case_162(); break; case 163: -#line 1351 "cs-parser.jay" +#line 1353 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -1775,11 +1776,11 @@ case 165: case_165(); break; case 167: -#line 1425 "cs-parser.jay" +#line 1427 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; case 168: -#line 1429 "cs-parser.jay" +#line 1431 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 170: @@ -1804,13 +1805,13 @@ case 176: case_176(); break; case 177: -#line 1501 "cs-parser.jay" +#line 1503 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; case 178: -#line 1505 "cs-parser.jay" +#line 1507 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); } @@ -1834,7 +1835,7 @@ case 184: case_184(); break; case 185: -#line 1580 "cs-parser.jay" +#line 1582 "cs-parser.jay" { ++lexer.parsing_block; } @@ -1843,11 +1844,11 @@ case 186: case_186(); break; case 187: -#line 1621 "cs-parser.jay" +#line 1623 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; case 189: -#line 1629 "cs-parser.jay" +#line 1631 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -1880,7 +1881,7 @@ case 198: case_198(); break; case 199: -#line 1718 "cs-parser.jay" +#line 1720 "cs-parser.jay" { Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); } @@ -1901,7 +1902,7 @@ case 204: case_204(); break; case 205: -#line 1772 "cs-parser.jay" +#line 1774 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; } @@ -1910,7 +1911,7 @@ case 206: case_206(); break; case 207: -#line 1801 "cs-parser.jay" +#line 1803 "cs-parser.jay" { lexer.PropertyParsing = false; } @@ -1940,7 +1941,7 @@ case 220: case_220(); break; case 221: -#line 1950 "cs-parser.jay" +#line 1952 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -2272,9 +2273,9 @@ case 326: case_326(); break; case 329: -#line 2634 "cs-parser.jay" +#line 2626 "cs-parser.jay" { - lbag.AddLocation (yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + enumCommas.Add (GetLocation (yyVals[0+yyTop])); } break; case 331: @@ -2290,7 +2291,7 @@ case 334: case_334(); break; case 335: -#line 2692 "cs-parser.jay" +#line 2684 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } @@ -2299,7 +2300,7 @@ case 336: case_336(); break; case 337: -#line 2714 "cs-parser.jay" +#line 2706 "cs-parser.jay" { lexer.ConstraintsParsing = false; } @@ -2332,7 +2333,7 @@ case 350: case_350(); break; case 351: -#line 2818 "cs-parser.jay" +#line 2810 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } @@ -2377,13 +2378,13 @@ case 366: case_366(); break; case 368: -#line 2936 "cs-parser.jay" +#line 2928 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; case 369: -#line 2943 "cs-parser.jay" +#line 2935 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } @@ -2398,7 +2399,7 @@ case 375: case_375(); break; case 377: -#line 2981 "cs-parser.jay" +#line 2973 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2407,7 +2408,7 @@ case 378: case_378(); break; case 379: -#line 3001 "cs-parser.jay" +#line 2993 "cs-parser.jay" { yyVal = new ComposedCast (((MemberName) yyVals[-1+yyTop]).GetTypeExpression (), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2416,13 +2417,13 @@ case 380: case_380(); break; case 381: -#line 3010 "cs-parser.jay" +#line 3002 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 382: -#line 3014 "cs-parser.jay" +#line 3006 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -2440,63 +2441,63 @@ case 386: case_386(); break; case 387: -#line 3053 "cs-parser.jay" +#line 3045 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; case 388: -#line 3054 "cs-parser.jay" +#line 3046 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; case 389: -#line 3055 "cs-parser.jay" +#line 3047 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; case 390: -#line 3056 "cs-parser.jay" +#line 3048 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; case 391: -#line 3057 "cs-parser.jay" +#line 3049 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; case 392: -#line 3058 "cs-parser.jay" +#line 3050 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; case 394: -#line 3063 "cs-parser.jay" +#line 3055 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; case 395: -#line 3064 "cs-parser.jay" +#line 3056 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; case 396: -#line 3065 "cs-parser.jay" +#line 3057 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; case 397: -#line 3066 "cs-parser.jay" +#line 3058 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; case 398: -#line 3067 "cs-parser.jay" +#line 3059 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; case 399: -#line 3068 "cs-parser.jay" +#line 3060 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; case 400: -#line 3069 "cs-parser.jay" +#line 3061 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; case 401: -#line 3070 "cs-parser.jay" +#line 3062 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; case 402: -#line 3071 "cs-parser.jay" +#line 3063 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; case 423: @@ -2506,22 +2507,22 @@ case 424: case_424(); break; case 428: -#line 3118 "cs-parser.jay" +#line 3110 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; case 429: -#line 3122 "cs-parser.jay" +#line 3114 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; case 430: -#line 3123 "cs-parser.jay" +#line 3115 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; case 435: case_435(); break; case 436: -#line 3156 "cs-parser.jay" +#line 3148 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); } @@ -2539,7 +2540,7 @@ case 440: case_440(); break; case 441: -#line 3188 "cs-parser.jay" +#line 3180 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); } @@ -2548,7 +2549,7 @@ case 442: case_442(); break; case 443: -#line 3196 "cs-parser.jay" +#line 3188 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } @@ -2560,7 +2561,7 @@ case 445: case_445(); break; case 446: -#line 3212 "cs-parser.jay" +#line 3204 "cs-parser.jay" { yyVal = null; } break; case 448: @@ -2570,11 +2571,11 @@ case 449: case_449(); break; case 450: -#line 3235 "cs-parser.jay" +#line 3227 "cs-parser.jay" { yyVal = null; } break; case 451: -#line 3239 "cs-parser.jay" +#line 3231 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -2592,7 +2593,7 @@ case 455: case_455(); break; case 456: -#line 3272 "cs-parser.jay" +#line 3264 "cs-parser.jay" { yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } @@ -2607,7 +2608,7 @@ case 459: case_459(); break; case 462: -#line 3300 "cs-parser.jay" +#line 3292 "cs-parser.jay" { yyVal = null; } break; case 464: @@ -2626,7 +2627,7 @@ case 468: case_468(); break; case 469: -#line 3352 "cs-parser.jay" +#line 3344 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } @@ -2662,13 +2663,13 @@ case 483: case_483(); break; case 484: -#line 3439 "cs-parser.jay" +#line 3431 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 486: -#line 3447 "cs-parser.jay" +#line 3439 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } @@ -2680,13 +2681,13 @@ case 488: case_488(); break; case 489: -#line 3467 "cs-parser.jay" +#line 3459 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 490: -#line 3474 "cs-parser.jay" +#line 3466 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } @@ -2713,7 +2714,7 @@ case 497: case_497(); break; case 498: -#line 3540 "cs-parser.jay" +#line 3532 "cs-parser.jay" { ++lexer.parsing_type; } @@ -2725,7 +2726,7 @@ case 500: case_500(); break; case 503: -#line 3567 "cs-parser.jay" +#line 3559 "cs-parser.jay" { yyVal = null; } break; case 505: @@ -2756,25 +2757,25 @@ case 516: case_516(); break; case 517: -#line 3645 "cs-parser.jay" +#line 3637 "cs-parser.jay" { yyVal = 2; } break; case 518: -#line 3649 "cs-parser.jay" +#line 3641 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; case 519: -#line 3656 "cs-parser.jay" +#line 3648 "cs-parser.jay" { yyVal = null; } break; case 520: -#line 3660 "cs-parser.jay" +#line 3652 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -2792,7 +2793,7 @@ case 524: case_524(); break; case 525: -#line 3704 "cs-parser.jay" +#line 3696 "cs-parser.jay" { lexer.TypeOfParsing = true; } @@ -2837,7 +2838,7 @@ case 540: case_540(); break; case 541: -#line 3818 "cs-parser.jay" +#line 3810 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); } @@ -2846,25 +2847,25 @@ case 542: case_542(); break; case 543: -#line 3831 "cs-parser.jay" +#line 3823 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; case 544: -#line 3835 "cs-parser.jay" +#line 3827 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); } break; case 545: -#line 3842 "cs-parser.jay" +#line 3834 "cs-parser.jay" { yyVal = ParametersCompiled.Undefined; } break; case 547: -#line 3850 "cs-parser.jay" +#line 3842 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -2876,13 +2877,13 @@ case 549: case_549(); break; case 551: -#line 3876 "cs-parser.jay" +#line 3868 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 552: -#line 3880 "cs-parser.jay" +#line 3872 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -2894,37 +2895,37 @@ case 556: case_556(); break; case 558: -#line 3910 "cs-parser.jay" +#line 3902 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 559: -#line 3914 "cs-parser.jay" +#line 3906 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 560: -#line 3918 "cs-parser.jay" +#line 3910 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 561: -#line 3922 "cs-parser.jay" +#line 3914 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 562: -#line 3926 "cs-parser.jay" +#line 3918 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 563: -#line 3930 "cs-parser.jay" +#line 3922 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -2942,7 +2943,7 @@ case 569: case_569(); break; case 570: -#line 3962 "cs-parser.jay" +#line 3954 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -2951,13 +2952,13 @@ case 571: case_571(); break; case 572: -#line 3971 "cs-parser.jay" +#line 3963 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 573: -#line 3975 "cs-parser.jay" +#line 3967 "cs-parser.jay" { yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3008,7 +3009,7 @@ case 598: case_598(); break; case 599: -#line 4099 "cs-parser.jay" +#line 4091 "cs-parser.jay" { yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3059,14 +3060,14 @@ case 614: case_614(); break; case 615: -#line 4196 "cs-parser.jay" +#line 4188 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 616: case_616(); break; case 619: -#line 4211 "cs-parser.jay" +#line 4203 "cs-parser.jay" { start_block (lexer.Location); } @@ -3090,7 +3091,7 @@ case 626: case_626(); break; case 627: -#line 4256 "cs-parser.jay" +#line 4248 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3102,7 +3103,7 @@ case 629: case_629(); break; case 630: -#line 4270 "cs-parser.jay" +#line 4262 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3114,7 +3115,7 @@ case 632: case_632(); break; case 638: -#line 4295 "cs-parser.jay" +#line 4287 "cs-parser.jay" { yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } @@ -3129,13 +3130,13 @@ case 641: case_641(); break; case 643: -#line 4324 "cs-parser.jay" +#line 4316 "cs-parser.jay" { yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; case 644: -#line 4337 "cs-parser.jay" +#line 4329 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -3153,11 +3154,11 @@ case 648: case_648(); break; case 649: -#line 4380 "cs-parser.jay" +#line 4370 "cs-parser.jay" { yyVal = null; } break; case 650: -#line 4382 "cs-parser.jay" +#line 4372 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 651: @@ -3215,7 +3216,7 @@ case 671: case_671(); break; case 673: -#line 4511 "cs-parser.jay" +#line 4501 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3245,19 +3246,19 @@ case 681: case_681(); break; case 682: -#line 4600 "cs-parser.jay" +#line 4590 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; case 683: -#line 4604 "cs-parser.jay" +#line 4594 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); } break; case 684: -#line 4611 "cs-parser.jay" +#line 4601 "cs-parser.jay" { yyVal = Variance.None; } @@ -3266,13 +3267,13 @@ case 685: case_685(); break; case 686: -#line 4625 "cs-parser.jay" +#line 4615 "cs-parser.jay" { yyVal = Variance.Covariant; } break; case 687: -#line 4629 "cs-parser.jay" +#line 4619 "cs-parser.jay" { yyVal = Variance.Contravariant; } @@ -3281,7 +3282,7 @@ case 688: case_688(); break; case 689: -#line 4654 "cs-parser.jay" +#line 4644 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3299,13 +3300,13 @@ case 693: case_693(); break; case 698: -#line 4698 "cs-parser.jay" +#line 4688 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 699: -#line 4702 "cs-parser.jay" +#line 4692 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } @@ -3314,13 +3315,13 @@ case 701: case_701(); break; case 704: -#line 4726 "cs-parser.jay" +#line 4716 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 705: -#line 4730 "cs-parser.jay" +#line 4720 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } @@ -3353,13 +3354,13 @@ case 744: case_744(); break; case 745: -#line 4874 "cs-parser.jay" +#line 4864 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 746: -#line 4878 "cs-parser.jay" +#line 4868 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -3371,7 +3372,7 @@ case 749: case_749(); break; case 750: -#line 4899 "cs-parser.jay" +#line 4889 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } @@ -3401,7 +3402,7 @@ case 763: case_763(); break; case 764: -#line 4988 "cs-parser.jay" +#line 4978 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); } @@ -3422,15 +3423,15 @@ case 774: case_774(); break; case 775: -#line 5038 "cs-parser.jay" +#line 5028 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 776: -#line 5042 "cs-parser.jay" +#line 5032 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 777: -#line 5043 "cs-parser.jay" +#line 5033 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 778: @@ -3449,7 +3450,7 @@ case 784: case_784(); break; case 785: -#line 5111 "cs-parser.jay" +#line 5101 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); } @@ -3470,13 +3471,13 @@ case 791: case_791(); break; case 792: -#line 5155 "cs-parser.jay" +#line 5145 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; case 793: -#line 5159 "cs-parser.jay" +#line 5149 "cs-parser.jay" { yyVal = new SwitchSection ((List) yyVals[-2+yyTop], current_block); } @@ -3491,7 +3492,7 @@ case 796: case_796(); break; case 797: -#line 5188 "cs-parser.jay" +#line 5178 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } @@ -3506,7 +3507,7 @@ case 804: case_804(); break; case 805: -#line 5227 "cs-parser.jay" +#line 5217 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3518,7 +3519,7 @@ case 807: case_807(); break; case 808: -#line 5255 "cs-parser.jay" +#line 5245 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 810: @@ -3528,11 +3529,11 @@ case 811: case_811(); break; case 813: -#line 5276 "cs-parser.jay" +#line 5266 "cs-parser.jay" { yyVal = null; } break; case 815: -#line 5281 "cs-parser.jay" +#line 5271 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 819: @@ -3575,7 +3576,7 @@ case 837: case_837(); break; case 840: -#line 5436 "cs-parser.jay" +#line 5426 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } @@ -3596,7 +3597,7 @@ case 845: case_845(); break; case 848: -#line 5489 "cs-parser.jay" +#line 5479 "cs-parser.jay" { yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3605,7 +3606,7 @@ case 849: case_849(); break; case 850: -#line 5508 "cs-parser.jay" +#line 5498 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } @@ -3614,13 +3615,13 @@ case 851: case_851(); break; case 852: -#line 5526 "cs-parser.jay" +#line 5516 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 853: -#line 5533 "cs-parser.jay" +#line 5523 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3629,7 +3630,7 @@ case 854: case_854(); break; case 855: -#line 5543 "cs-parser.jay" +#line 5533 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } @@ -3659,7 +3660,7 @@ case 863: case_863(); break; case 864: -#line 5626 "cs-parser.jay" +#line 5616 "cs-parser.jay" { report.Error (210, lexer.Location, "You must provide an initializer in a fixed or using statement declaration"); } @@ -3692,7 +3693,7 @@ case 873: case_873(); break; case 874: -#line 5726 "cs-parser.jay" +#line 5716 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3701,7 +3702,7 @@ case 875: case_875(); break; case 876: -#line 5741 "cs-parser.jay" +#line 5731 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3716,7 +3717,7 @@ case 880: case_880(); break; case 881: -#line 5786 "cs-parser.jay" +#line 5776 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3737,7 +3738,7 @@ case 889: case_889(); break; case 895: -#line 5845 "cs-parser.jay" +#line 5835 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3746,7 +3747,7 @@ case 896: case_896(); break; case 897: -#line 5864 "cs-parser.jay" +#line 5854 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3779,13 +3780,13 @@ case 906: case_906(); break; case 908: -#line 6008 "cs-parser.jay" +#line 5998 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 909: -#line 6015 "cs-parser.jay" +#line 6005 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3806,7 +3807,7 @@ case 916: case_916(); break; case 917: -#line 6061 "cs-parser.jay" +#line 6051 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } @@ -3818,7 +3819,7 @@ case 919: case_919(); break; case 920: -#line 6078 "cs-parser.jay" +#line 6068 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } @@ -3842,13 +3843,13 @@ case 929: case_929(); break; case 937: -#line 6202 "cs-parser.jay" +#line 6192 "cs-parser.jay" { module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; } break; case 938: -#line 6209 "cs-parser.jay" +#line 6199 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; } @@ -3860,13 +3861,13 @@ case 940: case_940(); break; case 941: -#line 6226 "cs-parser.jay" +#line 6216 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], new MemberName (MemberCache.IndexerNameAlias)); } break; case 942: -#line 6230 "cs-parser.jay" +#line 6220 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3884,25 +3885,25 @@ case 946: case_946(); break; case 948: -#line 6266 "cs-parser.jay" +#line 6256 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; case 950: -#line 6274 "cs-parser.jay" +#line 6264 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 951: -#line 6278 "cs-parser.jay" +#line 6268 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 952: -#line 6285 "cs-parser.jay" +#line 6275 "cs-parser.jay" { yyVal = new List (0); } @@ -3952,7 +3953,7 @@ case 956: All more than 3 lines long rules are wrapped into a method */ void case_6() -#line 405 "cs-parser.jay" +#line 406 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { Attributes attrs = (Attributes) yyVals[0+yyTop]; @@ -3962,7 +3963,7 @@ void case_6() } void case_8() -#line 417 "cs-parser.jay" +#line 418 "cs-parser.jay" { if (yyToken == Token.EXTERN_ALIAS) report.Error (439, lexer.Location, "An extern alias declaration must precede all other elements"); @@ -3971,7 +3972,7 @@ void case_8() } void case_13() -#line 437 "cs-parser.jay" +#line 438 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -3987,21 +3988,21 @@ void case_13() } void case_17() -#line 463 "cs-parser.jay" +#line 464 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_18() -#line 468 "cs-parser.jay" +#line 469 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_19() -#line 476 "cs-parser.jay" +#line 477 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { @@ -4014,21 +4015,21 @@ void case_19() } void case_20() -#line 487 "cs-parser.jay" +#line 488 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_21() -#line 495 "cs-parser.jay" +#line 496 "cs-parser.jay" { current_namespace.AddUsing ((MemberName) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); ubag.AddUsing (GetLocation (yyVals[-2+yyTop]), (MemberName) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } void case_22() -#line 508 "cs-parser.jay" +#line 509 "cs-parser.jay" { Attributes attrs = (Attributes) yyVals[-2+yyTop]; MemberName name = (MemberName) yyVals[0+yyTop]; @@ -4061,7 +4062,7 @@ void case_22() } void case_23() -#line 539 "cs-parser.jay" +#line 540 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; @@ -4069,7 +4070,7 @@ void case_23() } void case_24() -#line 545 "cs-parser.jay" +#line 546 "cs-parser.jay" { current_namespace = current_namespace.Parent; current_class = current_namespace.SlaveDeclSpace; @@ -4082,14 +4083,14 @@ void case_24() } void case_25() -#line 559 "cs-parser.jay" +#line 560 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName (lt.Value, lt.Location); } void case_26() -#line 564 "cs-parser.jay" +#line 565 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location); @@ -4097,14 +4098,14 @@ void case_26() } void case_27() -#line 570 "cs-parser.jay" +#line 571 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new MemberName ("", lexer.Location); } void case_32() -#line 588 "cs-parser.jay" +#line 589 "cs-parser.jay" { MemberName name = (MemberName) yyVals[0+yyTop]; @@ -4115,7 +4116,7 @@ void case_32() } void case_41() -#line 620 "cs-parser.jay" +#line 621 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { TypeContainer ds = (TypeContainer)yyVals[0+yyTop]; @@ -4136,7 +4137,7 @@ void case_41() } void case_50() -#line 670 "cs-parser.jay" +#line 671 "cs-parser.jay" { var sect = (List) yyVals[0+yyTop]; yyVal = new Attributes (sect); @@ -4148,7 +4149,7 @@ void case_50() } void case_51() -#line 680 "cs-parser.jay" +#line 681 "cs-parser.jay" { Attributes attrs = yyVals[-1+yyTop] as Attributes; var sect = (List) yyVals[0+yyTop]; @@ -4160,21 +4161,21 @@ void case_51() } void case_52() -#line 693 "cs-parser.jay" +#line 694 "cs-parser.jay" { lexer.parsing_attribute_section = true; savedOpenLocation = GetLocation (yyVals[0+yyTop]); } void case_53() -#line 698 "cs-parser.jay" +#line 699 "cs-parser.jay" { lexer.parsing_attribute_section = false; yyVal = yyVals[0+yyTop]; } void case_54() -#line 706 "cs-parser.jay" +#line 707 "cs-parser.jay" { current_attr_target = (string) yyVals[-1+yyTop]; if (current_attr_target == "assembly" || current_attr_target == "module") { @@ -4183,7 +4184,7 @@ void case_54() } void case_55() -#line 713 "cs-parser.jay" +#line 714 "cs-parser.jay" { /* when attribute target is invalid*/ if (current_attr_target == string.Empty) @@ -4197,21 +4198,21 @@ void case_55() } void case_56() -#line 725 "cs-parser.jay" +#line 726 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; savedCloseLocation = GetLocation (yyVals[0+yyTop]); } void case_57() -#line 733 "cs-parser.jay" +#line 734 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = CheckAttributeTarget (lt.Value, lt.Location); } void case_60() -#line 740 "cs-parser.jay" +#line 741 "cs-parser.jay" { if (yyToken == Token.IDENTIFIER) { Error_SyntaxError (yyToken); @@ -4223,7 +4224,7 @@ void case_60() } void case_62() -#line 757 "cs-parser.jay" +#line 758 "cs-parser.jay" { var attrs = (List) yyVals[-2+yyTop]; attrs.Add ((Attribute) yyVals[0+yyTop]); @@ -4233,7 +4234,7 @@ void case_62() } void case_64() -#line 772 "cs-parser.jay" +#line 773 "cs-parser.jay" { --lexer.parsing_block; MemberName mname = (MemberName) yyVals[-2+yyTop]; @@ -4251,7 +4252,7 @@ void case_64() } void case_67() -#line 796 "cs-parser.jay" +#line 797 "cs-parser.jay" { savedAttrParenOpenLocation = GetLocation (yyVals[-2+yyTop]); savedAttrParenCloseLocation = GetLocation (yyVals[0+yyTop]); @@ -4259,7 +4260,7 @@ void case_67() } void case_69() -#line 807 "cs-parser.jay" +#line 808 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); @@ -4267,7 +4268,7 @@ void case_69() } void case_70() -#line 813 "cs-parser.jay" +#line 814 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); @@ -4275,7 +4276,7 @@ void case_70() } void case_71() -#line 819 "cs-parser.jay" +#line 820 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] != null) { @@ -4292,7 +4293,7 @@ void case_71() } void case_72() -#line 834 "cs-parser.jay" +#line 835 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] == null) { @@ -4304,7 +4305,7 @@ void case_72() } void case_76() -#line 859 "cs-parser.jay" +#line 860 "cs-parser.jay" { --lexer.parsing_block; var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; @@ -4313,7 +4314,7 @@ void case_76() } void case_77() -#line 869 "cs-parser.jay" +#line 870 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "named argument"); @@ -4326,7 +4327,7 @@ void case_77() } void case_95() -#line 916 "cs-parser.jay" +#line 917 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", GetSymbolName (yyToken)); @@ -4335,7 +4336,7 @@ void case_95() } void case_97() -#line 933 "cs-parser.jay" +#line 934 "cs-parser.jay" { MemberName name = MakeName ((MemberName) yyVals[0+yyTop]); push_current_class (new Struct (current_namespace, current_class, name, (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); @@ -4343,7 +4344,7 @@ void case_97() } void case_98() -#line 940 "cs-parser.jay" +#line 941 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -4355,7 +4356,7 @@ void case_98() } void case_99() -#line 950 "cs-parser.jay" +#line 951 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) @@ -4363,21 +4364,22 @@ void case_99() } void case_100() -#line 956 "cs-parser.jay" +#line 957 "cs-parser.jay" { - lbag.AppendToMember (current_class, GetLocation (yyVals[0+yyTop])); + if (yyVals[0+yyTop] != null) + current_class.OptionalSemicolon = GetLocation (yyVals[0+yyTop]); yyVal = pop_current_class (); } void case_102() -#line 968 "cs-parser.jay" +#line 970 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_118() -#line 1010 "cs-parser.jay" +#line 1012 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var mod = (Modifiers) yyVals[-3+yyTop]; @@ -4392,7 +4394,7 @@ void case_118() } void case_119() -#line 1023 "cs-parser.jay" +#line 1025 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4405,7 +4407,7 @@ void case_119() } void case_124() -#line 1053 "cs-parser.jay" +#line 1055 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); @@ -4413,7 +4415,7 @@ void case_124() } void case_126() -#line 1066 "cs-parser.jay" +#line 1068 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -4421,14 +4423,14 @@ void case_126() } void case_127() -#line 1072 "cs-parser.jay" +#line 1074 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); yyVal = null; } void case_130() -#line 1087 "cs-parser.jay" +#line 1089 "cs-parser.jay" { lexer.parsing_generic_declaration = false; @@ -4443,7 +4445,7 @@ void case_130() } void case_131() -#line 1102 "cs-parser.jay" +#line 1104 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4456,7 +4458,7 @@ void case_131() } void case_132() -#line 1115 "cs-parser.jay" +#line 1117 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "fixed size buffers"); @@ -4469,7 +4471,7 @@ void case_132() } void case_133() -#line 1126 "cs-parser.jay" +#line 1128 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4483,7 +4485,7 @@ void case_133() } void case_136() -#line 1149 "cs-parser.jay" +#line 1151 "cs-parser.jay" { ++lexer.parsing_block; current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; @@ -4491,7 +4493,7 @@ void case_136() } void case_137() -#line 1155 "cs-parser.jay" +#line 1157 "cs-parser.jay" { --lexer.parsing_block; current_field.Initializer = (Expression) yyVals[0+yyTop]; @@ -4501,7 +4503,7 @@ void case_137() } void case_142() -#line 1182 "cs-parser.jay" +#line 1184 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null); @@ -4509,7 +4511,7 @@ void case_142() } void case_144() -#line 1192 "cs-parser.jay" +#line 1194 "cs-parser.jay" { --lexer.parsing_block; var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; @@ -4518,7 +4520,7 @@ void case_144() } void case_149() -#line 1218 "cs-parser.jay" +#line 1220 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]); @@ -4526,7 +4528,7 @@ void case_149() } void case_151() -#line 1231 "cs-parser.jay" +#line 1233 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); @@ -4534,14 +4536,14 @@ void case_151() } void case_152() -#line 1237 "cs-parser.jay" +#line 1239 "cs-parser.jay" { report.Error (443, lexer.Location, "Value or constant expected"); yyVal = null; } void case_155() -#line 1247 "cs-parser.jay" +#line 1249 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); @@ -4549,7 +4551,7 @@ void case_155() } void case_156() -#line 1256 "cs-parser.jay" +#line 1258 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.NotAllowed; @@ -4559,7 +4561,7 @@ void case_156() } void case_157() -#line 1264 "cs-parser.jay" +#line 1266 "cs-parser.jay" { Method method = (Method) yyVals[-2+yyTop]; method.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -4586,7 +4588,7 @@ void case_157() } void case_160() -#line 1303 "cs-parser.jay" +#line 1305 "cs-parser.jay" { lexer.ConstraintsParsing = false; valid_param_mod = 0; @@ -4621,14 +4623,14 @@ void case_160() } void case_162() -#line 1344 "cs-parser.jay" +#line 1346 "cs-parser.jay" { lexer.parsing_generic_declaration = false; valid_param_mod = ParameterModifierType.All; } void case_164() -#line 1353 "cs-parser.jay" +#line 1355 "cs-parser.jay" { lexer.ConstraintsParsing = false; valid_param_mod = 0; @@ -4680,7 +4682,7 @@ void case_164() } void case_165() -#line 1406 "cs-parser.jay" +#line 1408 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-3+yyTop]; report.Error (1585, name.Location, @@ -4698,7 +4700,7 @@ void case_165() } void case_170() -#line 1435 "cs-parser.jay" +#line 1437 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); @@ -4706,7 +4708,7 @@ void case_170() } void case_171() -#line 1441 "cs-parser.jay" +#line 1443 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add ((Parameter) yyVals[0+yyTop]); @@ -4717,7 +4719,7 @@ void case_171() } void case_172() -#line 1450 "cs-parser.jay" +#line 1452 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[0+yyTop]))); @@ -4728,7 +4730,7 @@ void case_172() } void case_173() -#line 1459 "cs-parser.jay" +#line 1461 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); @@ -4738,7 +4740,7 @@ void case_173() } void case_174() -#line 1467 "cs-parser.jay" +#line 1469 "cs-parser.jay" { if (yyVals[-2+yyTop] != null) report.Error (231, ((Parameter) yyVals[-2+yyTop]).Location, "A params parameter must be the last parameter in a formal parameter list"); @@ -4753,7 +4755,7 @@ void case_174() } void case_175() -#line 1480 "cs-parser.jay" +#line 1482 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -4762,7 +4764,7 @@ void case_175() } void case_176() -#line 1487 "cs-parser.jay" +#line 1489 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -4776,14 +4778,14 @@ void case_176() } void case_179() -#line 1507 "cs-parser.jay" +#line 1509 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = ParametersCompiled.EmptyReadOnlyParameters; } void case_180() -#line 1515 "cs-parser.jay" +#line 1517 "cs-parser.jay" { parameters_bucket.Clear (); Parameter p = (Parameter) yyVals[0+yyTop]; @@ -4794,7 +4796,7 @@ void case_180() } void case_181() -#line 1524 "cs-parser.jay" +#line 1526 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter) yyVals[0+yyTop]; @@ -4814,7 +4816,7 @@ void case_181() } void case_182() -#line 1548 "cs-parser.jay" +#line 1550 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], lt.Location); @@ -4822,7 +4824,7 @@ void case_182() } void case_183() -#line 1557 "cs-parser.jay" +#line 1559 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name"); @@ -4831,7 +4833,7 @@ void case_183() } void case_184() -#line 1567 "cs-parser.jay" +#line 1569 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); @@ -4840,7 +4842,7 @@ void case_184() } void case_186() -#line 1582 "cs-parser.jay" +#line 1584 "cs-parser.jay" { --lexer.parsing_block; if (lang_version <= LanguageVersion.V_3) { @@ -4879,7 +4881,7 @@ void case_186() } void case_190() -#line 1631 "cs-parser.jay" +#line 1633 "cs-parser.jay" { Parameter.Modifier p2 = (Parameter.Modifier)yyVals[0+yyTop]; Parameter.Modifier mod = (Parameter.Modifier)yyVals[-1+yyTop] | p2; @@ -4902,7 +4904,7 @@ void case_190() } void case_191() -#line 1655 "cs-parser.jay" +#line 1657 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Ref) == 0) Error_ParameterModifierNotValid ("ref", GetLocation (yyVals[0+yyTop])); @@ -4911,7 +4913,7 @@ void case_191() } void case_192() -#line 1662 "cs-parser.jay" +#line 1664 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Out) == 0) Error_ParameterModifierNotValid ("out", GetLocation (yyVals[0+yyTop])); @@ -4920,7 +4922,7 @@ void case_192() } void case_193() -#line 1669 "cs-parser.jay" +#line 1671 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.This) == 0) Error_ParameterModifierNotValid ("this", GetLocation (yyVals[0+yyTop])); @@ -4932,14 +4934,14 @@ void case_193() } void case_194() -#line 1682 "cs-parser.jay" +#line 1684 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Attributes) yyVals[-3+yyTop], lt.Location); } void case_195() -#line 1687 "cs-parser.jay" +#line 1689 "cs-parser.jay" { report.Error (1751, GetLocation (yyVals[-4+yyTop]), "Cannot specify a default value for a parameter array"); @@ -4948,21 +4950,21 @@ void case_195() } void case_196() -#line 1694 "cs-parser.jay" +#line 1696 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_197() -#line 1702 "cs-parser.jay" +#line 1704 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Params) == 0) report.Error (1670, (GetLocation (yyVals[0+yyTop])), "The `params' modifier is not allowed in current context"); } void case_198() -#line 1707 "cs-parser.jay" +#line 1709 "cs-parser.jay" { Parameter.Modifier mod = (Parameter.Modifier)yyVals[0+yyTop]; if ((mod & Parameter.Modifier.This) != 0) { @@ -4973,21 +4975,21 @@ void case_198() } void case_200() -#line 1723 "cs-parser.jay" +#line 1725 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Arglist) == 0) report.Error (1669, GetLocation (yyVals[0+yyTop]), "__arglist is not valid in this context"); } void case_201() -#line 1734 "cs-parser.jay" +#line 1736 "cs-parser.jay" { if (doc_support) tmpComment = Lexer.consume_doc_comment (); } void case_202() -#line 1739 "cs-parser.jay" +#line 1741 "cs-parser.jay" { var type = (FullNamedExpression) yyVals[-3+yyTop]; current_property = new Property (current_class, type, (Modifiers) yyVals[-4+yyTop], @@ -5003,7 +5005,7 @@ void case_202() } void case_203() -#line 1753 "cs-parser.jay" +#line 1755 "cs-parser.jay" { lexer.PropertyParsing = false; @@ -5012,14 +5014,14 @@ void case_203() } void case_204() -#line 1760 "cs-parser.jay" +#line 1762 "cs-parser.jay" { lbag.AppendToMember (current_property, GetLocation (yyVals[0+yyTop])); current_property = null; } void case_206() -#line 1774 "cs-parser.jay" +#line 1776 "cs-parser.jay" { valid_param_mod = 0; var type = (FullNamedExpression) yyVals[-6+yyTop]; @@ -5046,7 +5048,7 @@ void case_206() } void case_208() -#line 1803 "cs-parser.jay" +#line 1805 "cs-parser.jay" { if (current_property.AccessorFirst != null && current_property.AccessorFirst.Block == null) ((Indexer) current_property).ParameterInfo.CheckParameters (current_property); @@ -5059,7 +5061,7 @@ void case_208() } void case_213() -#line 1822 "cs-parser.jay" +#line 1824 "cs-parser.jay" { if (yyToken == Token.CLOSE_BRACE) { report.Error (548, lexer.Location, "`{0}': property or indexer must have at least one accessor", current_property.GetSignatureForError ()); @@ -5072,7 +5074,7 @@ void case_213() } void case_214() -#line 1836 "cs-parser.jay" +#line 1838 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5095,7 +5097,7 @@ void case_214() } void case_215() -#line 1857 "cs-parser.jay" +#line 1859 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5118,7 +5120,7 @@ void case_215() } void case_216() -#line 1881 "cs-parser.jay" +#line 1883 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5146,7 +5148,7 @@ void case_216() } void case_217() -#line 1907 "cs-parser.jay" +#line 1909 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Set.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5169,21 +5171,21 @@ void case_217() } void case_219() -#line 1932 "cs-parser.jay" +#line 1934 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } void case_220() -#line 1937 "cs-parser.jay" +#line 1939 "cs-parser.jay" { Error_SyntaxError (1043, yyToken, "Invalid accessor body"); yyVal = null; } void case_222() -#line 1952 "cs-parser.jay" +#line 1954 "cs-parser.jay" { MemberName name = MakeName ((MemberName) yyVals[0+yyTop]); push_current_class (new Interface (current_namespace, current_class, name, (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); @@ -5191,7 +5193,7 @@ void case_222() } void case_223() -#line 1959 "cs-parser.jay" +#line 1961 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -5204,7 +5206,7 @@ void case_223() } void case_224() -#line 1970 "cs-parser.jay" +#line 1972 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) @@ -5212,13 +5214,11 @@ void case_224() } void case_225() -#line 1976 "cs-parser.jay" +#line 1978 "cs-parser.jay" { - if (yyVals[0+yyTop] != null) { - lbag.AppendToMember (current_class, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); - } else { - lbag.AppendToMember (current_class, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); - } + if (yyVals[0+yyTop] != null) + current_class.OptionalSemicolon = GetLocation (yyVals[0+yyTop]); + lbag.AppendToMember (current_class, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); yyVal = pop_current_class (); } @@ -5662,15 +5662,17 @@ void case_318() void case_320() #line 2560 "cs-parser.jay" { + enumCommas.Add (GetLocation (yyVals[-2+yyTop])); if (doc_support) enumTypeComment = Lexer.consume_doc_comment (); } void case_321() -#line 2565 "cs-parser.jay" +#line 2566 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; + enumCommas.Add (GetLocation (yyVals[0+yyTop])); MemberName name = (MemberName) yyVals[-3+yyTop]; if (name.IsGeneric) { @@ -5681,7 +5683,7 @@ void case_321() } void case_322() -#line 2577 "cs-parser.jay" +#line 2579 "cs-parser.jay" { /* here will be evaluated after CLOSE_BLACE is consumed.*/ if (doc_support) @@ -5689,60 +5691,50 @@ void case_322() } void case_323() -#line 2583 "cs-parser.jay" +#line 2585 "cs-parser.jay" { + enumCommas.Add (GetLocation (yyVals[-1+yyTop])); + if (yyVals[0+yyTop] != null) + current_class.OptionalSemicolon = GetLocation (yyVals[0+yyTop]); if (doc_support) current_class.DocComment = enumTypeComment; --lexer.parsing_declaration; -/* if (doc_support)*/ -/* em.DocComment = ev.DocComment;*/ - if (yyVals[-7+yyTop] != null) { - if (yyVals[0+yyTop] != null) { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation (yyVals[-9+yyTop]), savedEnumBaseTypeColonLocation, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); - } else { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation (yyVals[-9+yyTop]), savedEnumBaseTypeColonLocation, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop])); - } - } else { - if (yyVals[0+yyTop] != null) { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); - } else { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop])); - } - } + lbag.AddMember (current_class, GetModifierLocations (), enumCommas); + enumCommas.Clear (); yyVal = pop_current_class (); } void case_325() -#line 2611 "cs-parser.jay" +#line 2603 "cs-parser.jay" { var te = yyVals[0+yyTop] as TypeExpression; if (te == null || !EnumSpec.IsValidUnderlyingType (te.Type)) { Enum.Error_1008 (GetLocation (yyVals[0+yyTop]), report); yyVal = null; } else { - savedEnumBaseTypeColonLocation = GetLocation (yyVals[-1+yyTop]); + enumCommas.Add (GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } } void case_326() -#line 2622 "cs-parser.jay" +#line 2614 "cs-parser.jay" { Error_TypeExpected (GetLocation (yyVals[-1+yyTop])); yyVal = null; } void case_331() -#line 2640 "cs-parser.jay" +#line 2632 "cs-parser.jay" { - lbag.AddLocation (yyVals[-2+yyTop], GetLocation (yyVals[-1+yyTop])); + enumCommas.Add (GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } void case_332() -#line 2648 "cs-parser.jay" +#line 2640 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var em = new EnumMember ((Enum) current_class, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-1+yyTop]); @@ -5757,7 +5749,7 @@ void case_332() } void case_333() -#line 2661 "cs-parser.jay" +#line 2653 "cs-parser.jay" { ++lexer.parsing_block; if (doc_support) { @@ -5767,7 +5759,7 @@ void case_333() } void case_334() -#line 2669 "cs-parser.jay" +#line 2661 "cs-parser.jay" { --lexer.parsing_block; @@ -5783,7 +5775,7 @@ void case_334() } void case_336() -#line 2694 "cs-parser.jay" +#line 2686 "cs-parser.jay" { valid_param_mod = 0; @@ -5803,7 +5795,7 @@ void case_336() } void case_338() -#line 2716 "cs-parser.jay" +#line 2708 "cs-parser.jay" { if (doc_support) { current_delegate.DocComment = Lexer.consume_doc_comment (); @@ -5819,7 +5811,7 @@ void case_338() } void case_340() -#line 2734 "cs-parser.jay" +#line 2726 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types"); @@ -5828,7 +5820,7 @@ void case_340() } void case_342() -#line 2745 "cs-parser.jay" +#line 2737 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -5837,7 +5829,7 @@ void case_342() } void case_344() -#line 2756 "cs-parser.jay" +#line 2748 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); @@ -5845,14 +5837,14 @@ void case_344() } void case_345() -#line 2765 "cs-parser.jay" +#line 2757 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } void case_347() -#line 2777 "cs-parser.jay" +#line 2769 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -5865,14 +5857,14 @@ void case_347() } void case_348() -#line 2788 "cs-parser.jay" +#line 2780 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = new TypeArguments (); } void case_349() -#line 2796 "cs-parser.jay" +#line 2788 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -5881,7 +5873,7 @@ void case_349() } void case_350() -#line 2803 "cs-parser.jay" +#line 2795 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -5890,7 +5882,7 @@ void case_350() } void case_352() -#line 2820 "cs-parser.jay" +#line 2812 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -5898,7 +5890,7 @@ void case_352() } void case_353() -#line 2829 "cs-parser.jay" +#line 2821 "cs-parser.jay" { MemberName mn = (MemberName)yyVals[0+yyTop]; if (mn.TypeArguments != null) @@ -5907,7 +5899,7 @@ void case_353() } void case_355() -#line 2840 "cs-parser.jay" +#line 2832 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -5915,21 +5907,21 @@ void case_355() } void case_356() -#line 2849 "cs-parser.jay" +#line 2841 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeContainer.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); } void case_357() -#line 2854 "cs-parser.jay" +#line 2846 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName ((MemberName) yyVals[-1+yyTop], TypeContainer.DefaultIndexerName, null, GetLocation (yyVals[-1+yyTop])); } void case_358() -#line 2862 "cs-parser.jay" +#line 2854 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); @@ -5937,7 +5929,7 @@ void case_358() } void case_359() -#line 2868 "cs-parser.jay" +#line 2860 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -5947,7 +5939,7 @@ void case_359() } void case_360() -#line 2876 "cs-parser.jay" +#line 2868 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); @@ -5955,7 +5947,7 @@ void case_360() } void case_362() -#line 2886 "cs-parser.jay" +#line 2878 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -5965,7 +5957,7 @@ void case_362() } void case_363() -#line 2897 "cs-parser.jay" +#line 2889 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression)yyVals[0+yyTop]); @@ -5973,7 +5965,7 @@ void case_363() } void case_364() -#line 2903 "cs-parser.jay" +#line 2895 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression)yyVals[0+yyTop]); @@ -5982,14 +5974,14 @@ void case_364() } void case_365() -#line 2913 "cs-parser.jay" +#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); } void case_366() -#line 2918 "cs-parser.jay" +#line 2910 "cs-parser.jay" { if (GetTokenName (yyToken) == "type") report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); @@ -6000,28 +5992,28 @@ void case_366() } void case_371() -#line 2952 "cs-parser.jay" +#line 2944 "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 2961 "cs-parser.jay" +#line 2953 "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 2970 "cs-parser.jay" +#line 2962 "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 2986 "cs-parser.jay" +#line 2978 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-1+yyTop]; @@ -6036,14 +6028,14 @@ void case_378() } void case_380() -#line 3003 "cs-parser.jay" +#line 2995 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } void case_383() -#line 3019 "cs-parser.jay" +#line 3011 "cs-parser.jay" { var types = new List (2); types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6051,7 +6043,7 @@ void case_383() } void case_384() -#line 3025 "cs-parser.jay" +#line 3017 "cs-parser.jay" { var types = (List) yyVals[-2+yyTop]; types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6060,7 +6052,7 @@ void case_384() } void case_385() -#line 3035 "cs-parser.jay" +#line 3027 "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 ()); @@ -6069,35 +6061,35 @@ void case_385() } void case_386() -#line 3042 "cs-parser.jay" +#line 3034 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } void case_423() -#line 3104 "cs-parser.jay" +#line 3096 "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 3108 "cs-parser.jay" +#line 3100 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); } void case_435() -#line 3149 "cs-parser.jay" +#line 3141 "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 3161 "cs-parser.jay" +#line 3153 "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 +6097,7 @@ void case_437() } void case_438() -#line 3167 "cs-parser.jay" +#line 3159 "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); @@ -6113,7 +6105,7 @@ void case_438() } void case_439() -#line 3173 "cs-parser.jay" +#line 3165 "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); @@ -6121,7 +6113,7 @@ void case_439() } void case_440() -#line 3179 "cs-parser.jay" +#line 3171 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6131,28 +6123,28 @@ void case_440() } void case_442() -#line 3189 "cs-parser.jay" +#line 3181 "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 3197 "cs-parser.jay" +#line 3189 "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 3205 "cs-parser.jay" +#line 3197 "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 3218 "cs-parser.jay" +#line 3210 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = CollectionOrObjectInitializers.Empty; @@ -6164,14 +6156,14 @@ void case_448() } void case_449() -#line 3228 "cs-parser.jay" +#line 3220 "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 3244 "cs-parser.jay" +#line 3236 "cs-parser.jay" { var a = new List (); a.Add ((Expression) yyVals[0+yyTop]); @@ -6179,7 +6171,7 @@ void case_452() } void case_453() -#line 3250 "cs-parser.jay" +#line 3242 "cs-parser.jay" { var a = (List)yyVals[-2+yyTop]; a.Add ((Expression) yyVals[0+yyTop]); @@ -6188,14 +6180,14 @@ void case_453() } void case_454() -#line 3256 "cs-parser.jay" +#line 3248 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } void case_455() -#line 3264 "cs-parser.jay" +#line 3256 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); @@ -6203,7 +6195,7 @@ void case_455() } void case_457() -#line 3273 "cs-parser.jay" +#line 3265 "cs-parser.jay" { CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName; if (csn == null) @@ -6213,7 +6205,7 @@ void case_457() } void case_458() -#line 3281 "cs-parser.jay" +#line 3273 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = null; @@ -6222,14 +6214,14 @@ void case_458() } void case_459() -#line 3288 "cs-parser.jay" +#line 3280 "cs-parser.jay" { report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); yyVal = null; } void case_464() -#line 3306 "cs-parser.jay" +#line 3298 "cs-parser.jay" { Arguments list = new Arguments (4); list.Add ((Argument) yyVals[0+yyTop]); @@ -6237,7 +6229,7 @@ void case_464() } void case_465() -#line 3312 "cs-parser.jay" +#line 3304 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; if (list [list.Count - 1] is NamedArgument) @@ -6249,7 +6241,7 @@ void case_465() } void case_466() -#line 3322 "cs-parser.jay" +#line 3314 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; NamedArgument a = (NamedArgument) yyVals[0+yyTop]; @@ -6266,56 +6258,56 @@ void case_466() } void case_467() -#line 3337 "cs-parser.jay" +#line 3329 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[0+yyTop]), "An argument is missing"); yyVal = yyVals[-1+yyTop]; } void case_468() -#line 3342 "cs-parser.jay" +#line 3334 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } void case_473() -#line 3363 "cs-parser.jay" +#line 3355 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_474() -#line 3368 "cs-parser.jay" +#line 3360 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_475() -#line 3373 "cs-parser.jay" +#line 3365 "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 3378 "cs-parser.jay" +#line 3370 "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 3390 "cs-parser.jay" +#line 3382 "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 3398 "cs-parser.jay" +#line 3390 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); @@ -6323,7 +6315,7 @@ void case_479() } void case_480() -#line 3404 "cs-parser.jay" +#line 3396 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6332,14 +6324,14 @@ void case_480() } void case_481() -#line 3410 "cs-parser.jay" +#line 3402 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } void case_482() -#line 3418 "cs-parser.jay" +#line 3410 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); @@ -6347,7 +6339,7 @@ void case_482() } void case_483() -#line 3424 "cs-parser.jay" +#line 3416 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) @@ -6359,21 +6351,21 @@ void case_483() } void case_487() -#line 3452 "cs-parser.jay" +#line 3444 "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 3457 "cs-parser.jay" +#line 3449 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); } void case_491() -#line 3479 "cs-parser.jay" +#line 3471 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (lang_version <= LanguageVersion.ISO_2) @@ -6388,7 +6380,7 @@ void case_491() } void case_492() -#line 3492 "cs-parser.jay" +#line 3484 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); @@ -6397,7 +6389,7 @@ void case_492() } void case_493() -#line 3504 "cs-parser.jay" +#line 3496 "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])) { @@ -6407,7 +6399,7 @@ void case_493() } void case_494() -#line 3512 "cs-parser.jay" +#line 3504 "cs-parser.jay" { if (yyVals[0+yyTop] == null) report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); @@ -6416,7 +6408,7 @@ void case_494() } void case_495() -#line 3519 "cs-parser.jay" +#line 3511 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays"); @@ -6425,28 +6417,28 @@ void case_495() } void case_496() -#line 3526 "cs-parser.jay" +#line 3518 "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 3531 "cs-parser.jay" +#line 3523 "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 3542 "cs-parser.jay" +#line 3534 "cs-parser.jay" { --lexer.parsing_type; yyVal = yyVals[0+yyTop]; } void case_500() -#line 3550 "cs-parser.jay" +#line 3542 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); @@ -6458,7 +6450,7 @@ void case_500() } void case_505() -#line 3573 "cs-parser.jay" +#line 3565 "cs-parser.jay" { var a = new List (4); a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -6466,7 +6458,7 @@ void case_505() } void case_506() -#line 3579 "cs-parser.jay" +#line 3571 "cs-parser.jay" { var a = (List) yyVals[-2+yyTop]; a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -6476,7 +6468,7 @@ void case_506() } void case_507() -#line 3590 "cs-parser.jay" +#line 3582 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[-2+yyTop]; yyVal = new AnonymousTypeParameter ((Expression)yyVals[0+yyTop], lt.Value, lt.Location); @@ -6484,7 +6476,7 @@ void case_507() } void case_508() -#line 3596 "cs-parser.jay" +#line 3588 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), @@ -6492,14 +6484,14 @@ void case_508() } void case_509() -#line 3602 "cs-parser.jay" +#line 3594 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } void case_510() -#line 3607 "cs-parser.jay" +#line 3599 "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"); @@ -6507,28 +6499,28 @@ void case_510() } void case_514() -#line 3622 "cs-parser.jay" +#line 3614 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_515() -#line 3630 "cs-parser.jay" +#line 3622 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_516() -#line 3635 "cs-parser.jay" +#line 3627 "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 3665 "cs-parser.jay" +#line 3657 "cs-parser.jay" { var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); ai.VariableDeclaration = current_variable; @@ -6537,7 +6529,7 @@ void case_521() } void case_522() -#line 3672 "cs-parser.jay" +#line 3664 "cs-parser.jay" { var ai = new ArrayInitializer ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); ai.VariableDeclaration = current_variable; @@ -6550,7 +6542,7 @@ void case_522() } void case_523() -#line 3686 "cs-parser.jay" +#line 3678 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); @@ -6558,7 +6550,7 @@ void case_523() } void case_524() -#line 3692 "cs-parser.jay" +#line 3684 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6567,7 +6559,7 @@ void case_524() } void case_526() -#line 3706 "cs-parser.jay" +#line 3698 "cs-parser.jay" { lexer.TypeOfParsing = false; yyVal = new TypeOf ((FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); @@ -6575,14 +6567,14 @@ void case_526() } void case_529() -#line 3717 "cs-parser.jay" +#line 3709 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } void case_530() -#line 3725 "cs-parser.jay" +#line 3717 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6590,7 +6582,7 @@ void case_530() } void case_531() -#line 3731 "cs-parser.jay" +#line 3723 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6600,7 +6592,7 @@ void case_531() } void case_532() -#line 3739 "cs-parser.jay" +#line 3731 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6608,7 +6600,7 @@ void case_532() } void case_533() -#line 3745 "cs-parser.jay" +#line 3737 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6616,7 +6608,7 @@ void case_533() } void case_534() -#line 3751 "cs-parser.jay" +#line 3743 "cs-parser.jay" { var te = ((MemberName) yyVals[-3+yyTop]).GetTypeExpression (); if (te.HasTypeArguments) @@ -6627,7 +6619,7 @@ void case_534() } void case_535() -#line 3763 "cs-parser.jay" +#line 3755 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); @@ -6636,7 +6628,7 @@ void case_535() } void case_536() -#line 3773 "cs-parser.jay" +#line 3765 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) @@ -6646,35 +6638,35 @@ void case_536() } void case_537() -#line 3784 "cs-parser.jay" +#line 3776 "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 3792 "cs-parser.jay" +#line 3784 "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 3800 "cs-parser.jay" +#line 3792 "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 3808 "cs-parser.jay" +#line 3800 "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 3820 "cs-parser.jay" +#line 3812 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { @@ -6685,7 +6677,7 @@ void case_542() } void case_548() -#line 3852 "cs-parser.jay" +#line 3844 "cs-parser.jay" { valid_param_mod = 0; yyVal = yyVals[-1+yyTop]; @@ -6694,7 +6686,7 @@ void case_548() } void case_549() -#line 3862 "cs-parser.jay" +#line 3854 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); @@ -6704,147 +6696,147 @@ void case_549() } void case_555() -#line 3887 "cs-parser.jay" +#line 3879 "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 3895 "cs-parser.jay" +#line 3887 "cs-parser.jay" { current_block.ParametersBlock.IsAsync = true; yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } void case_565() -#line 3936 "cs-parser.jay" +#line 3928 "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 3941 "cs-parser.jay" +#line 3933 "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 3946 "cs-parser.jay" +#line 3938 "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 3955 "cs-parser.jay" +#line 3947 "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 3964 "cs-parser.jay" +#line 3956 "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 3981 "cs-parser.jay" +#line 3973 "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 3986 "cs-parser.jay" +#line 3978 "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 3995 "cs-parser.jay" +#line 3987 "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 4000 "cs-parser.jay" +#line 3992 "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 4005 "cs-parser.jay" +#line 3997 "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 4010 "cs-parser.jay" +#line 4002 "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 4019 "cs-parser.jay" +#line 4011 "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 4024 "cs-parser.jay" +#line 4016 "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 4033 "cs-parser.jay" +#line 4025 "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 4042 "cs-parser.jay" +#line 4034 "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 4051 "cs-parser.jay" +#line 4043 "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 4060 "cs-parser.jay" +#line 4052 "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 4069 "cs-parser.jay" +#line 4061 "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 4078 "cs-parser.jay" +#line 4070 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); @@ -6853,84 +6845,84 @@ void case_596() } void case_598() -#line 4089 "cs-parser.jay" +#line 4081 "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 4101 "cs-parser.jay" +#line 4093 "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 4106 "cs-parser.jay" +#line 4098 "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 4111 "cs-parser.jay" +#line 4103 "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 4116 "cs-parser.jay" +#line 4108 "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 4121 "cs-parser.jay" +#line 4113 "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 4126 "cs-parser.jay" +#line 4118 "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 4131 "cs-parser.jay" +#line 4123 "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 4136 "cs-parser.jay" +#line 4128 "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 4141 "cs-parser.jay" +#line 4133 "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 4146 "cs-parser.jay" +#line 4138 "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 4154 "cs-parser.jay" +#line 4146 "cs-parser.jay" { var pars = new List (4); pars.Add ((Parameter) yyVals[0+yyTop]); @@ -6939,7 +6931,7 @@ void case_610() } void case_611() -#line 4161 "cs-parser.jay" +#line 4153 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; @@ -6954,7 +6946,7 @@ void case_611() } void case_612() -#line 4177 "cs-parser.jay" +#line 4169 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6962,7 +6954,7 @@ void case_612() } void case_613() -#line 4183 "cs-parser.jay" +#line 4175 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6970,21 +6962,21 @@ void case_613() } void case_614() -#line 4189 "cs-parser.jay" +#line 4181 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } void case_616() -#line 4197 "cs-parser.jay" +#line 4189 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); } void case_620() -#line 4213 "cs-parser.jay" +#line 4205 "cs-parser.jay" { Block b = end_block (lexer.Location); b.IsCompilerGenerated = true; @@ -6993,14 +6985,14 @@ void case_620() } void case_622() -#line 4224 "cs-parser.jay" +#line 4216 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = EmptyExpression.Null; } void case_623() -#line 4232 "cs-parser.jay" +#line 4224 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); @@ -7008,14 +7000,14 @@ void case_623() } void case_624() -#line 4238 "cs-parser.jay" +#line 4230 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } void case_625() -#line 4243 "cs-parser.jay" +#line 4235 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); @@ -7023,63 +7015,63 @@ void case_625() } void case_626() -#line 4249 "cs-parser.jay" +#line 4241 "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 4258 "cs-parser.jay" +#line 4250 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop])); } void case_629() -#line 4263 "cs-parser.jay" +#line 4255 "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 4272 "cs-parser.jay" +#line 4264 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop])); } void case_632() -#line 4277 "cs-parser.jay" +#line 4269 "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 4300 "cs-parser.jay" +#line 4292 "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 4305 "cs-parser.jay" +#line 4297 "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 4310 "cs-parser.jay" +#line 4302 "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 4339 "cs-parser.jay" +#line 4331 "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]); @@ -7087,12 +7079,12 @@ void case_645() FeatureIsNotAvailable (c.Location, "static classes"); } - lbag.AddMember (current_class, GetModifierLocations ()); push_current_class (c, yyVals[-3+yyTop]); + lbag.AddMember (current_class, GetModifierLocations ()); } void case_646() -#line 4351 "cs-parser.jay" +#line 4343 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -7105,7 +7097,7 @@ void case_646() } void case_647() -#line 4362 "cs-parser.jay" +#line 4354 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) @@ -7113,25 +7105,23 @@ void case_647() } void case_648() -#line 4368 "cs-parser.jay" +#line 4360 "cs-parser.jay" { - if (yyVals[0+yyTop] != null) { - lbag.AppendToMember (current_class, GetLocation (yyVals[-11+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); - } else { - lbag.AppendToMember (current_class, GetLocation (yyVals[-11+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); - } + lbag.AppendToMember (current_class, GetLocation (yyVals[-11+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); + if (yyVals[0+yyTop] != null) + current_class.OptionalSemicolon = GetLocation (yyVals[0+yyTop]); yyVal = pop_current_class (); } void case_651() -#line 4387 "cs-parser.jay" +#line 4377 "cs-parser.jay" { mod_locations = null; yyVal = ModifierNone; } void case_654() -#line 4397 "cs-parser.jay" +#line 4387 "cs-parser.jay" { var m1 = (Modifiers) yyVals[-1+yyTop]; var m2 = (Modifiers) yyVals[0+yyTop]; @@ -7149,7 +7139,7 @@ void case_654() } void case_655() -#line 4416 "cs-parser.jay" +#line 4406 "cs-parser.jay" { yyVal = Modifiers.NEW; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7159,91 +7149,91 @@ void case_655() } void case_656() -#line 4424 "cs-parser.jay" +#line 4414 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_657() -#line 4429 "cs-parser.jay" +#line 4419 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_658() -#line 4434 "cs-parser.jay" +#line 4424 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_659() -#line 4439 "cs-parser.jay" +#line 4429 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_660() -#line 4444 "cs-parser.jay" +#line 4434 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_661() -#line 4449 "cs-parser.jay" +#line 4439 "cs-parser.jay" { yyVal = Modifiers.SEALED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_662() -#line 4454 "cs-parser.jay" +#line 4444 "cs-parser.jay" { yyVal = Modifiers.STATIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_663() -#line 4459 "cs-parser.jay" +#line 4449 "cs-parser.jay" { yyVal = Modifiers.READONLY; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_664() -#line 4464 "cs-parser.jay" +#line 4454 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_665() -#line 4469 "cs-parser.jay" +#line 4459 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_666() -#line 4474 "cs-parser.jay" +#line 4464 "cs-parser.jay" { yyVal = Modifiers.EXTERN; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_667() -#line 4479 "cs-parser.jay" +#line 4469 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_668() -#line 4484 "cs-parser.jay" +#line 4474 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7252,28 +7242,28 @@ void case_668() } void case_669() -#line 4491 "cs-parser.jay" +#line 4481 "cs-parser.jay" { yyVal = Modifiers.ASYNC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_671() -#line 4500 "cs-parser.jay" +#line 4490 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-1+yyTop])); current_container.AddBasesForPart (current_class, (List) yyVals[0+yyTop]); } void case_674() -#line 4513 "cs-parser.jay" +#line 4503 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_675() -#line 4521 "cs-parser.jay" +#line 4511 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((Constraints) yyVals[0+yyTop]); @@ -7281,7 +7271,7 @@ void case_675() } void case_676() -#line 4527 "cs-parser.jay" +#line 4517 "cs-parser.jay" { var constraints = (List) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; @@ -7299,14 +7289,14 @@ void case_676() } void case_677() -#line 4546 "cs-parser.jay" +#line 4536 "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])); } void case_678() -#line 4554 "cs-parser.jay" +#line 4544 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -7314,7 +7304,7 @@ void case_678() } void case_679() -#line 4560 "cs-parser.jay" +#line 4550 "cs-parser.jay" { var constraints = (List) yyVals[-2+yyTop]; var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; @@ -7339,7 +7329,7 @@ void case_679() } void case_680() -#line 4586 "cs-parser.jay" +#line 4576 "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 ()); @@ -7348,14 +7338,14 @@ void case_680() } void case_681() -#line 4593 "cs-parser.jay" +#line 4583 "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 4613 "cs-parser.jay" +#line 4603 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (lexer.Location, "generic type variance"); @@ -7364,77 +7354,77 @@ void case_685() } void case_688() -#line 4647 "cs-parser.jay" +#line 4637 "cs-parser.jay" { ++lexer.parsing_block; start_block (GetLocation (yyVals[0+yyTop])); } void case_690() -#line 4659 "cs-parser.jay" +#line 4649 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } void case_691() -#line 4664 "cs-parser.jay" +#line 4654 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (lexer.Location); } void case_692() -#line 4673 "cs-parser.jay" +#line 4663 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } void case_693() -#line 4678 "cs-parser.jay" +#line 4668 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } void case_701() -#line 4705 "cs-parser.jay" +#line 4695 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_734() -#line 4769 "cs-parser.jay" +#line 4759 "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 4774 "cs-parser.jay" +#line 4764 "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 4779 "cs-parser.jay" +#line 4769 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } void case_737() -#line 4787 "cs-parser.jay" +#line 4777 "cs-parser.jay" { /* Uses lexer.Location because semicolon location is not kept in quick mode*/ yyVal = new EmptyStatement (lexer.Location); } void case_738() -#line 4795 "cs-parser.jay" +#line 4785 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); @@ -7444,7 +7434,7 @@ void case_738() } void case_741() -#line 4808 "cs-parser.jay" +#line 4798 "cs-parser.jay" { if (yyVals[-1+yyTop] is VarExpr) yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); @@ -7453,7 +7443,7 @@ void case_741() } void case_742() -#line 4824 "cs-parser.jay" +#line 4814 "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*/ @@ -7485,7 +7475,7 @@ void case_742() } void case_743() -#line 4854 "cs-parser.jay" +#line 4844 "cs-parser.jay" { ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; @@ -7498,7 +7488,7 @@ void case_743() } void case_744() -#line 4865 "cs-parser.jay" +#line 4855 "cs-parser.jay" { if (yyVals[0+yyTop] == null) yyVal = yyVals[-1+yyTop]; @@ -7507,21 +7497,21 @@ void case_744() } void case_747() -#line 4880 "cs-parser.jay" +#line 4870 "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 4889 "cs-parser.jay" +#line 4879 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_751() -#line 4904 "cs-parser.jay" +#line 4894 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -7530,7 +7520,7 @@ void case_751() } void case_752() -#line 4911 "cs-parser.jay" +#line 4901 "cs-parser.jay" { yyVal = current_variable; current_variable = null; @@ -7538,7 +7528,7 @@ void case_752() } void case_753() -#line 4917 "cs-parser.jay" +#line 4907 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7547,7 +7537,7 @@ void case_753() } void case_754() -#line 4924 "cs-parser.jay" +#line 4914 "cs-parser.jay" { if (current_variable.Initializer != null) { lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); @@ -7559,14 +7549,14 @@ void case_754() } void case_756() -#line 4938 "cs-parser.jay" +#line 4928 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); } void case_757() -#line 4943 "cs-parser.jay" +#line 4933 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -7577,7 +7567,7 @@ void case_757() } void case_762() -#line 4965 "cs-parser.jay" +#line 4955 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7588,7 +7578,7 @@ void case_762() } void case_763() -#line 4974 "cs-parser.jay" +#line 4964 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7599,14 +7589,14 @@ void case_763() } void case_765() -#line 4990 "cs-parser.jay" +#line 4980 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); current_variable.Initializer = (Expression) yyVals[0+yyTop]; } void case_770() -#line 5008 "cs-parser.jay" +#line 4998 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7617,28 +7607,28 @@ void case_770() } void case_772() -#line 5021 "cs-parser.jay" +#line 5011 "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 5026 "cs-parser.jay" +#line 5016 "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 5034 "cs-parser.jay" +#line 5024 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_778() -#line 5052 "cs-parser.jay" +#line 5042 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { @@ -7650,7 +7640,7 @@ void case_778() } void case_779() -#line 5065 "cs-parser.jay" +#line 5055 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; ExpressionStatement s; @@ -7660,14 +7650,14 @@ void case_779() } void case_780() -#line 5073 "cs-parser.jay" +#line 5063 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } void case_783() -#line 5087 "cs-parser.jay" +#line 5077 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7677,7 +7667,7 @@ void case_783() } void case_784() -#line 5096 "cs-parser.jay" +#line 5086 "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])); @@ -7689,7 +7679,7 @@ void case_784() } void case_786() -#line 5113 "cs-parser.jay" +#line 5103 "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])); @@ -7697,14 +7687,14 @@ void case_786() } void case_787() -#line 5122 "cs-parser.jay" +#line 5112 "cs-parser.jay" { report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); yyVal = new List (); } void case_789() -#line 5131 "cs-parser.jay" +#line 5121 "cs-parser.jay" { var sections = new List (4); @@ -7713,7 +7703,7 @@ void case_789() } void case_790() -#line 5138 "cs-parser.jay" +#line 5128 "cs-parser.jay" { var sections = (List) yyVals[-1+yyTop]; @@ -7722,14 +7712,14 @@ void case_790() } void case_791() -#line 5145 "cs-parser.jay" +#line 5135 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new List (); } void case_794() -#line 5164 "cs-parser.jay" +#line 5154 "cs-parser.jay" { var labels = new List (2); @@ -7738,7 +7728,7 @@ void case_794() } void case_795() -#line 5171 "cs-parser.jay" +#line 5161 "cs-parser.jay" { var labels = (List) (yyVals[-1+yyTop]); labels.Add ((SwitchLabel) yyVals[0+yyTop]); @@ -7747,14 +7737,14 @@ void case_795() } void case_796() -#line 5181 "cs-parser.jay" +#line 5171 "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 5200 "cs-parser.jay" +#line 5190 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7764,21 +7754,21 @@ void case_802() } void case_803() -#line 5212 "cs-parser.jay" +#line 5202 "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 5220 "cs-parser.jay" +#line 5210 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); current_block.IsCompilerGenerated = true; } void case_806() -#line 5236 "cs-parser.jay" +#line 5226 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7792,14 +7782,14 @@ void case_806() } void case_807() -#line 5248 "cs-parser.jay" +#line 5238 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = end_block (current_block.StartLocation); } void case_810() -#line 5261 "cs-parser.jay" +#line 5251 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -7808,14 +7798,14 @@ void case_810() } void case_811() -#line 5268 "cs-parser.jay" +#line 5258 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_819() -#line 5292 "cs-parser.jay" +#line 5282 "cs-parser.jay" { var sl = yyVals[-2+yyTop] as StatementList; if (sl == null) { @@ -7830,14 +7820,14 @@ void case_819() } void case_820() -#line 5308 "cs-parser.jay" +#line 5298 "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 5313 "cs-parser.jay" +#line 5303 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -7848,7 +7838,7 @@ void case_821() } void case_822() -#line 5322 "cs-parser.jay" +#line 5312 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7861,21 +7851,21 @@ void case_822() } void case_829() -#line 5345 "cs-parser.jay" +#line 5335 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_830() -#line 5353 "cs-parser.jay" +#line 5343 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_831() -#line 5361 "cs-parser.jay" +#line 5351 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); @@ -7883,35 +7873,35 @@ void case_831() } void case_832() -#line 5367 "cs-parser.jay" +#line 5357 "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 5372 "cs-parser.jay" +#line 5362 "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 5380 "cs-parser.jay" +#line 5370 "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 5388 "cs-parser.jay" +#line 5378 "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 5396 "cs-parser.jay" +#line 5386 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -7929,7 +7919,7 @@ void case_836() } void case_837() -#line 5412 "cs-parser.jay" +#line 5402 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -7945,28 +7935,28 @@ void case_837() } void case_841() -#line 5438 "cs-parser.jay" +#line 5428 "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 5443 "cs-parser.jay" +#line 5433 "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 5448 "cs-parser.jay" +#line 5438 "cs-parser.jay" { report.Error (1524, GetLocation (yyVals[-2+yyTop]), "Expected catch or finally"); yyVal = null; } void case_844() -#line 5456 "cs-parser.jay" +#line 5446 "cs-parser.jay" { var l = new List (2); @@ -7975,7 +7965,7 @@ void case_844() } void case_845() -#line 5463 "cs-parser.jay" +#line 5453 "cs-parser.jay" { var l = (List) yyVals[-1+yyTop]; @@ -7993,7 +7983,7 @@ void case_845() } void case_849() -#line 5491 "cs-parser.jay" +#line 5481 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch (current_block, GetLocation (yyVals[-4+yyTop])); @@ -8010,7 +8000,7 @@ void case_849() } void case_851() -#line 5510 "cs-parser.jay" +#line 5500 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -8023,14 +8013,14 @@ void case_851() } void case_854() -#line 5538 "cs-parser.jay" +#line 5528 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } void case_856() -#line 5548 "cs-parser.jay" +#line 5538 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8040,7 +8030,7 @@ void case_856() } void case_857() -#line 5559 "cs-parser.jay" +#line 5549 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8052,14 +8042,14 @@ void case_857() } void case_858() -#line 5569 "cs-parser.jay" +#line 5559 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_859() -#line 5574 "cs-parser.jay" +#line 5564 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8071,7 +8061,7 @@ void case_859() } void case_860() -#line 5587 "cs-parser.jay" +#line 5577 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8083,14 +8073,14 @@ void case_860() } void case_861() -#line 5597 "cs-parser.jay" +#line 5587 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_862() -#line 5602 "cs-parser.jay" +#line 5592 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8102,7 +8092,7 @@ void case_862() } void case_863() -#line 5612 "cs-parser.jay" +#line 5602 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8113,14 +8103,14 @@ void case_863() } void case_865() -#line 5628 "cs-parser.jay" +#line 5618 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; yyVal = current_variable; } void case_866() -#line 5639 "cs-parser.jay" +#line 5629 "cs-parser.jay" { lexer.query_parsing = false; @@ -8134,7 +8124,7 @@ void case_866() } void case_867() -#line 5651 "cs-parser.jay" +#line 5641 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -8146,7 +8136,7 @@ void case_867() } void case_868() -#line 5662 "cs-parser.jay" +#line 5652 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -8156,7 +8146,7 @@ void case_868() } void case_869() -#line 5669 "cs-parser.jay" +#line 5659 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); @@ -8164,7 +8154,7 @@ void case_869() } void case_870() -#line 5678 "cs-parser.jay" +#line 5668 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8174,7 +8164,7 @@ void case_870() } void case_871() -#line 5686 "cs-parser.jay" +#line 5676 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8188,7 +8178,7 @@ void case_871() } void case_872() -#line 5701 "cs-parser.jay" +#line 5691 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8198,7 +8188,7 @@ void case_872() } void case_873() -#line 5709 "cs-parser.jay" +#line 5699 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8212,7 +8202,7 @@ void case_873() } void case_875() -#line 5728 "cs-parser.jay" +#line 5718 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8225,7 +8215,7 @@ void case_875() } void case_877() -#line 5743 "cs-parser.jay" +#line 5733 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8241,7 +8231,7 @@ void case_877() } void case_878() -#line 5760 "cs-parser.jay" +#line 5750 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -8258,14 +8248,14 @@ void case_878() } void case_880() -#line 5776 "cs-parser.jay" +#line 5766 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_882() -#line 5788 "cs-parser.jay" +#line 5778 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8274,7 +8264,7 @@ void case_882() } void case_883() -#line 5795 "cs-parser.jay" +#line 5785 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8284,7 +8274,7 @@ void case_883() } void case_884() -#line 5803 "cs-parser.jay" +#line 5793 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8293,7 +8283,7 @@ void case_884() } void case_885() -#line 5810 "cs-parser.jay" +#line 5800 "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])); @@ -8303,14 +8293,14 @@ void case_885() } void case_889() -#line 5827 "cs-parser.jay" +#line 5817 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_896() -#line 5847 "cs-parser.jay" +#line 5837 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8324,7 +8314,7 @@ void case_896() } void case_898() -#line 5866 "cs-parser.jay" +#line 5856 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8333,7 +8323,7 @@ void case_898() } void case_899() -#line 5876 "cs-parser.jay" +#line 5866 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8343,7 +8333,7 @@ void case_899() } void case_900() -#line 5884 "cs-parser.jay" +#line 5874 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8353,7 +8343,7 @@ void case_900() } void case_901() -#line 5892 "cs-parser.jay" +#line 5882 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8363,7 +8353,7 @@ void case_901() } void case_902() -#line 5900 "cs-parser.jay" +#line 5890 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8403,7 +8393,7 @@ void case_902() } void case_903() -#line 5938 "cs-parser.jay" +#line 5928 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8413,7 +8403,7 @@ void case_903() } void case_904() -#line 5946 "cs-parser.jay" +#line 5936 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8423,7 +8413,7 @@ void case_904() } void case_905() -#line 5954 "cs-parser.jay" +#line 5944 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8433,7 +8423,7 @@ void case_905() } void case_906() -#line 5962 "cs-parser.jay" +#line 5952 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8475,7 +8465,7 @@ void case_906() } void case_910() -#line 6017 "cs-parser.jay" +#line 6007 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8484,7 +8474,7 @@ void case_910() } void case_912() -#line 6028 "cs-parser.jay" +#line 6018 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8493,14 +8483,14 @@ void case_912() } void case_913() -#line 6035 "cs-parser.jay" +#line 6025 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } void case_915() -#line 6044 "cs-parser.jay" +#line 6034 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8509,42 +8499,42 @@ void case_915() } void case_916() -#line 6051 "cs-parser.jay" +#line 6041 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } void case_918() -#line 6063 "cs-parser.jay" +#line 6053 "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 6068 "cs-parser.jay" +#line 6058 "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 6080 "cs-parser.jay" +#line 6070 "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 6085 "cs-parser.jay" +#line 6075 "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 6095 "cs-parser.jay" +#line 6085 "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*/ @@ -8562,7 +8552,7 @@ void case_924() } void case_925() -#line 6111 "cs-parser.jay" +#line 6101 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -8573,7 +8563,7 @@ void case_925() } void case_928() -#line 6138 "cs-parser.jay" +#line 6128 "cs-parser.jay" { current_container = new Class (current_namespace, current_class, new MemberName (""), Modifiers.PUBLIC, null); current_class = current_container; @@ -8605,7 +8595,7 @@ void case_928() } void case_929() -#line 6168 "cs-parser.jay" +#line 6158 "cs-parser.jay" { --lexer.parsing_block; Method method = (Method) oob_stack.Pop (); @@ -8617,7 +8607,7 @@ void case_929() } void case_939() -#line 6211 "cs-parser.jay" +#line 6201 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -8625,7 +8615,7 @@ void case_939() } void case_940() -#line 6217 "cs-parser.jay" +#line 6207 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -8634,14 +8624,14 @@ void case_940() } void case_943() -#line 6232 "cs-parser.jay" +#line 6222 "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 6237 "cs-parser.jay" +#line 6227 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8651,7 +8641,7 @@ void case_944() } void case_945() -#line 6245 "cs-parser.jay" +#line 6235 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8661,7 +8651,7 @@ void case_945() } void case_946() -#line 6253 "cs-parser.jay" +#line 6243 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); module.DocumentationBuilder.ParsedParameters = p; @@ -8670,7 +8660,7 @@ void case_946() } void case_954() -#line 6291 "cs-parser.jay" +#line 6281 "cs-parser.jay" { var parameters = new List (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); @@ -8678,7 +8668,7 @@ void case_954() } void case_955() -#line 6297 "cs-parser.jay" +#line 6287 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); @@ -8686,7 +8676,7 @@ void case_955() } void case_956() -#line 6306 "cs-parser.jay" +#line 6296 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -12022,7 +12012,7 @@ void case_956() -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, }; -#line 6315 "cs-parser.jay" +#line 6305 "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 42b7bfd358..348844d52a 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -142,11 +142,12 @@ namespace Mono.CSharp LocationsBag lbag; UsingsBag ubag; List> mod_locations; - Location parameterModifierLocation, savedLocation, savedOpenLocation, savedCloseLocation, savedEnumBaseTypeColonLocation; + Location parameterModifierLocation, savedLocation, savedOpenLocation, savedCloseLocation; Location savedAttrParenOpenLocation, savedAttrParenCloseLocation; Stack> locationListStack = new Stack> (); // used for type parameters List attributeCommas = new List (); List parameterListCommas = new List (); + List enumCommas = new List (); object lastYYVal; @@ -954,7 +955,8 @@ struct_declaration } opt_semicolon { - lbag.AppendToMember (current_class, GetLocation ($13)); + if ($13 != null) + current_class.OptionalSemicolon = GetLocation ($13); $$ = pop_current_class (); } | opt_attributes opt_modifiers opt_partial STRUCT error @@ -1974,11 +1976,9 @@ interface_declaration } opt_semicolon { - if ($15 != null) { - lbag.AppendToMember (current_class, GetLocation ($11), GetLocation ($13), GetLocation ($15)); - } else { - lbag.AppendToMember (current_class, GetLocation ($11), GetLocation ($13)); - } + if ($15 != null) + current_class.OptionalSemicolon = GetLocation ($15); + lbag.AppendToMember (current_class, GetLocation ($11), GetLocation ($13)); $$ = pop_current_class (); } | opt_attributes opt_modifiers opt_partial INTERFACE error @@ -2558,6 +2558,7 @@ enum_declaration ENUM type_declaration_name opt_enum_base { + enumCommas.Add (GetLocation ($3)); if (doc_support) enumTypeComment = Lexer.consume_doc_comment (); } @@ -2565,6 +2566,7 @@ enum_declaration { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; + enumCommas.Add (GetLocation ($7)); MemberName name = (MemberName) $4; if (name.IsGeneric) { @@ -2581,26 +2583,16 @@ enum_declaration } CLOSE_BRACE opt_semicolon { + enumCommas.Add (GetLocation ($11)); + if ($12 != null) + current_class.OptionalSemicolon = GetLocation ($12); if (doc_support) current_class.DocComment = enumTypeComment; --lexer.parsing_declaration; -// if (doc_support) -// em.DocComment = ev.DocComment; - if ($5 != null) { - if ($12 != null) { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation ($3), savedEnumBaseTypeColonLocation, GetLocation ($7), GetLocation ($11), GetLocation ($12)); - } else { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation ($3), savedEnumBaseTypeColonLocation, GetLocation ($7), GetLocation ($11)); - } - } else { - if ($12 != null) { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation ($3), GetLocation ($7), GetLocation ($11), GetLocation ($12)); - } else { - lbag.AddMember (current_class, GetModifierLocations (), GetLocation ($3), GetLocation ($7), GetLocation ($11)); - } - } + lbag.AddMember (current_class, GetModifierLocations (), enumCommas); + enumCommas.Clear (); $$ = pop_current_class (); } ; @@ -2614,7 +2606,7 @@ opt_enum_base Enum.Error_1008 (GetLocation ($2), report); $$ = null; } else { - savedEnumBaseTypeColonLocation = GetLocation ($1); + enumCommas.Add (GetLocation ($1)); $$ = $2; } } @@ -2630,7 +2622,7 @@ opt_enum_member_declarations | enum_member_declarations | enum_member_declarations COMMA { - lbag.AddLocation ($1, GetLocation ($2)); + enumCommas.Add (GetLocation ($2)); } ; @@ -2638,7 +2630,7 @@ enum_member_declarations : enum_member_declaration | enum_member_declarations COMMA enum_member_declaration { - lbag.AddLocation ($1, GetLocation ($2)); + enumCommas.Add (GetLocation ($2)); $$ = $3; } ; @@ -4343,8 +4335,8 @@ class_declaration FeatureIsNotAvailable (c.Location, "static classes"); } - lbag.AddMember (current_class, GetModifierLocations ()); push_current_class (c, $3); + lbag.AddMember (current_class, GetModifierLocations ()); } opt_class_base opt_type_parameter_constraints_clauses @@ -4366,11 +4358,9 @@ class_declaration } opt_semicolon { - if ($15 != null) { - lbag.AppendToMember (current_class, GetLocation ($4), GetLocation ($11), GetLocation ($13), GetLocation ($15)); - } else { - lbag.AppendToMember (current_class, GetLocation ($4), GetLocation ($11), GetLocation ($13)); - } + lbag.AppendToMember (current_class, GetLocation ($4), GetLocation ($11), GetLocation ($13)); + if ($15 != null) + current_class.OptionalSemicolon = GetLocation ($15); $$ = pop_current_class (); } ; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs index 0ad375d282..684057008a 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs @@ -1440,6 +1440,21 @@ namespace Mono.CSharp { get; private set; } + + public bool HasOptionalSemicolon { + get; + private set; + } + Location optionalSemicolon; + public Location OptionalSemicolon { + get { + return optionalSemicolon; + } + set { + optionalSemicolon = value; + HasOptionalSemicolon = true; + } + } #endif public List Constraints {