/** the generated parser. Maintains a state and a value stack, currently with fixed maximum size. @param yyLex scanner. @return result of the last reduction, if any. @throws yyException on irrecoverable parse error. */ internal Object yyparse (yyParser.yyInput yyLex) { if (yyMax <= 0) yyMax = 256; // initial size int yyState = 0; // state stack ptr int [] yyStates; // state stack yyVal = null; yyToken = -1; int yyErrorFlag = 0; // #tks to shift if (use_global_stacks && global_yyStates != null) { yyVals = global_yyVals; yyStates = global_yyStates; } else { yyVals = new object [yyMax]; yyStates = new int [yyMax]; if (use_global_stacks) { global_yyVals = yyVals; global_yyStates = yyStates; } } /*yyLoop:*/ for (yyTop = 0;; ++ yyTop) { if (yyTop >= yyStates.Length) { // dynamically increase global::System.Array.Resize (ref yyStates, yyStates.Length+yyMax); global::System.Array.Resize (ref yyVals, yyVals.Length+yyMax); } yyStates[yyTop] = yyState; yyVals[yyTop] = yyVal; //t if (debug != null) debug.push(yyState, yyVal); /*yyDiscarded:*/ while (true) { // discarding a token does not change stack int yyN; if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); } if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) { //t if (debug != null) //t debug.shift(yyState, yyTable[yyN], yyErrorFlag-1); yyState = yyTable[yyN]; // shift to yyN yyVal = yyLex.value(); yyToken = -1; if (yyErrorFlag > 0) -- yyErrorFlag; goto continue_yyLoop; } if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == yyToken) yyN = yyTable[yyN]; // reduce (yyN) else switch (yyErrorFlag) { case 0: yyExpectingState = yyState; // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState)); //t if (debug != null) debug.error("syntax error"); if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof (); goto case 1; case 1: case 2: yyErrorFlag = 3; do { if ((yyN = yySindex[yyStates[yyTop]]) != 0 && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == Token.yyErrorCode) { //t if (debug != null) //t debug.shift(yyStates[yyTop], yyTable[yyN], 3); yyState = yyTable[yyN]; yyVal = yyLex.value(); goto continue_yyLoop; } //t if (debug != null) debug.pop(yyStates[yyTop]); } while (-- yyTop >= 0); //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error"); case 3: if (yyToken == 0) { //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error at end-of-file"); } //t if (debug != null) //t debug.discard(yyState, yyToken, yyname(yyToken), //t yyLex.value()); yyToken = -1; goto continue_yyDiscarded; // leave stack alone } } int yyV = yyTop + 1-yyLen[yyN]; //t if (debug != null) //t debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]); yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 5: #line 374 "cs-parser.jay" { Lexer.CompleteOnEOF = false; } break; case 7: #line 381 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 8: #line 385 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 16: case_16(); break; case 17: #line 421 "cs-parser.jay" { syntax_error (GetLocation (yyVals[-1+yyTop]), "`alias' expected"); /* TODO: better*/ } break; case 20: case_20(); break; case 21: case_21(); break; case 22: case_22(); break; case 23: case_23(); break; case 24: case_24(); break; case 25: case_25(); break; case 26: case_26(); break; case 27: case_27(); break; case 28: case_28(); break; case 29: case_29(); break; case 34: case_34(); break; case 35: case_35(); break; case 36: #line 546 "cs-parser.jay" { ubag.CloseNamespace (GetLocation (yyVals[-2+yyTop])); } break; case 45: case_45(); break; case 46: #line 583 "cs-parser.jay" { current_namespace.DeclarationFound = true; } break; case 47: #line 587 "cs-parser.jay" { Report.Error (116, ((MemberCore) yyVals[0+yyTop]).Location, "A namespace can only contain types and namespace declarations"); } break; case 48: #line 590 "cs-parser.jay" { Report.Error (116, ((MemberCore) yyVals[0+yyTop]).Location, "A namespace can only contain types and namespace declarations"); } break; case 49: #line 594 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 55: case_55(); break; case 56: case_56(); break; case 57: case_57(); break; case 58: case_58(); break; case 59: case_59(); break; case 60: #line 715 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; } break; case 61: #line 719 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; } break; case 62: case_62(); break; case 63: case_63(); break; case 64: #line 736 "cs-parser.jay" { yyVal = "event"; } break; case 65: #line 737 "cs-parser.jay" { yyVal = "return"; } break; case 66: case_66(); break; case 67: #line 749 "cs-parser.jay" { yyVal = new List<Attribute> (4) { (Attribute) yyVals[0+yyTop] }; } break; case 68: case_68(); break; case 69: #line 763 "cs-parser.jay" { ++lexer.parsing_block; } break; case 70: case_70(); break; case 71: #line 788 "cs-parser.jay" { /* reserved attribute name or identifier: 17.4 */ } break; case 72: #line 792 "cs-parser.jay" { yyVal = null; } break; case 73: #line 796 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 74: #line 801 "cs-parser.jay" { yyVal = null; } break; case 75: case_75(); break; case 76: case_76(); break; case 77: case_77(); break; case 78: case_78(); break; case 79: #line 845 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 81: #line 853 "cs-parser.jay" { ++lexer.parsing_block; } break; case 82: case_82(); break; case 83: case_83(); break; case 84: #line 877 "cs-parser.jay" { yyVal = null; } break; case 85: #line 881 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; case 86: #line 885 "cs-parser.jay" { yyVal = Argument.AType.Out; } break; case 101: case_101(); break; case 102: #line 926 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 103: case_103(); break; case 104: case_104(); break; case 105: case_105(); break; case 106: case_106(); break; case 107: #line 958 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 108: case_108(); break; case 109: #line 970 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } break; case 124: case_124(); break; case 125: case_125(); break; case 128: #line 1039 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 129: #line 1043 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 130: case_130(); break; case 131: #line 1059 "cs-parser.jay" { ++lexer.parsing_block; } break; case 132: case_132(); break; case 133: case_133(); break; case 136: case_136(); break; case 137: case_137(); break; case 138: case_138(); break; case 139: case_139(); break; case 140: #line 1137 "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"); } break; case 142: case_142(); break; case 143: case_143(); break; case 146: #line 1167 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 147: #line 1171 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 148: case_148(); break; case 149: #line 1184 "cs-parser.jay" { ++lexer.parsing_block; } break; case 150: case_150(); break; case 153: #line 1203 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 154: #line 1207 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 155: case_155(); break; case 156: #line 1223 "cs-parser.jay" { ++lexer.parsing_block; } break; case 157: case_157(); break; case 158: case_158(); break; case 161: case_161(); break; case 162: case_162(); break; case 163: case_163(); break; case 164: #line 1277 "cs-parser.jay" { valid_param_mod = ParameterModifierType.All; } break; case 165: #line 1281 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 166: case_166(); break; case 167: #line 1322 "cs-parser.jay" { valid_param_mod = ParameterModifierType.All; } break; case 168: #line 1326 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 169: case_169(); break; case 170: case_170(); break; case 172: #line 1402 "cs-parser.jay" { yyVal = null; } break; case 173: #line 1406 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 175: case_175(); break; case 176: case_176(); break; case 177: case_177(); break; case 178: case_178(); break; case 179: case_179(); break; case 180: case_180(); break; case 181: case_181(); break; case 182: #line 1465 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; case 183: #line 1469 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); } break; case 184: case_184(); break; case 185: case_185(); break; case 186: case_186(); break; case 187: case_187(); break; case 188: case_188(); break; case 189: case_189(); break; case 190: #line 1544 "cs-parser.jay" { ++lexer.parsing_block; } break; case 191: case_191(); break; case 192: #line 1585 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; case 194: case_194(); break; case 195: case_195(); break; case 196: case_196(); break; case 197: case_197(); break; case 198: case_198(); break; case 199: case_199(); break; case 200: case_200(); break; case 201: case_201(); break; case 202: case_202(); break; case 203: case_203(); break; case 204: #line 1683 "cs-parser.jay" { Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); } break; case 205: case_205(); break; case 206: case_206(); break; case 207: case_207(); break; case 208: case_208(); break; case 209: case_209(); break; case 210: #line 1736 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; case 211: case_211(); break; case 212: #line 1766 "cs-parser.jay" { lexer.PropertyParsing = false; } break; case 213: case_213(); break; case 218: case_218(); break; case 219: case_219(); break; case 220: case_220(); break; case 221: case_221(); break; case 222: case_222(); break; case 224: case_224(); break; case 225: case_225(); break; case 226: #line 1908 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 227: case_227(); break; case 228: case_228(); break; case 229: case_229(); break; case 230: case_230(); break; case 231: #line 1941 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 236: #line 1958 "cs-parser.jay" { Report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 237: #line 1962 "cs-parser.jay" { Report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 242: #line 1970 "cs-parser.jay" { Report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; case 243: #line 1974 "cs-parser.jay" { Report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; case 244: #line 1978 "cs-parser.jay" { Report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; case 245: #line 1984 "cs-parser.jay" { } break; case 246: case_246(); break; case 248: #line 2011 "cs-parser.jay" { yyVal = null; } break; case 250: case_250(); break; case 251: #line 2027 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 252: case_252(); break; case 254: #line 2073 "cs-parser.jay" { yyVal = Operator.OpType.LogicalNot; } break; case 255: #line 2074 "cs-parser.jay" { yyVal = Operator.OpType.OnesComplement; } break; case 256: #line 2075 "cs-parser.jay" { yyVal = Operator.OpType.Increment; } break; case 257: #line 2076 "cs-parser.jay" { yyVal = Operator.OpType.Decrement; } break; case 258: #line 2077 "cs-parser.jay" { yyVal = Operator.OpType.True; } break; case 259: #line 2078 "cs-parser.jay" { yyVal = Operator.OpType.False; } break; case 260: #line 2080 "cs-parser.jay" { yyVal = Operator.OpType.Addition; } break; case 261: #line 2081 "cs-parser.jay" { yyVal = Operator.OpType.Subtraction; } break; case 262: #line 2083 "cs-parser.jay" { yyVal = Operator.OpType.Multiply; } break; case 263: #line 2084 "cs-parser.jay" { yyVal = Operator.OpType.Division; } break; case 264: #line 2085 "cs-parser.jay" { yyVal = Operator.OpType.Modulus; } break; case 265: #line 2086 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseAnd; } break; case 266: #line 2087 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseOr; } break; case 267: #line 2088 "cs-parser.jay" { yyVal = Operator.OpType.ExclusiveOr; } break; case 268: #line 2089 "cs-parser.jay" { yyVal = Operator.OpType.LeftShift; } break; case 269: #line 2090 "cs-parser.jay" { yyVal = Operator.OpType.RightShift; } break; case 270: #line 2091 "cs-parser.jay" { yyVal = Operator.OpType.Equality; } break; case 271: #line 2092 "cs-parser.jay" { yyVal = Operator.OpType.Inequality; } break; case 272: #line 2093 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThan; } break; case 273: #line 2094 "cs-parser.jay" { yyVal = Operator.OpType.LessThan; } break; case 274: #line 2095 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThanOrEqual; } break; case 275: #line 2096 "cs-parser.jay" { yyVal = Operator.OpType.LessThanOrEqual; } break; case 276: #line 2103 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 277: case_277(); break; case 278: #line 2122 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 279: case_279(); break; case 280: case_280(); break; case 281: case_281(); break; case 282: case_282(); break; case 283: case_283(); break; case 284: case_284(); break; case 285: case_285(); break; case 287: #line 2225 "cs-parser.jay" { current_block = null; yyVal = null; } break; case 290: #line 2237 "cs-parser.jay" { ++lexer.parsing_block; } break; case 291: case_291(); break; case 292: #line 2247 "cs-parser.jay" { ++lexer.parsing_block; } break; case 293: case_293(); break; case 294: case_294(); break; case 295: case_295(); break; case 296: case_296(); break; case 297: case_297(); break; case 298: case_298(); break; case 299: case_299(); break; case 300: case_300(); break; case 301: case_301(); break; case 303: #line 2356 "cs-parser.jay" { ++lexer.parsing_block; } break; case 304: case_304(); break; case 307: #line 2373 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 308: #line 2377 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 309: case_309(); break; case 310: #line 2390 "cs-parser.jay" { ++lexer.parsing_block; } break; case 311: case_311(); break; case 312: case_312(); break; case 313: #line 2415 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 316: case_316(); break; case 317: case_317(); break; case 318: case_318(); break; case 319: case_319(); break; case 320: case_320(); break; case 321: case_321(); break; case 322: case_322(); break; case 323: case_323(); break; case 325: case_325(); break; case 326: case_326(); break; case 327: case_327(); break; case 328: case_328(); break; case 330: case_330(); break; case 331: case_331(); break; case 334: #line 2574 "cs-parser.jay" { lbag.AddLocation (yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 336: case_336(); break; case 337: case_337(); break; case 338: case_338(); break; case 339: case_339(); break; case 340: #line 2632 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; case 341: case_341(); break; case 342: #line 2655 "cs-parser.jay" { lexer.ConstraintsParsing = false; } break; case 343: case_343(); break; case 345: case_345(); break; case 347: case_347(); break; case 349: case_349(); break; case 350: case_350(); break; case 352: case_352(); break; case 353: case_353(); break; case 354: case_354(); break; case 355: case_355(); break; case 356: #line 2752 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 357: case_357(); break; case 358: case_358(); break; case 360: case_360(); break; case 361: case_361(); break; case 362: case_362(); break; case 363: case_363(); break; case 364: case_364(); break; case 365: case_365(); break; case 367: case_367(); break; case 368: case_368(); break; case 369: case_369(); break; case 370: case_370(); break; case 371: case_371(); break; case 373: #line 2872 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.void_type, GetLocation (yyVals[0+yyTop])); } break; case 374: #line 2879 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 376: case_376(); break; case 378: case_378(); break; case 380: case_380(); break; case 382: #line 2917 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 383: case_383(); break; case 384: #line 2937 "cs-parser.jay" { yyVal = new ComposedCast (((MemberName) yyVals[-1+yyTop]).GetTypeExpression (), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 385: case_385(); break; case 386: #line 2946 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 387: #line 2950 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (TypeManager.void_type, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 388: case_388(); break; case 389: case_389(); break; case 390: case_390(); break; case 391: case_391(); break; case 392: #line 2988 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.object_type, GetLocation (yyVals[0+yyTop])); } break; case 393: #line 2989 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.string_type, GetLocation (yyVals[0+yyTop])); } break; case 394: #line 2990 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.bool_type, GetLocation (yyVals[0+yyTop])); } break; case 395: #line 2991 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.decimal_type, GetLocation (yyVals[0+yyTop])); } break; case 396: #line 2992 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.float_type, GetLocation (yyVals[0+yyTop])); } break; case 397: #line 2993 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.double_type, GetLocation (yyVals[0+yyTop])); } break; case 399: #line 2998 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.sbyte_type, GetLocation (yyVals[0+yyTop])); } break; case 400: #line 2999 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.byte_type, GetLocation (yyVals[0+yyTop])); } break; case 401: #line 3000 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.short_type, GetLocation (yyVals[0+yyTop])); } break; case 402: #line 3001 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.ushort_type, GetLocation (yyVals[0+yyTop])); } break; case 403: #line 3002 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.int32_type, GetLocation (yyVals[0+yyTop])); } break; case 404: #line 3003 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.uint32_type, GetLocation (yyVals[0+yyTop])); } break; case 405: #line 3004 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.int64_type, GetLocation (yyVals[0+yyTop])); } break; case 406: #line 3005 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.uint64_type, GetLocation (yyVals[0+yyTop])); } break; case 407: #line 3006 "cs-parser.jay" { yyVal = new TypeExpression (TypeManager.char_type, GetLocation (yyVals[0+yyTop])); } break; case 427: case_427(); break; case 428: case_428(); break; case 432: #line 3052 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; case 433: #line 3056 "cs-parser.jay" { yyVal = new BoolLiteral (true, GetLocation (yyVals[0+yyTop])); } break; case 434: #line 3057 "cs-parser.jay" { yyVal = new BoolLiteral (false, GetLocation (yyVals[0+yyTop])); } break; case 439: case_439(); break; case 440: #line 3090 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); } break; case 441: case_441(); break; case 442: case_442(); break; case 443: case_443(); break; case 444: case_444(); break; case 445: #line 3121 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); } break; case 446: case_446(); break; case 447: #line 3129 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } break; case 448: case_448(); break; case 449: case_449(); break; case 450: #line 3145 "cs-parser.jay" { yyVal = null; } break; case 452: case_452(); break; case 453: case_453(); break; case 454: #line 3168 "cs-parser.jay" { yyVal = null; } break; case 455: #line 3172 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 456: case_456(); break; case 457: case_457(); break; case 458: case_458(); break; case 459: case_459(); break; case 460: #line 3204 "cs-parser.jay" { yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } break; case 461: case_461(); break; case 462: case_462(); break; case 463: case_463(); break; case 466: #line 3232 "cs-parser.jay" { yyVal = null; } break; case 468: case_468(); break; case 469: case_469(); break; case 470: case_470(); break; case 471: case_471(); break; case 472: case_472(); break; case 473: #line 3284 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 477: case_477(); break; case 478: case_478(); break; case 479: case_479(); break; case 480: case_480(); break; case 482: case_482(); break; case 483: case_483(); break; case 484: case_484(); break; case 485: case_485(); break; case 486: case_486(); break; case 487: case_487(); break; case 488: #line 3371 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 490: #line 3379 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } break; case 491: case_491(); break; case 492: case_492(); break; case 493: #line 3399 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 494: #line 3406 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 495: case_495(); break; case 496: case_496(); break; case 497: case_497(); break; case 498: case_498(); break; case 499: case_499(); break; case 500: case_500(); break; case 501: case_501(); break; case 502: #line 3472 "cs-parser.jay" { ++lexer.parsing_type; } break; case 503: case_503(); break; case 504: case_504(); break; case 507: #line 3501 "cs-parser.jay" { yyVal = null; } break; case 509: case_509(); break; case 510: case_510(); break; case 511: case_511(); break; case 512: case_512(); break; case 513: case_513(); break; case 514: case_514(); break; case 518: case_518(); break; case 519: case_519(); break; case 520: case_520(); break; case 521: #line 3577 "cs-parser.jay" { yyVal = 2; } break; case 522: #line 3581 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; case 523: #line 3588 "cs-parser.jay" { yyVal = null; } break; case 524: #line 3592 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 525: case_525(); break; case 526: case_526(); break; case 527: case_527(); break; case 528: case_528(); break; case 529: #line 3636 "cs-parser.jay" { lexer.TypeOfParsing = true; } break; case 530: case_530(); break; case 533: case_533(); break; case 534: case_534(); break; case 535: case_535(); break; case 536: case_536(); break; case 537: case_537(); break; case 538: case_538(); break; case 539: case_539(); break; case 540: case_540(); break; case 541: case_541(); break; case 542: case_542(); break; case 543: case_543(); break; case 544: case_544(); break; case 545: #line 3751 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 546: #line 3755 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); } break; case 547: #line 3762 "cs-parser.jay" { yyVal = ParametersCompiled.Undefined; } break; case 549: #line 3770 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 550: case_550(); break; case 551: case_551(); break; case 553: #line 3794 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 554: #line 3798 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 556: case_556(); break; case 558: #line 3819 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 559: #line 3823 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 560: #line 3827 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 561: #line 3831 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 562: #line 3835 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 563: #line 3839 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 565: case_565(); break; case 566: case_566(); break; case 567: case_567(); break; case 569: case_569(); break; case 570: #line 3871 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 571: case_571(); break; case 572: #line 3880 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 573: #line 3884 "cs-parser.jay" { yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 575: case_575(); break; case 576: case_576(); break; case 578: case_578(); break; case 579: case_579(); break; case 580: case_580(); break; case 581: case_581(); break; case 583: case_583(); break; case 584: case_584(); break; case 586: case_586(); break; case 588: case_588(); break; case 590: case_590(); break; case 592: case_592(); break; case 594: case_594(); break; case 596: case_596(); break; case 598: case_598(); break; case 599: #line 4008 "cs-parser.jay" { yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 600: case_600(); break; case 601: case_601(); break; case 602: case_602(); break; case 603: case_603(); break; case 604: case_604(); break; case 605: case_605(); break; case 606: case_606(); break; case 607: case_607(); break; case 608: case_608(); break; case 609: case_609(); break; case 610: case_610(); break; case 611: case_611(); break; case 612: case_612(); break; case 613: case_613(); break; case 614: case_614(); break; case 615: #line 4103 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 616: case_616(); break; case 619: #line 4118 "cs-parser.jay" { start_block (lexer.Location); } break; case 620: case_620(); break; case 622: case_622(); break; case 623: case_623(); break; case 624: case_624(); break; case 625: case_625(); break; case 626: case_626(); break; case 627: case_627(); break; case 633: #line 4179 "cs-parser.jay" { yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } break; case 635: #line 4190 "cs-parser.jay" { yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; case 636: #line 4203 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 637: case_637(); break; case 638: case_638(); break; case 639: case_639(); break; case 640: case_640(); break; case 641: #line 4237 "cs-parser.jay" { yyVal = null; } break; case 642: #line 4239 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 643: case_643(); break; case 646: case_646(); break; case 647: case_647(); break; case 648: case_648(); break; case 649: case_649(); break; case 650: case_650(); break; case 651: case_651(); break; case 652: case_652(); break; case 653: case_653(); break; case 654: case_654(); break; case 655: case_655(); break; case 656: case_656(); break; case 657: case_657(); break; case 658: case_658(); break; case 659: case_659(); break; case 660: case_660(); break; case 662: #line 4354 "cs-parser.jay" { current_container.AddBasesForPart (current_class, (List<FullNamedExpression>) yyVals[0+yyTop]); } break; case 664: #line 4362 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 665: case_665(); break; case 666: case_666(); break; case 667: case_667(); break; case 668: case_668(); break; case 669: case_669(); break; case 670: case_670(); break; case 671: case_671(); break; case 672: #line 4446 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; case 673: #line 4450 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); } break; case 674: #line 4457 "cs-parser.jay" { yyVal = Variance.None; } break; case 675: case_675(); break; case 676: #line 4473 "cs-parser.jay" { yyVal = Variance.Covariant; } break; case 677: #line 4477 "cs-parser.jay" { yyVal = Variance.Contravariant; } break; case 678: case_678(); break; case 679: #line 4502 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 680: case_680(); break; case 681: case_681(); break; case 682: case_682(); break; case 683: case_683(); break; case 688: #line 4546 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 689: #line 4550 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 691: case_691(); break; case 694: #line 4574 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 695: #line 4578 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 724: case_724(); break; case 725: case_725(); break; case 726: case_726(); break; case 727: case_727(); break; case 728: case_728(); break; case 731: case_731(); break; case 732: case_732(); break; case 733: case_733(); break; case 734: case_734(); break; case 735: #line 4722 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 736: #line 4726 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (TypeManager.void_type, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 737: case_737(); break; case 739: case_739(); break; case 740: #line 4747 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } break; case 741: case_741(); break; case 742: case_742(); break; case 743: case_743(); break; case 744: case_744(); break; case 746: case_746(); break; case 747: case_747(); break; case 752: case_752(); break; case 753: case_753(); break; case 754: #line 4832 "cs-parser.jay" { Report.Error (145, lexer.Location, "A const field requires a value to be provided"); } break; case 755: #line 4836 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; } break; case 760: case_760(); break; case 762: case_762(); break; case 763: case_763(); break; case 764: case_764(); break; case 765: #line 4881 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 766: #line 4885 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 767: #line 4886 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 768: case_768(); break; case 769: case_769(); break; case 770: case_770(); break; case 773: case_773(); break; case 774: case_774(); break; case 775: #line 4954 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); } break; case 776: case_776(); break; case 777: case_777(); break; case 779: case_779(); break; case 780: case_780(); break; case 781: case_781(); break; case 782: #line 4998 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; case 783: #line 5002 "cs-parser.jay" { yyVal = new SwitchSection ((List<SwitchLabel>) yyVals[-2+yyTop], current_block); } break; case 784: case_784(); break; case 785: case_785(); break; case 786: case_786(); break; case 787: #line 5031 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } break; case 792: case_792(); break; case 793: case_793(); break; case 794: case_794(); break; case 795: case_795(); break; case 796: #line 5085 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 798: case_798(); break; case 799: case_799(); break; case 801: #line 5106 "cs-parser.jay" { yyVal = null; } break; case 803: #line 5111 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 807: case_807(); break; case 808: case_808(); break; case 809: case_809(); break; case 810: case_810(); break; case 817: case_817(); break; case 818: case_818(); break; case 819: case_819(); break; case 820: case_820(); break; case 821: case_821(); break; case 822: case_822(); break; case 823: case_823(); break; case 824: case_824(); break; case 825: case_825(); break; case 828: #line 5266 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } break; case 829: case_829(); break; case 830: case_830(); break; case 831: case_831(); break; case 832: case_832(); break; case 833: case_833(); break; case 836: #line 5319 "cs-parser.jay" { yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 837: case_837(); break; case 838: #line 5338 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 839: case_839(); break; case 840: #line 5356 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 841: #line 5363 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 842: case_842(); break; case 843: #line 5373 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 844: case_844(); break; case 845: case_845(); break; case 846: case_846(); break; case 847: case_847(); break; case 848: case_848(); break; case 849: case_849(); break; case 850: case_850(); break; case 851: case_851(); break; case 852: #line 5455 "cs-parser.jay" { Report.Error (210, lexer.Location, "You must provide an initializer in a fixed or using statement declaration"); } break; case 853: case_853(); break; case 854: case_854(); break; case 855: case_855(); break; case 856: case_856(); break; case 857: case_857(); break; case 858: case_858(); break; case 859: case_859(); break; case 860: case_860(); break; case 861: case_861(); break; case 862: #line 5555 "cs-parser.jay" { current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location); } break; case 863: case_863(); break; case 864: #line 5570 "cs-parser.jay" { current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location); } break; case 865: case_865(); break; case 866: case_866(); break; case 868: #line 5610 "cs-parser.jay" { current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location); } break; case 869: case_869(); break; case 870: case_870(); break; case 871: case_871(); break; case 872: case_872(); break; case 876: case_876(); break; case 882: #line 5668 "cs-parser.jay" { current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location); } break; case 883: case_883(); break; case 884: #line 5686 "cs-parser.jay" { current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location); } break; case 885: case_885(); break; case 886: case_886(); break; case 887: case_887(); break; case 888: case_888(); break; case 889: case_889(); break; case 890: case_890(); break; case 891: case_891(); break; case 892: case_892(); break; case 893: case_893(); break; case 895: #line 5828 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 896: #line 5835 "cs-parser.jay" { current_block = new Linq.QueryBlock (compiler, current_block, lexer.Location); } break; case 897: case_897(); break; case 899: case_899(); break; case 900: case_900(); break; case 902: case_902(); break; case 903: case_903(); break; case 904: #line 5881 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 905: #line 5885 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); } break; case 906: #line 5889 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); } break; case 907: #line 5896 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 908: #line 5900 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); } break; case 909: #line 5904 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); } break; case 911: case_911(); break; case 912: case_912(); break; case 915: case_915(); break; case 916: case_916(); break; case 917: #line 5996 "cs-parser.jay" { Evaluator.LoadAliases (current_namespace); } break; #line default } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; int yyM = yyLhs[yyN]; if (yyState == 0 && yyM == 0) { //t if (debug != null) debug.shift(0, yyFinal); yyState = yyFinal; if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value()); } if (yyToken == 0) { //t if (debug != null) debug.accept(yyVal); return yyVal; } goto continue_yyLoop; } if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState)) yyState = yyTable[yyN]; else yyState = yyDgoto[yyM]; //t if (debug != null) debug.shift(yyStates[yyTop], yyState); goto continue_yyLoop; continue_yyDiscarded: ; // implements the named-loop continue: 'continue yyDiscarded' } continue_yyLoop: ; // implements the named-loop continue: 'continue yyLoop' } }
/** the generated parser. Maintains a state and a value stack, currently with fixed maximum size. @param yyLex scanner. @return result of the last reduction, if any. @throws yyException on irrecoverable parse error. */ internal Object yyparse (yyParser.yyInput yyLex) { if (yyMax <= 0) yyMax = 256; // initial size int yyState = 0; // state stack ptr int [] yyStates; // state stack yyVal = null; yyToken = -1; int yyErrorFlag = 0; // #tks to shift if (use_global_stacks && global_yyStates != null) { yyVals = global_yyVals; yyStates = global_yyStates; } else { yyVals = new object [yyMax]; yyStates = new int [yyMax]; if (use_global_stacks) { global_yyVals = yyVals; global_yyStates = yyStates; } } /*yyLoop:*/ for (yyTop = 0;; ++ yyTop) { if (yyTop >= yyStates.Length) { // dynamically increase global::System.Array.Resize (ref yyStates, yyStates.Length+yyMax); global::System.Array.Resize (ref yyVals, yyVals.Length+yyMax); } yyStates[yyTop] = yyState; yyVals[yyTop] = yyVal; //t if (debug != null) debug.push(yyState, yyVal); /*yyDiscarded:*/ while (true) { // discarding a token does not change stack int yyN; if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); } if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) { //t if (debug != null) //t debug.shift(yyState, yyTable[yyN], yyErrorFlag-1); yyState = yyTable[yyN]; // shift to yyN yyVal = yyLex.value(); yyToken = -1; if (yyErrorFlag > 0) -- yyErrorFlag; goto continue_yyLoop; } if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == yyToken) yyN = yyTable[yyN]; // reduce (yyN) else switch (yyErrorFlag) { case 0: yyExpectingState = yyState; // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState)); //t if (debug != null) debug.error("syntax error"); if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof (); goto case 1; case 1: case 2: yyErrorFlag = 3; do { if ((yyN = yySindex[yyStates[yyTop]]) != 0 && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == Token.yyErrorCode) { //t if (debug != null) //t debug.shift(yyStates[yyTop], yyTable[yyN], 3); yyState = yyTable[yyN]; yyVal = yyLex.value(); goto continue_yyLoop; } //t if (debug != null) debug.pop(yyStates[yyTop]); } while (-- yyTop >= 0); //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error"); case 3: if (yyToken == 0) { //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error at end-of-file"); } //t if (debug != null) //t debug.discard(yyState, yyToken, yyname(yyToken), //t yyLex.value()); yyToken = -1; goto continue_yyDiscarded; // leave stack alone } } int yyV = yyTop + 1-yyLen[yyN]; //t if (debug != null) //t debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]); yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: #line 385 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 2: #line 386 "cs-parser.jay" { Lexer.CompleteOnEOF = false; } break; case 6: case_6(); break; case 7: #line 405 "cs-parser.jay" { module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace); } break; case 8: case_8(); break; case 13: case_13(); break; case 14: #line 450 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 17: case_17(); break; case 18: case_18(); break; case 19: case_19(); break; case 20: case_20(); break; case 21: case_21(); break; case 22: case_22(); break; case 23: case_23(); break; case 24: case_24(); break; case 25: case_25(); break; case 26: case_26(); break; case 27: case_27(); break; case 40: case_40(); break; case 41: #line 625 "cs-parser.jay" { current_namespace.DeclarationFound = true; } break; case 42: case_42(); break; case 50: case_50(); break; case 51: case_51(); break; case 52: case_52(); break; case 53: case_53(); break; case 54: case_54(); break; case 55: case_55(); break; case 56: case_56(); break; case 57: case_57(); break; case 58: #line 739 "cs-parser.jay" { yyVal = "event"; savedCloseLocation = GetLocation (yyVals[0+yyTop]); } break; case 59: #line 740 "cs-parser.jay" { yyVal = "return"; savedCloseLocation = GetLocation (yyVals[0+yyTop]); } break; case 60: case_60(); break; case 61: #line 757 "cs-parser.jay" { yyVal = new List<Attribute> (4) { (Attribute) yyVals[0+yyTop] }; } break; case 62: case_62(); break; case 63: #line 772 "cs-parser.jay" { ++lexer.parsing_block; } break; case 64: case_64(); break; case 66: #line 800 "cs-parser.jay" { yyVal = null; HadAttributeParens = false; } break; case 67: case_67(); break; case 68: #line 812 "cs-parser.jay" { yyVal = null; } break; case 69: case_69(); break; case 70: case_70(); break; case 71: case_71(); break; case 72: case_72(); break; case 73: #line 856 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 75: #line 864 "cs-parser.jay" { ++lexer.parsing_block; } break; case 76: case_76(); break; case 77: case_77(); break; case 78: #line 890 "cs-parser.jay" { yyVal = null; } break; case 79: #line 894 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; case 80: #line 898 "cs-parser.jay" { yyVal = Argument.AType.Out; } break; case 83: #line 910 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; case 84: #line 914 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; case 96: case_96(); break; case 97: #line 945 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 98: case_98(); break; case 99: case_99(); break; case 100: case_100(); break; case 101: case_101(); break; case 102: case_102(); break; case 103: #line 988 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 104: case_104(); break; case 105: case_105(); break; case 106: case_106(); break; case 109: #line 1037 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 110: #line 1041 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 111: case_111(); break; case 112: #line 1057 "cs-parser.jay" { ++lexer.parsing_block; } break; case 113: case_113(); break; case 114: case_114(); break; case 117: case_117(); break; case 118: case_118(); break; case 119: case_119(); break; case 120: case_120(); break; case 121: #line 1136 "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"); } break; case 123: case_123(); break; case 124: case_124(); break; case 127: #line 1166 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 128: #line 1170 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 129: case_129(); break; case 130: #line 1183 "cs-parser.jay" { ++lexer.parsing_block; } break; case 131: case_131(); break; case 134: #line 1202 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 135: #line 1206 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 136: case_136(); break; case 137: #line 1222 "cs-parser.jay" { ++lexer.parsing_block; } break; case 138: case_138(); break; case 139: case_139(); break; case 142: case_142(); break; case 143: case_143(); break; case 144: case_144(); break; case 145: #line 1290 "cs-parser.jay" { valid_param_mod = ParameterModifierType.All; } break; case 146: case_146(); break; case 147: case_147(); break; case 148: #line 1329 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 149: case_149(); break; case 150: #line 1339 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 151: case_151(); break; case 152: case_152(); break; case 153: case_153(); break; case 155: #line 1410 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; case 156: #line 1414 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 158: case_158(); break; case 159: case_159(); break; case 160: case_160(); break; case 161: case_161(); break; case 162: case_162(); break; case 163: case_163(); break; case 164: case_164(); break; case 165: #line 1486 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; case 166: #line 1490 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); } break; case 167: case_167(); break; case 168: case_168(); break; case 169: case_169(); break; case 170: case_170(); break; case 171: case_171(); break; case 172: case_172(); break; case 173: case_173(); break; case 174: #line 1571 "cs-parser.jay" { ++lexer.parsing_block; } break; case 175: case_175(); break; case 176: #line 1612 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; case 178: #line 1620 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 179: case_179(); break; case 180: case_180(); break; case 181: case_181(); break; case 182: case_182(); break; case 183: case_183(); break; case 184: case_184(); break; case 185: case_185(); break; case 186: case_186(); break; case 187: case_187(); break; case 188: #line 1714 "cs-parser.jay" { Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); } break; case 189: case_189(); break; case 190: case_190(); break; case 191: case_191(); break; case 192: case_192(); break; case 193: case_193(); break; case 194: #line 1768 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; case 195: case_195(); break; case 196: #line 1797 "cs-parser.jay" { lexer.PropertyParsing = false; } break; case 197: case_197(); break; case 202: case_202(); break; case 203: case_203(); break; case 204: case_204(); break; case 205: case_205(); break; case 206: case_206(); break; case 208: case_208(); break; case 209: case_209(); break; case 210: #line 1946 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 211: case_211(); break; case 212: case_212(); break; case 213: case_213(); break; case 214: case_214(); break; case 215: #line 1985 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 218: #line 1997 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; case 219: #line 2001 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; case 220: #line 2008 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 221: #line 2012 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 226: #line 2020 "cs-parser.jay" { report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; case 227: #line 2024 "cs-parser.jay" { report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; case 228: #line 2028 "cs-parser.jay" { report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; case 229: #line 2034 "cs-parser.jay" { } break; case 230: case_230(); break; case 232: #line 2067 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; case 234: case_234(); break; case 235: #line 2083 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 236: case_236(); break; case 238: #line 2129 "cs-parser.jay" { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 239: #line 2130 "cs-parser.jay" { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 240: #line 2131 "cs-parser.jay" { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 241: #line 2132 "cs-parser.jay" { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 242: #line 2133 "cs-parser.jay" { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 243: #line 2134 "cs-parser.jay" { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 244: #line 2136 "cs-parser.jay" { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 245: #line 2137 "cs-parser.jay" { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 246: #line 2139 "cs-parser.jay" { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 247: #line 2140 "cs-parser.jay" { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 248: #line 2141 "cs-parser.jay" { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 249: #line 2142 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 250: #line 2143 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 251: #line 2144 "cs-parser.jay" { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 252: #line 2145 "cs-parser.jay" { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 253: #line 2146 "cs-parser.jay" { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 254: #line 2147 "cs-parser.jay" { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 255: #line 2148 "cs-parser.jay" { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 256: #line 2149 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 257: #line 2150 "cs-parser.jay" { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 258: #line 2151 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 259: #line 2152 "cs-parser.jay" { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 260: #line 2159 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 261: case_261(); break; case 262: #line 2182 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 263: case_263(); break; case 264: case_264(); break; case 265: case_265(); break; case 266: case_266(); break; case 267: case_267(); break; case 268: case_268(); break; case 269: case_269(); break; case 271: #line 2292 "cs-parser.jay" { current_block = null; yyVal = null; } break; case 274: #line 2304 "cs-parser.jay" { ++lexer.parsing_block; } break; case 275: case_275(); break; case 276: #line 2314 "cs-parser.jay" { ++lexer.parsing_block; } break; case 277: case_277(); break; case 278: case_278(); break; case 279: case_279(); break; case 280: case_280(); break; case 281: case_281(); break; case 282: case_282(); break; case 283: case_283(); break; case 284: case_284(); break; case 285: case_285(); break; case 286: case_286(); break; case 287: case_287(); break; case 289: #line 2438 "cs-parser.jay" { ++lexer.parsing_block; } break; case 290: case_290(); break; case 293: #line 2455 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 294: #line 2459 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 295: case_295(); break; case 296: #line 2472 "cs-parser.jay" { ++lexer.parsing_block; } break; case 297: case_297(); break; case 298: case_298(); break; case 299: #line 2497 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 302: case_302(); break; case 303: case_303(); break; case 304: case_304(); break; case 305: case_305(); break; case 306: case_306(); break; case 307: case_307(); break; case 308: case_308(); break; case 309: case_309(); break; case 311: case_311(); break; case 312: case_312(); break; case 313: case_313(); break; case 314: case_314(); break; case 315: case_315(); break; case 317: case_317(); break; case 318: case_318(); break; case 321: #line 2665 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); } break; case 323: case_323(); break; case 324: case_324(); break; case 325: case_325(); break; case 326: case_326(); break; case 327: case_327(); break; case 329: #line 2739 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; case 330: case_330(); break; case 331: #line 2758 "cs-parser.jay" { lexer.ConstraintsParsing = false; } break; case 332: case_332(); break; case 334: case_334(); break; case 336: case_336(); break; case 338: case_338(); break; case 339: case_339(); break; case 341: case_341(); break; case 342: case_342(); break; case 343: case_343(); break; case 344: case_344(); break; case 345: #line 2864 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 346: case_346(); break; case 347: case_347(); break; case 349: case_349(); break; case 350: case_350(); break; case 351: case_351(); break; case 352: case_352(); break; case 353: case_353(); break; case 354: case_354(); break; case 356: case_356(); break; case 357: case_357(); break; case 358: case_358(); break; case 359: case_359(); break; case 360: case_360(); break; case 362: #line 2989 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; case 363: #line 2996 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 365: case_365(); break; case 367: case_367(); break; case 369: case_369(); break; case 371: #line 3034 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 372: case_372(); break; case 373: #line 3053 "cs-parser.jay" { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 374: case_374(); break; case 375: #line 3062 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 376: #line 3066 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 377: case_377(); break; case 378: case_378(); break; case 379: case_379(); break; case 380: #line 3100 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; case 381: #line 3101 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; case 382: #line 3102 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; case 383: #line 3103 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; case 384: #line 3104 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; case 385: #line 3105 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; case 387: #line 3110 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; case 388: #line 3111 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; case 389: #line 3112 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; case 390: #line 3113 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; case 391: #line 3114 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; case 392: #line 3115 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; case 393: #line 3116 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; case 394: #line 3117 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; case 395: #line 3118 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; case 416: case_416(); break; case 417: case_417(); break; case 421: #line 3165 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; case 422: #line 3169 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; case 423: #line 3170 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; case 428: case_428(); break; case 429: #line 3203 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); } break; case 430: case_430(); break; case 431: case_431(); break; case 432: case_432(); break; case 433: case_433(); break; case 434: #line 3238 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); } break; case 435: case_435(); break; case 436: #line 3246 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } break; case 437: case_437(); break; case 438: case_438(); break; case 439: case_439(); break; case 440: case_440(); break; case 441: #line 3276 "cs-parser.jay" { yyVal = null; } break; case 443: case_443(); break; case 444: case_444(); break; case 445: #line 3299 "cs-parser.jay" { yyVal = null; } break; case 446: #line 3303 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 447: case_447(); break; case 448: case_448(); break; case 449: case_449(); break; case 450: case_450(); break; case 451: #line 3336 "cs-parser.jay" { yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } break; case 452: case_452(); break; case 453: case_453(); break; case 454: case_454(); break; case 457: #line 3367 "cs-parser.jay" { yyVal = null; } break; case 459: case_459(); break; case 460: case_460(); break; case 461: case_461(); break; case 462: case_462(); break; case 463: case_463(); break; case 464: #line 3421 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 468: case_468(); break; case 469: case_469(); break; case 470: case_470(); break; case 471: case_471(); break; case 473: case_473(); break; case 474: case_474(); break; case 475: case_475(); break; case 476: case_476(); break; case 477: case_477(); break; case 478: case_478(); break; case 479: case_479(); break; case 480: case_480(); break; case 481: #line 3518 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 483: #line 3526 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } break; case 484: case_484(); break; case 485: case_485(); break; case 486: #line 3546 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 487: #line 3553 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 488: case_488(); break; case 489: case_489(); break; case 490: case_490(); break; case 491: case_491(); break; case 492: case_492(); break; case 493: case_493(); break; case 494: case_494(); break; case 495: #line 3620 "cs-parser.jay" { ++lexer.parsing_type; } break; case 496: case_496(); break; case 497: case_497(); break; case 500: #line 3647 "cs-parser.jay" { yyVal = null; } break; case 502: case_502(); break; case 503: case_503(); break; case 504: case_504(); break; case 505: case_505(); break; case 506: case_506(); break; case 507: case_507(); break; case 511: case_511(); break; case 512: case_512(); break; case 513: case_513(); break; case 514: #line 3725 "cs-parser.jay" { yyVal = 2; } break; case 515: #line 3729 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; case 516: #line 3736 "cs-parser.jay" { yyVal = null; } break; case 517: #line 3740 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 518: case_518(); break; case 519: case_519(); break; case 520: case_520(); break; case 521: case_521(); break; case 522: #line 3784 "cs-parser.jay" { lexer.TypeOfParsing = true; } break; case 523: case_523(); break; case 526: case_526(); break; case 527: case_527(); break; case 528: case_528(); break; case 529: case_529(); break; case 530: case_530(); break; case 531: case_531(); break; case 532: case_532(); break; case 533: case_533(); break; case 534: case_534(); break; case 535: case_535(); break; case 536: case_536(); break; case 537: case_537(); break; case 538: case_538(); break; case 539: case_539(); break; case 540: case_540(); break; case 541: #line 3923 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); } break; case 542: case_542(); break; case 543: #line 3936 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; case 544: case_544(); break; case 545: #line 3953 "cs-parser.jay" { yyVal = ParametersCompiled.Undefined; } break; case 547: #line 3961 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 548: case_548(); break; case 549: case_549(); break; case 551: #line 3987 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 552: #line 3991 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 553: case_553(); break; case 554: case_554(); break; case 555: case_555(); break; case 556: case_556(); break; case 557: case_557(); break; case 558: case_558(); break; case 560: #line 4052 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 561: #line 4056 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 562: #line 4060 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 563: #line 4064 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 564: #line 4068 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 565: #line 4072 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 566: case_566(); break; case 567: case_567(); break; case 568: case_568(); break; case 569: case_569(); break; case 570: case_570(); break; case 571: case_571(); break; case 573: case_573(); break; case 574: case_574(); break; case 575: case_575(); break; case 576: case_576(); break; case 577: case_577(); break; case 578: case_578(); break; case 580: case_580(); break; case 581: case_581(); break; case 582: #line 4166 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 583: #line 4170 "cs-parser.jay" { yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 584: case_584(); break; case 585: case_585(); break; case 586: case_586(); break; case 587: case_587(); break; case 589: case_589(); break; case 590: case_590(); break; case 591: case_591(); break; case 592: case_592(); break; case 594: case_594(); break; case 595: case_595(); break; case 596: case_596(); break; case 597: case_597(); break; case 598: case_598(); break; case 599: case_599(); break; case 600: case_600(); break; case 601: case_601(); break; case 603: case_603(); break; case 604: case_604(); break; case 605: case_605(); break; case 606: case_606(); break; case 608: case_608(); break; case 609: case_609(); break; case 611: case_611(); break; case 612: case_612(); break; case 614: case_614(); break; case 615: case_615(); break; case 617: case_617(); break; case 618: case_618(); break; case 620: case_620(); break; case 621: case_621(); break; case 623: case_623(); break; case 625: case_625(); break; case 626: case_626(); break; case 627: case_627(); break; case 628: case_628(); break; case 629: case_629(); break; case 630: case_630(); break; case 631: case_631(); break; case 632: case_632(); break; case 633: case_633(); break; case 634: case_634(); break; case 635: case_635(); break; case 636: case_636(); break; case 637: case_637(); break; case 638: case_638(); break; case 639: case_639(); break; case 640: case_640(); break; case 641: case_641(); break; case 642: case_642(); break; case 643: case_643(); break; case 644: #line 4523 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 645: case_645(); break; case 646: #line 4534 "cs-parser.jay" { start_block (Location.Null); } break; case 647: case_647(); break; case 649: case_649(); break; case 651: case_651(); break; case 652: case_652(); break; case 653: case_653(); break; case 654: case_654(); break; case 655: case_655(); break; case 656: #line 4588 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 657: case_657(); break; case 658: case_658(); break; case 659: #line 4602 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 660: case_660(); break; case 661: case_661(); break; case 667: #line 4627 "cs-parser.jay" { yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } break; case 668: case_668(); break; case 669: case_669(); break; case 670: case_670(); break; case 672: #line 4656 "cs-parser.jay" { yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; case 673: #line 4669 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 674: case_674(); break; case 675: case_675(); break; case 676: case_676(); break; case 677: case_677(); break; case 678: #line 4714 "cs-parser.jay" { yyVal = null; } break; case 679: #line 4716 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 680: case_680(); break; case 681: #line 4729 "cs-parser.jay" { lexer.parsing_modifiers = false; } break; case 683: case_683(); break; case 684: case_684(); break; case 685: case_685(); break; case 686: case_686(); break; case 687: case_687(); break; case 688: case_688(); break; case 689: case_689(); break; case 690: case_690(); break; case 691: case_691(); break; case 692: case_692(); break; case 693: case_693(); break; case 694: case_694(); break; case 695: case_695(); break; case 696: case_696(); break; case 697: case_697(); break; case 698: case_698(); break; case 700: case_700(); break; case 701: case_701(); break; case 703: #line 4855 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 704: case_704(); break; case 705: case_705(); break; case 706: case_706(); break; case 707: case_707(); break; case 708: case_708(); break; case 709: case_709(); break; case 710: case_710(); break; case 711: case_711(); break; case 712: #line 4948 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; case 713: #line 4952 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); } break; case 714: #line 4959 "cs-parser.jay" { yyVal = Variance.None; } break; case 715: case_715(); break; case 716: case_716(); break; case 717: case_717(); break; case 718: case_718(); break; case 719: #line 5004 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 720: case_720(); break; case 721: case_721(); break; case 722: case_722(); break; case 723: case_723(); break; case 724: case_724(); break; case 725: case_725(); break; case 726: case_726(); break; case 731: #line 5066 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 732: #line 5070 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 734: case_734(); break; case 735: case_735(); break; case 738: #line 5104 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 739: #line 5108 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 768: case_768(); break; case 769: case_769(); break; case 770: case_770(); break; case 771: case_771(); break; case 772: case_772(); break; case 775: case_775(); break; case 776: case_776(); break; case 777: case_777(); break; case 778: case_778(); break; case 779: #line 5252 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 780: #line 5256 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 781: case_781(); break; case 783: case_783(); break; case 784: #line 5277 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } break; case 786: case_786(); break; case 787: case_787(); break; case 788: case_788(); break; case 789: case_789(); break; case 790: case_790(); break; case 792: case_792(); break; case 794: case_794(); break; case 795: case_795(); break; case 796: case_796(); break; case 800: case_800(); break; case 803: case_803(); break; case 804: case_804(); break; case 805: #line 5412 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); } break; case 806: case_806(); break; case 811: case_811(); break; case 813: case_813(); break; case 814: case_814(); break; case 815: case_815(); break; case 816: #line 5462 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 817: case_817(); break; case 818: #line 5472 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 819: #line 5473 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 820: case_820(); break; case 821: case_821(); break; case 822: case_822(); break; case 825: case_825(); break; case 826: case_826(); break; case 827: case_827(); break; case 828: #line 5548 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); } break; case 829: case_829(); break; case 830: case_830(); break; case 831: case_831(); break; case 833: case_833(); break; case 834: case_834(); break; case 835: case_835(); break; case 836: #line 5599 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; case 837: #line 5603 "cs-parser.jay" { yyVal = new SwitchSection ((List<SwitchLabel>) yyVals[-2+yyTop], current_block); } break; case 838: case_838(); break; case 839: case_839(); break; case 840: case_840(); break; case 841: case_841(); break; case 842: #line 5637 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } break; case 847: case_847(); break; case 848: case_848(); break; case 849: case_849(); break; case 850: case_850(); break; case 851: case_851(); break; case 852: case_852(); break; case 853: #line 5698 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 854: case_854(); break; case 855: #line 5713 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 856: case_856(); break; case 857: case_857(); break; case 858: #line 5734 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 859: case_859(); break; case 860: case_860(); break; case 861: case_861(); break; case 862: #line 5768 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 864: case_864(); break; case 865: case_865(); break; case 867: #line 5789 "cs-parser.jay" { yyVal = null; } break; case 869: #line 5794 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 873: case_873(); break; case 874: case_874(); break; case 875: case_875(); break; case 876: case_876(); break; case 877: case_877(); break; case 878: case_878(); break; case 879: case_879(); break; case 886: case_886(); break; case 887: case_887(); break; case 888: case_888(); break; case 889: case_889(); break; case 890: case_890(); break; case 891: case_891(); break; case 892: case_892(); break; case 893: case_893(); break; case 894: case_894(); break; case 895: case_895(); break; case 896: case_896(); break; case 897: case_897(); break; case 898: case_898(); break; case 899: case_899(); break; case 902: #line 6034 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } break; case 903: case_903(); break; case 904: case_904(); break; case 905: case_905(); break; case 906: case_906(); break; case 907: case_907(); break; case 910: #line 6083 "cs-parser.jay" { yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 911: case_911(); break; case 912: #line 6102 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 913: case_913(); break; case 914: case_914(); break; case 915: #line 6143 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 916: #line 6150 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 917: case_917(); break; case 918: #line 6160 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 919: case_919(); break; case 920: case_920(); break; case 921: case_921(); break; case 922: case_922(); break; case 923: case_923(); break; case 924: case_924(); break; case 925: case_925(); break; case 926: case_926(); break; case 927: case_927(); break; case 928: case_928(); break; case 930: case_930(); break; case 931: #line 6265 "cs-parser.jay" { Error_MissingInitializer (lexer.Location); } break; case 932: case_932(); break; case 933: case_933(); break; case 934: case_934(); break; case 935: case_935(); break; case 936: case_936(); break; case 937: case_937(); break; case 938: case_938(); break; case 939: case_939(); break; case 940: case_940(); break; case 941: #line 6370 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 942: case_942(); break; case 943: #line 6386 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 944: case_944(); break; case 945: case_945(); break; case 946: case_946(); break; case 948: case_948(); break; case 949: case_949(); break; case 950: #line 6450 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 951: case_951(); break; case 952: case_952(); break; case 953: case_953(); break; case 954: case_954(); break; case 956: case_956(); break; case 962: #line 6504 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 963: case_963(); break; case 964: #line 6523 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 965: case_965(); break; case 966: case_966(); break; case 967: case_967(); break; case 968: case_968(); break; case 969: case_969(); break; case 970: case_970(); break; case 971: case_971(); break; case 972: case_972(); break; case 973: case_973(); break; case 975: case_975(); break; case 976: case_976(); break; case 977: case_977(); break; case 979: case_979(); break; case 980: case_980(); break; case 982: case_982(); break; case 983: case_983(); break; case 984: #line 6724 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 985: case_985(); break; case 986: case_986(); break; case 987: #line 6741 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 988: case_988(); break; case 989: case_989(); break; case 991: case_991(); break; case 992: case_992(); break; case 995: case_995(); break; case 996: case_996(); break; case 1004: #line 6863 "cs-parser.jay" { module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; } break; case 1005: #line 6870 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; } break; case 1006: case_1006(); break; case 1007: case_1007(); break; case 1008: #line 6887 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); } break; case 1009: #line 6891 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 1010: case_1010(); break; case 1011: case_1011(); break; case 1012: case_1012(); break; case 1013: case_1013(); break; case 1015: #line 6927 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; case 1017: #line 6935 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 1018: #line 6939 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 1019: #line 6946 "cs-parser.jay" { yyVal = new List<DocumentationParameter> (0); } break; case 1021: case_1021(); break; case 1022: case_1022(); break; case 1023: case_1023(); break; #line default } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; int yyM = yyLhs[yyN]; if (yyState == 0 && yyM == 0) { //t if (debug != null) debug.shift(0, yyFinal); yyState = yyFinal; if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value()); } if (yyToken == 0) { //t if (debug != null) debug.accept(yyVal); return yyVal; } goto continue_yyLoop; } if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState)) yyState = yyTable[yyN]; else yyState = yyDgoto[yyM]; //t if (debug != null) debug.shift(yyStates[yyTop], yyState); goto continue_yyLoop; continue_yyDiscarded: ; // implements the named-loop continue: 'continue yyDiscarded' } continue_yyLoop: ; // implements the named-loop continue: 'continue yyLoop' } }
/** the generated parser. Maintains a state and a value stack, currently with fixed maximum size. @param yyLex scanner. @return result of the last reduction, if any. @throws yyException on irrecoverable parse error. */ internal Object yyparse (yyParser.yyInput yyLex) { if (yyMax <= 0) yyMax = 256; // initial size int yyState = 0; // state stack ptr int [] yyStates = new int[yyMax]; // state stack Object yyVal = null; // value stack ptr Object [] yyVals = new Object[yyMax]; // value stack int yyToken = -1; // current input int yyErrorFlag = 0; // #tks to shift /*yyLoop:*/ for (int yyTop = 0;; ++ yyTop) { if (yyTop >= yyStates.Length) { // dynamically increase int[] i = new int[yyStates.Length+yyMax]; yyStates.CopyTo (i, 0); yyStates = i; Object[] o = new Object[yyVals.Length+yyMax]; yyVals.CopyTo (o, 0); yyVals = o; } yyStates[yyTop] = yyState; yyVals[yyTop] = yyVal; //t if (debug != null) debug.push(yyState, yyVal); /*yyDiscarded:*/ for (;;) { // discarding a token does not change stack int yyN; if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); } if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) { //t if (debug != null) //t debug.shift(yyState, yyTable[yyN], yyErrorFlag-1); yyState = yyTable[yyN]; // shift to yyN yyVal = yyLex.value(); yyToken = -1; if (yyErrorFlag > 0) -- yyErrorFlag; goto continue_yyLoop; } if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == yyToken) yyN = yyTable[yyN]; // reduce (yyN) else switch (yyErrorFlag) { case 0: yyExpectingState = yyState; // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState)); //t if (debug != null) debug.error("syntax error"); if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof (); goto case 1; case 1: case 2: yyErrorFlag = 3; do { if ((yyN = yySindex[yyStates[yyTop]]) != 0 && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == Token.yyErrorCode) { //t if (debug != null) //t debug.shift(yyStates[yyTop], yyTable[yyN], 3); yyState = yyTable[yyN]; yyVal = yyLex.value(); goto continue_yyLoop; } //t if (debug != null) debug.pop(yyStates[yyTop]); } while (-- yyTop >= 0); //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error"); case 3: if (yyToken == 0) { //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error at end-of-file"); } //t if (debug != null) //t debug.discard(yyState, yyToken, yyname(yyToken), //t yyLex.value()); yyToken = -1; goto continue_yyDiscarded; // leave stack alone } } int yyV = yyTop + 1-yyLen[yyN]; //t if (debug != null) //t debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]); yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 6: #line 366 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 7: #line 370 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 15: #line 393 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; if (s != "alias"){ syntax_error (lt.Location, "`alias' expected"); } else if (RootContext.Version == LanguageVersion.ISO_1) { Report.FeatureIsNotAvailable (lt.Location, "external alias"); } else { lt = (LocatedToken) yyVals[-1+yyTop]; current_namespace.AddUsingExternalAlias (lt.Value, lt.Location); } } break; case 16: #line 406 "cs-parser.jay" { syntax_error (GetLocation (yyVals[-1+yyTop]), "`alias' expected"); /* TODO: better*/ } break; case 19: #line 418 "cs-parser.jay" { if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 20: #line 423 "cs-parser.jay" { if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 21: #line 431 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-3+yyTop]; current_namespace.AddUsingAlias (lt.Value, (MemberName) yyVals[-1+yyTop], (Location) yyVals[-4+yyTop]); } break; case 22: #line 435 "cs-parser.jay" { CheckIdentifierToken (yyToken, GetLocation (yyVals[0+yyTop])); yyVal = null; } break; case 23: #line 443 "cs-parser.jay" { current_namespace.AddUsing ((MemberName) yyVals[-1+yyTop], (Location) yyVals[-2+yyTop]); } break; case 24: #line 455 "cs-parser.jay" { MemberName name = (MemberName) yyVals[0+yyTop]; if (yyVals[-2+yyTop] != null) { Report.Error(1671, name.Location, "A namespace declaration cannot have modifiers or attributes"); } current_namespace = new NamespaceEntry ( current_namespace, file, name.GetName ()); current_class = current_namespace.SlaveDeclSpace; current_container = current_class.PartialContainer; } break; case 25: #line 468 "cs-parser.jay" { current_namespace = current_namespace.Parent; current_class = current_namespace.SlaveDeclSpace; current_container = current_class.PartialContainer; } break; case 26: #line 477 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName (lt.Value, lt.Location); } break; case 27: #line 482 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location); } break; case 28: #line 487 "cs-parser.jay" { syntax_error (lexer.Location, "`.' expected"); } break; case 33: #line 504 "cs-parser.jay" { MemberName name = (MemberName) yyVals[0+yyTop]; if (name.TypeArguments != null) syntax_error (lexer.Location, "namespace name expected"); yyVal = name; } break; case 34: #line 516 "cs-parser.jay" { if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 37: #line 529 "cs-parser.jay" { Report.Error (1518, lexer.Location, "Expected `class', `delegate', `enum', `interface', or `struct'"); } break; case 39: #line 537 "cs-parser.jay" { Report.Error (1513, lexer.Location, "Expected `}'"); } break; case 48: #line 564 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { DeclSpace ds = (DeclSpace)yyVals[0+yyTop]; if ((ds.ModFlags & (Modifiers.PRIVATE|Modifiers.PROTECTED)) != 0){ Report.Error (1527, ds.Location, "Namespace elements cannot be explicitly declared as private, protected or protected internal"); } } current_namespace.DeclarationFound = true; } break; case 49: #line 575 "cs-parser.jay" { current_namespace.DeclarationFound = true; } break; case 50: #line 579 "cs-parser.jay" { Report.Error (116, ((MemberCore) yyVals[0+yyTop]).Location, "A namespace can only contain types and namespace declarations"); } break; case 51: #line 582 "cs-parser.jay" { Report.Error (116, ((MemberCore) yyVals[0+yyTop]).Location, "A namespace can only contain types and namespace declarations"); } break; case 57: #line 608 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { Attributes attrs = (Attributes)yyVals[0+yyTop]; if (global_attrs_enabled) { CodeGen.Assembly.AddAttributes (attrs.Attrs); } else { foreach (Attribute a in attrs.Attrs) { Report.Error (1730, a.Location, "Assembly and module attributes must precede all other elements except using clauses and extern alias declarations"); } } } yyVal = yyVals[0+yyTop]; } break; case 58: #line 625 "cs-parser.jay" { global_attrs_enabled = false; yyVal = null; } break; case 59: #line 630 "cs-parser.jay" { global_attrs_enabled = false; yyVal = yyVals[0+yyTop]; } break; case 60: #line 639 "cs-parser.jay" { if (current_attr_target != String.Empty) { ArrayList sect = (ArrayList) yyVals[0+yyTop]; if (global_attrs_enabled) { if (current_attr_target == "module") { CodeGen.Module.AddAttributes (sect); yyVal = null; } else if (current_attr_target != null && current_attr_target.Length > 0) { CodeGen.Assembly.AddAttributes (sect); yyVal = null; } else { yyVal = new Attributes (sect); } if (yyVal == null) { if (RootContext.Documentation != null) { Lexer.check_incorrect_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } } } else { yyVal = new Attributes (sect); } } else yyVal = null; current_attr_target = null; } break; case 61: #line 669 "cs-parser.jay" { if (current_attr_target != String.Empty) { Attributes attrs = yyVals[-1+yyTop] as Attributes; ArrayList sect = (ArrayList) yyVals[0+yyTop]; if (global_attrs_enabled) { if (current_attr_target == "module") { CodeGen.Module.AddAttributes (sect); yyVal = null; } else if (current_attr_target == "assembly") { CodeGen.Assembly.AddAttributes (sect); yyVal = null; } else { if (attrs == null) attrs = new Attributes (sect); else attrs.AddAttributes (sect); } } else { if (attrs == null) attrs = new Attributes (sect); else attrs.AddAttributes (sect); } yyVal = attrs; } else yyVal = null; current_attr_target = null; } break; case 62: #line 703 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; } break; case 63: #line 707 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; } break; case 64: #line 714 "cs-parser.jay" { current_attr_target = (string)yyVals[-1+yyTop]; yyVal = yyVals[-1+yyTop]; } break; case 65: #line 722 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = CheckAttributeTarget (lt.Value, lt.Location); } break; case 66: #line 726 "cs-parser.jay" { yyVal = "event"; } break; case 67: #line 727 "cs-parser.jay" { yyVal = "return"; } break; case 68: #line 729 "cs-parser.jay" { string name = GetTokenName (yyToken); yyVal = CheckAttributeTarget (name, GetLocation (yyVals[0+yyTop])); } break; case 69: #line 737 "cs-parser.jay" { ArrayList attrs = new ArrayList (4); attrs.Add (yyVals[0+yyTop]); yyVal = attrs; } break; case 70: #line 745 "cs-parser.jay" { ArrayList attrs = (ArrayList) yyVals[-2+yyTop]; attrs.Add (yyVals[0+yyTop]); yyVal = attrs; } break; case 71: #line 755 "cs-parser.jay" { ++lexer.parsing_block; } break; case 72: #line 759 "cs-parser.jay" { --lexer.parsing_block; MemberName mname = (MemberName) yyVals[-2+yyTop]; if (mname.IsGeneric) { Report.Error (404, lexer.Location, "'<' unexpected: attributes cannot be generic"); } object [] arguments = (object []) yyVals[0+yyTop]; MemberName left = mname.Left; string identifier = mname.Name; Expression left_expr = left == null ? null : left.GetTypeExpression (); if (current_attr_target == String.Empty) yyVal = null; else if (global_attrs_enabled && (current_attr_target == "assembly" || current_attr_target == "module")) /* FIXME: supply "nameEscaped" parameter here.*/ yyVal = new GlobalAttribute (current_namespace, current_attr_target, left_expr, identifier, arguments, mname.Location, lexer.IsEscapedIdentifier (mname.Location)); else yyVal = new Attribute (current_attr_target, left_expr, identifier, arguments, mname.Location, lexer.IsEscapedIdentifier (mname.Location)); } break; case 73: #line 785 "cs-parser.jay" { /* reserved attribute name or identifier: 17.4 */ } break; case 74: #line 789 "cs-parser.jay" { yyVal = null; } break; case 75: #line 791 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 76: #line 799 "cs-parser.jay" { if (yyVals[0+yyTop] == null) yyVal = null; else { yyVal = new object [] { yyVals[0+yyTop], null }; } } break; case 77: #line 807 "cs-parser.jay" { yyVal = new object[] { yyVals[-2+yyTop], yyVals[0+yyTop] }; } break; case 78: #line 811 "cs-parser.jay" { yyVal = new object [] { null, yyVals[0+yyTop] }; } break; case 79: #line 818 "cs-parser.jay" { yyVal = null; } break; case 81: #line 824 "cs-parser.jay" { ArrayList args = new ArrayList (4); args.Add (new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression)); yyVal = args; } break; case 82: #line 831 "cs-parser.jay" { ArrayList args = (ArrayList) yyVals[-2+yyTop]; args.Add (new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression)); yyVal = args; } break; case 83: #line 841 "cs-parser.jay" { ArrayList args = new ArrayList (4); args.Add (yyVals[0+yyTop]); yyVal = args; } break; case 84: #line 848 "cs-parser.jay" { ArrayList args = (ArrayList) yyVals[-2+yyTop]; args.Add (yyVals[0+yyTop]); yyVal = args; } break; case 85: #line 855 "cs-parser.jay" { Report.Error (1016, ((Expression) yyVals[0+yyTop]).Location, "Named attribute argument expected"); yyVal = null; } break; case 86: #line 863 "cs-parser.jay" { /* FIXME: keep location*/ yyVal = new DictionaryEntry ( ((LocatedToken) yyVals[-2+yyTop]).Value, new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression)); } break; case 102: #line 899 "cs-parser.jay" { Report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", GetSymbolName (yyToken)); yyVal = null; lexer.parsing_generic_declaration = false; } break; case 103: #line 912 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 104: #line 916 "cs-parser.jay" { MemberName name = MakeName ((MemberName) yyVals[0+yyTop]); push_current_class (new Struct (current_namespace, current_class, name, (int) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); } break; case 105: #line 922 "cs-parser.jay" { lexer.ConstraintsParsing = false; current_class.SetParameterInfo ((ArrayList) yyVals[0+yyTop]); if (RootContext.Documentation != null) current_container.DocComment = Lexer.consume_doc_comment (); } break; case 106: #line 931 "cs-parser.jay" { --lexer.parsing_declaration; if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 107: #line 937 "cs-parser.jay" { yyVal = pop_current_class (); } break; case 108: #line 940 "cs-parser.jay" { CheckIdentifierToken (yyToken, GetLocation (yyVals[0+yyTop])); } break; case 109: #line 947 "cs-parser.jay" { if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 125: #line 989 "cs-parser.jay" { int modflags = (int) yyVals[-4+yyTop]; foreach (VariableDeclaration constant in (ArrayList) yyVals[-1+yyTop]){ Location l = constant.Location; if ((modflags & Modifiers.STATIC) != 0) { Report.Error (504, l, "The constant `{0}' cannot be marked static", current_container.GetSignatureForError () + '.' + (string) constant.identifier); continue; } Const c = new Const ( current_class, (FullNamedExpression) yyVals[-2+yyTop], (string) constant.identifier, (Expression) constant.expression_or_array_initializer, modflags, (Attributes) yyVals[-5+yyTop], l); if (RootContext.Documentation != null) { c.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } current_container.AddConstant (c); } } break; case 126: #line 1014 "cs-parser.jay" { ArrayList constants = new ArrayList (4); if (yyVals[0+yyTop] != null) constants.Add (yyVals[0+yyTop]); yyVal = constants; } break; case 127: #line 1021 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { ArrayList constants = (ArrayList) yyVals[-2+yyTop]; constants.Add (yyVals[0+yyTop]); } } break; case 128: #line 1031 "cs-parser.jay" { ++lexer.parsing_block; } break; case 129: #line 1035 "cs-parser.jay" { --lexer.parsing_block; yyVal = new VariableDeclaration ((LocatedToken) yyVals[-3+yyTop], yyVals[0+yyTop]); } break; case 130: #line 1040 "cs-parser.jay" { /* A const field requires a value to be provided*/ Report.Error (145, ((LocatedToken) yyVals[0+yyTop]).Location, "A const field requires a value to be provided"); yyVal = null; } break; case 133: #line 1058 "cs-parser.jay" { FullNamedExpression type = (FullNamedExpression) yyVals[-2+yyTop]; if (type == TypeManager.system_void_expr) Report.Error (670, GetLocation (yyVals[-2+yyTop]), "Fields cannot have void type"); int mod = (int) yyVals[-3+yyTop]; current_array_type = null; foreach (VariableMemberDeclaration var in (ArrayList) yyVals[-1+yyTop]){ Field field = new Field (current_class, type, mod, var.MemberName, (Attributes) yyVals[-4+yyTop]); field.Initializer = var.expression_or_array_initializer; if (RootContext.Documentation != null) { field.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } current_container.AddField (field); yyVal = field; /* FIXME: might be better if it points to the top item*/ } } break; case 134: #line 1086 "cs-parser.jay" { FullNamedExpression type = (FullNamedExpression) yyVals[-2+yyTop]; int mod = (int) yyVals[-4+yyTop]; current_array_type = null; foreach (VariableDeclaration var in (ArrayList) yyVals[-1+yyTop]) { FixedField field = new FixedField (current_class, type, mod, var.identifier, (Expression)var.expression_or_array_initializer, (Attributes) yyVals[-5+yyTop], var.Location); if (RootContext.Documentation != null) { field.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } current_container.AddField (field); yyVal = field; /* FIXME: might be better if it points to the top item*/ } } break; case 135: #line 1110 "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"); } break; case 136: #line 1117 "cs-parser.jay" { ArrayList decl = new ArrayList (2); decl.Add (yyVals[0+yyTop]); yyVal = decl; } break; case 137: #line 1123 "cs-parser.jay" { ArrayList decls = (ArrayList) yyVals[-2+yyTop]; decls.Add (yyVals[0+yyTop]); yyVal = yyVals[-2+yyTop]; } break; case 138: #line 1132 "cs-parser.jay" { yyVal = new VariableDeclaration ((LocatedToken) yyVals[-3+yyTop], yyVals[-1+yyTop]); } break; case 139: #line 1136 "cs-parser.jay" { Report.Error (443, lexer.Location, "Value or constant expected"); yyVal = new VariableDeclaration ((LocatedToken) yyVals[-2+yyTop], null); } break; case 140: #line 1145 "cs-parser.jay" { ArrayList decl = new ArrayList (4); if (yyVals[0+yyTop] != null) decl.Add (yyVals[0+yyTop]); yyVal = decl; } break; case 141: #line 1152 "cs-parser.jay" { ArrayList decls = (ArrayList) yyVals[-2+yyTop]; decls.Add (yyVals[0+yyTop]); yyVal = yyVals[-2+yyTop]; } break; case 142: #line 1161 "cs-parser.jay" { yyVal = new VariableDeclaration ((LocatedToken) yyVals[-2+yyTop], yyVals[0+yyTop]); } break; case 143: #line 1165 "cs-parser.jay" { yyVal = new VariableDeclaration ((LocatedToken) yyVals[0+yyTop], null); } break; case 144: #line 1169 "cs-parser.jay" { yyVal = null; } break; case 147: #line 1178 "cs-parser.jay" { yyVal = new StackAlloc ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], (Location) yyVals[-4+yyTop]); } break; case 148: #line 1182 "cs-parser.jay" { yyVal = new ArglistAccess ((Location) yyVals[0+yyTop]); } break; case 149: #line 1186 "cs-parser.jay" { Report.Error (1575, (Location) yyVals[-1+yyTop], "A stackalloc expression requires [] after type"); yyVal = new StackAlloc ((Expression) yyVals[0+yyTop], null, (Location) yyVals[-1+yyTop]); } break; case 150: #line 1194 "cs-parser.jay" { ArrayList decl = new ArrayList (4); if (yyVals[0+yyTop] != null) decl.Add (yyVals[0+yyTop]); yyVal = decl; } break; case 151: #line 1201 "cs-parser.jay" { ArrayList decls = (ArrayList) yyVals[-2+yyTop]; decls.Add (yyVals[0+yyTop]); yyVal = yyVals[-2+yyTop]; } break; case 152: #line 1210 "cs-parser.jay" { ++lexer.parsing_block; lexer.parsing_generic_declaration = false; } break; case 153: #line 1215 "cs-parser.jay" { --lexer.parsing_block; yyVal = new VariableMemberDeclaration ((MemberName) yyVals[-3+yyTop], yyVals[0+yyTop]); } break; case 154: #line 1220 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new VariableMemberDeclaration ((MemberName) yyVals[0+yyTop], null); } break; case 155: #line 1225 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = null; } break; case 156: #line 1233 "cs-parser.jay" { Report.Error (650, GetLocation (yyVals[-2+yyTop]), "Syntax error, bad array declarator. To declare a managed array the rank specifier precedes the variable's identifier. " + "To declare a fixed size buffer field, use the fixed keyword before the field type"); } break; case 159: #line 1245 "cs-parser.jay" { if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.NotAllowed; } break; case 160: #line 1250 "cs-parser.jay" { Method method = (Method) yyVals[-2+yyTop]; method.Block = (ToplevelBlock) yyVals[0+yyTop]; current_container.AddMethod (method); if (current_container.Kind == Kind.Interface && method.Block != null) { Report.Error (531, method.Location, "`{0}': interface members cannot have a definition", method.GetSignatureForError ()); } current_generic_method = null; current_local_parameters = null; if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 161: #line 1272 "cs-parser.jay" { arglist_allowed = true; } break; case 162: #line 1276 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 163: #line 1280 "cs-parser.jay" { lexer.ConstraintsParsing = false; arglist_allowed = false; MemberName name = (MemberName) yyVals[-6+yyTop]; current_local_parameters = (Parameters) yyVals[-3+yyTop]; if (yyVals[0+yyTop] != null && name.TypeArguments == null) Report.Error (80, lexer.Location, "Constraints are not allowed on non-generic declarations"); Method method; GenericMethod generic = null; if (name.TypeArguments != null) { generic = new GenericMethod (current_namespace, current_class, name, (FullNamedExpression) yyVals[-7+yyTop], current_local_parameters); generic.SetParameterInfo ((ArrayList) yyVals[0+yyTop]); } method = new Method (current_class, generic, (FullNamedExpression) yyVals[-7+yyTop], (int) yyVals[-8+yyTop], name, current_local_parameters, (Attributes) yyVals[-9+yyTop]); current_generic_method = generic; if (RootContext.Documentation != null) method.DocComment = Lexer.consume_doc_comment (); yyVal = method; } break; case 164: #line 1315 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 165: #line 1319 "cs-parser.jay" { lexer.ConstraintsParsing = false; MemberName name = (MemberName) yyVals[-5+yyTop]; current_local_parameters = (Parameters) yyVals[-3+yyTop]; if (yyVals[-1+yyTop] != null && name.TypeArguments == null) Report.Error (80, lexer.Location, "Constraints are not allowed on non-generic declarations"); Method method; GenericMethod generic = null; if (name.TypeArguments != null) { generic = new GenericMethod (current_namespace, current_class, name, TypeManager.system_void_expr, current_local_parameters); generic.SetParameterInfo ((ArrayList) yyVals[0+yyTop]); } int modifiers = (int) yyVals[-8+yyTop]; const int invalid_partial_mod = Modifiers.Accessibility | Modifiers.ABSTRACT | Modifiers.EXTERN | Modifiers.NEW | Modifiers.OVERRIDE | Modifiers.SEALED | Modifiers.VIRTUAL; if ((modifiers & invalid_partial_mod) != 0) { Report.Error (750, name.Location, "A partial method cannot define access modifier or " + "any of abstract, extern, new, override, sealed, or virtual modifiers"); modifiers &= ~invalid_partial_mod; } if ((current_class.ModFlags & Modifiers.PARTIAL) == 0) { Report.Error (751, name.Location, "A partial method must be declared within a " + "partial class or partial struct"); } modifiers |= Modifiers.PARTIAL | Modifiers.PRIVATE; method = new Method (current_class, generic, TypeManager.system_void_expr, modifiers, name, current_local_parameters, (Attributes) yyVals[-9+yyTop]); current_generic_method = generic; if (RootContext.Documentation != null) method.DocComment = Lexer.consume_doc_comment (); yyVal = method; } break; case 166: #line 1371 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-3+yyTop]; Report.Error (1585, name.Location, "Member modifier `{0}' must precede the member type and name", Modifiers.Name ((int) yyVals[-4+yyTop])); Method method = new Method (current_class, null, TypeManager.system_void_expr, 0, name, (Parameters) yyVals[-1+yyTop], (Attributes) yyVals[-7+yyTop]); current_local_parameters = (Parameters) yyVals[-1+yyTop]; if (RootContext.Documentation != null) method.DocComment = Lexer.consume_doc_comment (); yyVal = null; } break; case 168: #line 1390 "cs-parser.jay" { yyVal = null; } break; case 169: #line 1394 "cs-parser.jay" { yyVal = Parameters.EmptyReadOnlyParameters; } break; case 171: #line 1399 "cs-parser.jay" { yyVal = Parameters.EmptyReadOnlyParameters; } break; case 172: #line 1401 "cs-parser.jay" { parameter_modifiers_not_allowed = true; } break; case 173: #line 1405 "cs-parser.jay" { parameter_modifiers_not_allowed = false; yyVal = yyVals[0+yyTop]; } break; case 174: #line 1413 "cs-parser.jay" { ArrayList pars_list = (ArrayList) yyVals[0+yyTop]; Parameter [] pars = new Parameter [pars_list.Count]; pars_list.CopyTo (pars); yyVal = new Parameters (pars); } break; case 175: #line 1422 "cs-parser.jay" { ArrayList pars_list = (ArrayList) yyVals[-2+yyTop]; pars_list.Add (yyVals[0+yyTop]); Parameter [] pars = new Parameter [pars_list.Count]; pars_list.CopyTo (pars); yyVal = new Parameters (pars); } break; case 176: #line 1432 "cs-parser.jay" { ArrayList pars_list = (ArrayList) yyVals[-2+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[0+yyTop]))); Parameter [] pars = new Parameter [pars_list.Count]; pars_list.CopyTo (pars); yyVal = new Parameters (pars, true); } break; case 177: #line 1442 "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"); yyVal = null; } break; case 178: #line 1448 "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"); yyVal = null; } break; case 179: #line 1454 "cs-parser.jay" { Report.Error (257, (Location) yyVals[-2+yyTop], "An __arglist parameter must be the last parameter in a formal parameter list"); yyVal = null; } break; case 180: #line 1459 "cs-parser.jay" { Report.Error (257, (Location) yyVals[-2+yyTop], "An __arglist parameter must be the last parameter in a formal parameter list"); yyVal = null; } break; case 181: #line 1464 "cs-parser.jay" { yyVal = new Parameters (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; case 182: #line 1468 "cs-parser.jay" { yyVal = new Parameters (new Parameter [] { new ArglistParameter ((Location) yyVals[0+yyTop]) }, true); } break; case 183: #line 1475 "cs-parser.jay" { ArrayList pars = new ArrayList (4); pars.Add (yyVals[0+yyTop]); yyVal = pars; } break; case 184: #line 1482 "cs-parser.jay" { ArrayList pars = (ArrayList) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; if (p != null) { if (p.HasExtensionMethodModifier) Report.Error (1100, p.Location, "The parameter modifier `this' can only be used on the first parameter"); pars.Add (p); } yyVal = yyVals[-2+yyTop]; } break; case 185: #line 1499 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], lt.Location); } break; case 186: #line 1507 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; Report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name"); yyVal = null; } break; case 187: #line 1515 "cs-parser.jay" { Report.Error (1001, GetLocation (yyVals[0+yyTop]), "Identifier expected"); yyVal = new Parameter ((FullNamedExpression) yyVals[0+yyTop], "NeedSomeGeneratorHere", (Parameter.Modifier) yyVals[-1+yyTop], (Attributes) yyVals[-2+yyTop], lexer.Location); } break; case 188: #line 1522 "cs-parser.jay" { CheckIdentifierToken (yyToken, GetLocation (yyVals[0+yyTop])); yyVal = null; } break; case 189: #line 1532 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; Report.Error (241, lt.Location, "Default parameter specifiers are not permitted"); yyVal = null; } break; case 190: #line 1540 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; case 192: #line 1546 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 193: #line 1550 "cs-parser.jay" { Parameter.Modifier p2 = (Parameter.Modifier)yyVals[0+yyTop]; Parameter.Modifier mod = (Parameter.Modifier)yyVals[-1+yyTop] | p2; if (((Parameter.Modifier)yyVals[-1+yyTop] & p2) == p2) { Error_DuplicateParameterModifier (lexer.Location, p2); } else { switch (mod & ~Parameter.Modifier.This) { case Parameter.Modifier.REF: Report.Error (1101, lexer.Location, "The parameter modifiers `this' and `ref' cannot be used altogether"); break; case Parameter.Modifier.OUT: Report.Error (1102, lexer.Location, "The parameter modifiers `this' and `out' cannot be used altogether"); break; default: Report.Error (1108, lexer.Location, "A parameter cannot have specified more than one modifier"); break; } } yyVal = mod; } break; case 194: #line 1574 "cs-parser.jay" { if (parameter_modifiers_not_allowed) Error_ParameterModifierNotValid ("ref", (Location)yyVals[0+yyTop]); yyVal = Parameter.Modifier.REF; } break; case 195: #line 1581 "cs-parser.jay" { if (parameter_modifiers_not_allowed) Error_ParameterModifierNotValid ("out", (Location)yyVals[0+yyTop]); yyVal = Parameter.Modifier.OUT; } break; case 196: #line 1588 "cs-parser.jay" { if (parameter_modifiers_not_allowed) Error_ParameterModifierNotValid ("this", (Location)yyVals[0+yyTop]); if (RootContext.Version <= LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "extension methods"); yyVal = Parameter.Modifier.This; } break; case 197: #line 1601 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Attributes) yyVals[-3+yyTop], lt.Location); } break; case 198: #line 1605 "cs-parser.jay" { CheckIdentifierToken (yyToken, GetLocation (yyVals[0+yyTop])); yyVal = null; } break; case 199: #line 1613 "cs-parser.jay" { if (params_modifiers_not_allowed) Report.Error (1670, ((Location) yyVals[0+yyTop]), "The `params' modifier is not allowed in current context"); } break; case 200: #line 1618 "cs-parser.jay" { Parameter.Modifier mod = (Parameter.Modifier)yyVals[0+yyTop]; if ((mod & Parameter.Modifier.This) != 0) { Report.Error (1104, (Location)yyVals[-1+yyTop], "The parameter modifiers `this' and `params' cannot be used altogether"); } else { Report.Error (1611, (Location)yyVals[-1+yyTop], "The params parameter cannot be declared as ref or out"); } } break; case 201: #line 1627 "cs-parser.jay" { Error_DuplicateParameterModifier ((Location)yyVals[-1+yyTop], Parameter.Modifier.PARAMS); } break; case 202: #line 1634 "cs-parser.jay" { if (!arglist_allowed) Report.Error (1669, (Location) yyVals[0+yyTop], "__arglist is not valid in this context"); } break; case 203: #line 1645 "cs-parser.jay" { if (RootContext.Documentation != null) tmpComment = Lexer.consume_doc_comment (); } break; case 204: #line 1650 "cs-parser.jay" { implicit_value_parameter_type = (FullNamedExpression) yyVals[-3+yyTop]; lexer.PropertyParsing = true; } break; case 205: #line 1655 "cs-parser.jay" { lexer.PropertyParsing = false; has_get = has_set = false; } break; case 206: #line 1660 "cs-parser.jay" { Property prop; Accessors accessors = (Accessors) yyVals[-2+yyTop]; Accessor get_block = accessors != null ? accessors.get_or_add : null; Accessor set_block = accessors != null ? accessors.set_or_remove : null; bool order = accessors != null ? accessors.declared_in_reverse : false; MemberName name = (MemberName) yyVals[-6+yyTop]; FullNamedExpression ptype = (FullNamedExpression) yyVals[-7+yyTop]; prop = new Property (current_class, ptype, (int) yyVals[-8+yyTop], name, (Attributes) yyVals[-9+yyTop], get_block, set_block, order, current_block); if (ptype == TypeManager.system_void_expr) Report.Error (547, name.Location, "`{0}': property or indexer cannot have void type", prop.GetSignatureForError ()); if (accessors == null) Report.Error (548, prop.Location, "`{0}': property or indexer must have at least one accessor", prop.GetSignatureForError ()); if (current_container.Kind == Kind.Interface) { if (prop.Get.Block != null) Report.Error (531, prop.Location, "`{0}.get': interface members cannot have a definition", prop.GetSignatureForError ()); if (prop.Set.Block != null) Report.Error (531, prop.Location, "`{0}.set': interface members cannot have a definition", prop.GetSignatureForError ()); } current_container.AddProperty (prop); implicit_value_parameter_type = null; if (RootContext.Documentation != null) prop.DocComment = ConsumeStoredComment (); } break; case 207: #line 1698 "cs-parser.jay" { yyVal = new Accessors ((Accessor) yyVals[0+yyTop], null); } break; case 208: #line 1702 "cs-parser.jay" { Accessors accessors = (Accessors) yyVals[0+yyTop]; accessors.get_or_add = (Accessor) yyVals[-1+yyTop]; yyVal = accessors; } break; case 209: #line 1708 "cs-parser.jay" { yyVal = new Accessors (null, (Accessor) yyVals[0+yyTop]); } break; case 210: #line 1712 "cs-parser.jay" { Accessors accessors = (Accessors) yyVals[0+yyTop]; accessors.set_or_remove = (Accessor) yyVals[-1+yyTop]; accessors.declared_in_reverse = true; yyVal = accessors; } break; case 211: #line 1719 "cs-parser.jay" { if (yyToken == Token.CLOSE_BRACE) { yyVal = null; } else { if (yyToken == Token.SEMICOLON) Report.Error (1597, lexer.Location, "Semicolon after method or accessor block is not valid"); else Report.Error (1014, GetLocation (yyVals[0+yyTop]), "A get or set accessor expected"); yyVal = new Accessors (null, null); } } break; case 212: #line 1735 "cs-parser.jay" { /* If this is not the case, then current_local_parameters has already*/ /* been set in indexer_declaration*/ if (parsing_indexer == false) current_local_parameters = Parameters.EmptyReadOnlyParameters; else current_local_parameters = indexer_parameters; lexer.PropertyParsing = false; } break; case 213: #line 1745 "cs-parser.jay" { if (has_get) { Report.Error (1007, GetLocation (yyVals[-2+yyTop]), "Property accessor already defined"); break; } Accessor accessor = new Accessor ((ToplevelBlock) yyVals[0+yyTop], (int) yyVals[-3+yyTop], (Attributes) yyVals[-4+yyTop], current_local_parameters, (Location) yyVals[-2+yyTop]); has_get = true; current_local_parameters = null; lexer.PropertyParsing = true; if (RootContext.Documentation != null) if (Lexer.doc_state == XmlCommentState.Error) Lexer.doc_state = XmlCommentState.NotAllowed; yyVal = accessor; } break; case 214: #line 1765 "cs-parser.jay" { Parameter implicit_value_parameter = new Parameter ( implicit_value_parameter_type, "value", Parameter.Modifier.NONE, null, (Location) yyVals[0+yyTop]); if (!parsing_indexer) { current_local_parameters = new Parameters (new Parameter [] { implicit_value_parameter }); } else { current_local_parameters = Parameters.MergeGenerated ( indexer_parameters, true, implicit_value_parameter, null); } lexer.PropertyParsing = false; } break; case 215: #line 1780 "cs-parser.jay" { if (has_set) { Report.Error (1007, GetLocation (yyVals[-2+yyTop]), "Property accessor already defined"); break; } Accessor accessor = new Accessor ((ToplevelBlock) yyVals[0+yyTop], (int) yyVals[-3+yyTop], (Attributes) yyVals[-4+yyTop], current_local_parameters, (Location) yyVals[-2+yyTop]); has_set = true; current_local_parameters = null; lexer.PropertyParsing = true; if (RootContext.Documentation != null && Lexer.doc_state == XmlCommentState.Error) Lexer.doc_state = XmlCommentState.NotAllowed; yyVal = accessor; } break; case 217: #line 1801 "cs-parser.jay" { yyVal = null; } break; case 218: #line 1805 "cs-parser.jay" { Error_SyntaxError (1043, yyToken); yyVal = null; } break; case 219: #line 1816 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 220: #line 1820 "cs-parser.jay" { MemberName name = MakeName ((MemberName) yyVals[0+yyTop]); push_current_class (new Interface (current_namespace, current_class, name, (int) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); } break; case 221: #line 1826 "cs-parser.jay" { lexer.ConstraintsParsing = false; current_class.SetParameterInfo ((ArrayList) yyVals[0+yyTop]); if (RootContext.Documentation != null) { current_container.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } } break; case 222: #line 1837 "cs-parser.jay" { --lexer.parsing_declaration; if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 223: #line 1843 "cs-parser.jay" { yyVal = pop_current_class (); } break; case 224: #line 1846 "cs-parser.jay" { CheckIdentifierToken (yyToken, GetLocation (yyVals[0+yyTop])); } break; case 230: #line 1869 "cs-parser.jay" { Report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 231: #line 1873 "cs-parser.jay" { Report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 236: #line 1881 "cs-parser.jay" { Report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; case 237: #line 1885 "cs-parser.jay" { Report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; case 238: #line 1889 "cs-parser.jay" { Report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; case 239: #line 1896 "cs-parser.jay" { } break; case 240: #line 1899 "cs-parser.jay" { if (yyVals[-2+yyTop] == null) break; OperatorDeclaration decl = (OperatorDeclaration) yyVals[-2+yyTop]; Operator op = new Operator ( current_class, decl.optype, decl.ret_type, (int) yyVals[-3+yyTop], current_local_parameters, (ToplevelBlock) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop], decl.location); if (RootContext.Documentation != null) { op.DocComment = tmpComment; Lexer.doc_state = XmlCommentState.Allowed; } /* Note again, checking is done in semantic analysis*/ current_container.AddOperator (op); current_local_parameters = null; } break; case 242: #line 1923 "cs-parser.jay" { yyVal = null; } break; case 244: #line 1929 "cs-parser.jay" { Report.Error (590, lexer.Location, "User-defined operators cannot return void"); yyVal = TypeManager.system_void_expr; } break; case 245: #line 1937 "cs-parser.jay" { params_modifiers_not_allowed = true; } break; case 246: #line 1941 "cs-parser.jay" { params_modifiers_not_allowed = false; Location loc = (Location) yyVals[-5+yyTop]; Operator.OpType op = (Operator.OpType) yyVals[-4+yyTop]; current_local_parameters = (Parameters)yyVals[-1+yyTop]; int p_count = current_local_parameters.Count; if (p_count == 1) { if (op == Operator.OpType.Addition) op = Operator.OpType.UnaryPlus; else if (op == Operator.OpType.Subtraction) op = Operator.OpType.UnaryNegation; } if (IsUnaryOperator (op)) { if (p_count == 2) { Report.Error (1020, loc, "Overloadable binary operator expected"); } else if (p_count != 1) { Report.Error (1535, loc, "Overloaded unary operator `{0}' takes one parameter", Operator.GetName (op)); } } else { if (p_count > 2) { Report.Error (1534, loc, "Overloaded binary operator `{0}' takes two parameters", Operator.GetName (op)); } else if (p_count != 2) { Report.Error (1019, loc, "Overloadable unary operator expected"); } } if (RootContext.Documentation != null) { tmpComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.NotAllowed; } yyVal = new OperatorDeclaration (op, (FullNamedExpression) yyVals[-6+yyTop], loc); } break; case 248: #line 1984 "cs-parser.jay" { yyVal = Operator.OpType.LogicalNot; } break; case 249: #line 1985 "cs-parser.jay" { yyVal = Operator.OpType.OnesComplement; } break; case 250: #line 1986 "cs-parser.jay" { yyVal = Operator.OpType.Increment; } break; case 251: #line 1987 "cs-parser.jay" { yyVal = Operator.OpType.Decrement; } break; case 252: #line 1988 "cs-parser.jay" { yyVal = Operator.OpType.True; } break; case 253: #line 1989 "cs-parser.jay" { yyVal = Operator.OpType.False; } break; case 254: #line 1991 "cs-parser.jay" { yyVal = Operator.OpType.Addition; } break; case 255: #line 1992 "cs-parser.jay" { yyVal = Operator.OpType.Subtraction; } break; case 256: #line 1994 "cs-parser.jay" { yyVal = Operator.OpType.Multiply; } break; case 257: #line 1995 "cs-parser.jay" { yyVal = Operator.OpType.Division; } break; case 258: #line 1996 "cs-parser.jay" { yyVal = Operator.OpType.Modulus; } break; case 259: #line 1997 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseAnd; } break; case 260: #line 1998 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseOr; } break; case 261: #line 1999 "cs-parser.jay" { yyVal = Operator.OpType.ExclusiveOr; } break; case 262: #line 2000 "cs-parser.jay" { yyVal = Operator.OpType.LeftShift; } break; case 263: #line 2001 "cs-parser.jay" { yyVal = Operator.OpType.RightShift; } break; case 264: #line 2002 "cs-parser.jay" { yyVal = Operator.OpType.Equality; } break; case 265: #line 2003 "cs-parser.jay" { yyVal = Operator.OpType.Inequality; } break; case 266: #line 2004 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThan; } break; case 267: #line 2005 "cs-parser.jay" { yyVal = Operator.OpType.LessThan; } break; case 268: #line 2006 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThanOrEqual; } break; case 269: #line 2007 "cs-parser.jay" { yyVal = Operator.OpType.LessThanOrEqual; } break; case 270: #line 2012 "cs-parser.jay" { params_modifiers_not_allowed = true; } break; case 271: #line 2016 "cs-parser.jay" { params_modifiers_not_allowed = false; Location loc = (Location) yyVals[-5+yyTop]; current_local_parameters = (Parameters)yyVals[-1+yyTop]; if (RootContext.Documentation != null) { tmpComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.NotAllowed; } yyVal = new OperatorDeclaration (Operator.OpType.Implicit, (FullNamedExpression) yyVals[-4+yyTop], loc); } break; case 272: #line 2030 "cs-parser.jay" { params_modifiers_not_allowed = true; } break; case 273: #line 2034 "cs-parser.jay" { params_modifiers_not_allowed = false; Location loc = (Location) yyVals[-5+yyTop]; current_local_parameters = (Parameters)yyVals[-1+yyTop]; if (RootContext.Documentation != null) { tmpComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.NotAllowed; } yyVal = new OperatorDeclaration (Operator.OpType.Explicit, (FullNamedExpression) yyVals[-4+yyTop], loc); } break; case 274: #line 2048 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new OperatorDeclaration (Operator.OpType.Implicit, null, GetLocation (yyVals[-1+yyTop])); } break; case 275: #line 2053 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new OperatorDeclaration (Operator.OpType.Explicit, null, GetLocation (yyVals[-1+yyTop])); } break; case 276: #line 2062 "cs-parser.jay" { Constructor c = (Constructor) yyVals[-1+yyTop]; c.Block = (ToplevelBlock) yyVals[0+yyTop]; if (RootContext.Documentation != null) c.DocComment = ConsumeStoredComment (); current_container.AddConstructor (c); current_local_parameters = null; if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 277: #line 2081 "cs-parser.jay" { if (RootContext.Documentation != null) { tmpComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } } break; case 278: #line 2088 "cs-parser.jay" { current_local_parameters = (Parameters) yyVals[-1+yyTop]; /**/ /* start block here, so possible anonymous methods inside*/ /* constructor initializer can get correct parent block*/ /**/ start_block (lexer.Location); } break; case 279: #line 2098 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-6+yyTop]; int mods = (int) yyVals[-7+yyTop]; ConstructorInitializer ci = (ConstructorInitializer) yyVals[0+yyTop]; Constructor c = new Constructor (current_class, lt.Value, mods, (Attributes) yyVals[-8+yyTop], current_local_parameters, ci, lt.Location); if (lt.Value != current_container.MemberName.Name) { Report.Error (1520, c.Location, "Class, struct, or interface method must have a return type"); } else if ((mods & Modifiers.STATIC) != 0) { if ((mods & Modifiers.Accessibility) != 0){ Report.Error (515, c.Location, "`{0}': static constructor cannot have an access modifier", c.GetSignatureForError ()); } if (ci != null) { Report.Error (514, c.Location, "`{0}': static constructor cannot have an explicit `this' or `base' constructor call", c.GetSignatureForError ()); } } yyVal = c; } break; case 281: #line 2128 "cs-parser.jay" { current_block = null; yyVal = null; } break; case 284: #line 2138 "cs-parser.jay" { ++lexer.parsing_block; } break; case 285: #line 2142 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorBaseInitializer ((ArrayList) yyVals[-1+yyTop], (Location) yyVals[-4+yyTop]); } break; case 286: #line 2147 "cs-parser.jay" { ++lexer.parsing_block; } break; case 287: #line 2151 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstructorThisInitializer ((ArrayList) yyVals[-1+yyTop], (Location) yyVals[-4+yyTop]); } break; case 288: #line 2155 "cs-parser.jay" { Report.Error (1018, (Location) yyVals[-1+yyTop], "Keyword this or base expected"); yyVal = null; } break; case 289: #line 2163 "cs-parser.jay" { if (RootContext.Documentation != null) { tmpComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.NotAllowed; } current_local_parameters = Parameters.EmptyReadOnlyParameters; } break; case 290: #line 2172 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-3+yyTop]; if (lt.Value != current_container.MemberName.Name){ Report.Error (574, lt.Location, "Name of destructor must match name of class"); } else if (current_container.Kind != Kind.Class){ Report.Error (575, lt.Location, "Only class types can contain destructor"); } else { Destructor d = new Destructor (current_class, (int) yyVals[-6+yyTop], Parameters.EmptyReadOnlyParameters, (Attributes) yyVals[-7+yyTop], lt.Location); if (RootContext.Documentation != null) d.DocComment = ConsumeStoredComment (); d.Block = (ToplevelBlock) yyVals[0+yyTop]; current_container.AddMethod (d); } current_local_parameters = null; } break; case 291: #line 2196 "cs-parser.jay" { current_array_type = null; foreach (VariableMemberDeclaration var in (ArrayList) yyVals[-1+yyTop]) { EventField e = new EventField ( current_class, (FullNamedExpression) yyVals[-2+yyTop], (int) yyVals[-4+yyTop], var.MemberName, (Attributes) yyVals[-5+yyTop]); if (var.expression_or_array_initializer != null) { if (current_container.Kind == Kind.Interface) { Report.Error (68, e.Location, "`{0}': event in interface cannot have initializer", e.GetSignatureForError ()); } e.Initializer = var.expression_or_array_initializer; } if (var.MemberName.Left != null) { Report.Error (71, e.Location, "`{0}': An explicit interface implementation of an event must use property syntax", e.GetSignatureForError ()); } current_container.AddEvent (e); if (RootContext.Documentation != null) { e.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } } } break; case 292: #line 2229 "cs-parser.jay" { implicit_value_parameter_type = (FullNamedExpression) yyVals[-2+yyTop]; current_local_parameters = new Parameters ( new Parameter (implicit_value_parameter_type, "value", Parameter.Modifier.NONE, null, GetLocation (yyVals[-3+yyTop]))); lexer.EventParsing = true; } break; case 293: #line 2238 "cs-parser.jay" { lexer.EventParsing = false; } break; case 294: #line 2242 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-5+yyTop]; if (current_container.Kind == Kind.Interface) { Report.Error (69, (Location) yyVals[-7+yyTop], "Event in interface cannot have add or remove accessors"); } if (yyVals[-2+yyTop] == null){ Report.Error (65, (Location) yyVals[-7+yyTop], "`{0}.{1}': event property must have both add and remove accessors", current_container.Name, name.GetSignatureForError ()); yyVal = null; } else { Accessors accessors = (Accessors) yyVals[-2+yyTop]; if (accessors.get_or_add == null || accessors.set_or_remove == null) /* CS0073 is already reported, so no CS0065 here.*/ yyVal = null; else { Event e = new EventProperty ( current_class, (FullNamedExpression) yyVals[-6+yyTop], (int) yyVals[-8+yyTop], name, (Attributes) yyVals[-9+yyTop], accessors.get_or_add, accessors.set_or_remove); if (RootContext.Documentation != null) { e.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } current_container.AddEvent (e); implicit_value_parameter_type = null; } } current_local_parameters = null; } break; case 295: #line 2275 "cs-parser.jay" { MemberName mn = (MemberName) yyVals[-1+yyTop]; if (mn.Left != null) Report.Error (71, mn.Location, "An explicit interface implementation of an event must use property syntax"); if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; Error_SyntaxError (yyToken); yyVal = null; } break; case 296: #line 2290 "cs-parser.jay" { yyVal = new Accessors ((Accessor) yyVals[-1+yyTop], (Accessor) yyVals[0+yyTop]); } break; case 297: #line 2294 "cs-parser.jay" { Accessors accessors = new Accessors ((Accessor) yyVals[0+yyTop], (Accessor) yyVals[-1+yyTop]); accessors.declared_in_reverse = true; yyVal = accessors; } break; case 298: #line 2299 "cs-parser.jay" { yyVal = null; } break; case 299: #line 2300 "cs-parser.jay" { yyVal = null; } break; case 300: #line 2302 "cs-parser.jay" { Report.Error (1055, GetLocation (yyVals[0+yyTop]), "An add or remove accessor expected"); yyVal = null; } break; case 301: #line 2306 "cs-parser.jay" { yyVal = null; } break; case 302: #line 2311 "cs-parser.jay" { lexer.EventParsing = false; } break; case 303: #line 2315 "cs-parser.jay" { Accessor accessor = new Accessor ((ToplevelBlock) yyVals[0+yyTop], 0, (Attributes) yyVals[-3+yyTop], null, (Location) yyVals[-2+yyTop]); lexer.EventParsing = true; yyVal = accessor; } break; case 304: #line 2320 "cs-parser.jay" { Report.Error (73, (Location) yyVals[-1+yyTop], "An add or remove accessor must have a body"); yyVal = null; } break; case 305: #line 2324 "cs-parser.jay" { Report.Error (1609, (Location) yyVals[0+yyTop], "Modifiers cannot be placed on event accessor declarations"); yyVal = null; } break; case 306: #line 2332 "cs-parser.jay" { lexer.EventParsing = false; } break; case 307: #line 2336 "cs-parser.jay" { yyVal = new Accessor ((ToplevelBlock) yyVals[0+yyTop], 0, (Attributes) yyVals[-3+yyTop], null, (Location) yyVals[-2+yyTop]); lexer.EventParsing = true; } break; case 308: #line 2340 "cs-parser.jay" { Report.Error (73, (Location) yyVals[-1+yyTop], "An add or remove accessor must have a body"); yyVal = null; } break; case 309: #line 2344 "cs-parser.jay" { Report.Error (1609, (Location) yyVals[0+yyTop], "Modifiers cannot be placed on event accessor declarations"); yyVal = null; } break; case 310: #line 2354 "cs-parser.jay" { implicit_value_parameter_type = (FullNamedExpression) yyVals[-5+yyTop]; indexer_parameters = (Parameters) yyVals[-2+yyTop]; if (indexer_parameters.IsEmpty) Report.Error (1551, GetLocation (yyVals[-3+yyTop]), "Indexers must have at least one parameter"); if (RootContext.Documentation != null) { tmpComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } lexer.PropertyParsing = true; parsing_indexer = true; } break; case 311: #line 2371 "cs-parser.jay" { lexer.PropertyParsing = false; has_get = has_set = false; parsing_indexer = false; } break; case 312: #line 2377 "cs-parser.jay" { Accessors accessors = (Accessors) yyVals[-2+yyTop]; Accessor get_block = accessors != null ? accessors.get_or_add : null; Accessor set_block = accessors != null ? accessors.set_or_remove : null; bool order = accessors != null ? accessors.declared_in_reverse : false; Indexer indexer = new Indexer (current_class, (FullNamedExpression) yyVals[-9+yyTop], (MemberName)yyVals[-8+yyTop], (int) yyVals[-10+yyTop], (Parameters) yyVals[-6+yyTop], (Attributes) yyVals[-11+yyTop], get_block, set_block, order); if (yyVals[-9+yyTop] == TypeManager.system_void_expr) Report.Error (620, GetLocation (yyVals[-9+yyTop]), "`{0}': indexer return type cannot be `void'", indexer.GetSignatureForError ()); if (accessors == null) Report.Error (548, indexer.Location, "`{0}': property or indexer must have at least one accessor", indexer.GetSignatureForError ()); if (current_container.Kind == Kind.Interface) { if (indexer.Get.Block != null) Report.Error (531, indexer.Location, "`{0}.get': interface members cannot have a definition", indexer.GetSignatureForError ()); if (indexer.Set.Block != null) Report.Error (531, indexer.Location, "`{0}.set': interface members cannot have a definition", indexer.GetSignatureForError ()); } if (RootContext.Documentation != null) indexer.DocComment = ConsumeStoredComment (); current_container.AddIndexer (indexer); current_local_parameters = null; implicit_value_parameter_type = null; indexer_parameters = null; } break; case 313: #line 2416 "cs-parser.jay" { if (RootContext.Documentation != null) enumTypeComment = Lexer.consume_doc_comment (); } break; case 314: #line 2422 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-4+yyTop]; if (name.IsGeneric) { Report.Error (1675, name.Location, "Enums cannot have type parameters"); } name = MakeName (name); Enum e = new Enum (current_namespace, current_class, (TypeExpr) yyVals[-3+yyTop], (int) yyVals[-6+yyTop], name, (Attributes) yyVals[-7+yyTop]); if (RootContext.Documentation != null) e.DocComment = enumTypeComment; EnumMember em = null; foreach (VariableDeclaration ev in (ArrayList) yyVals[-1+yyTop]) { em = new EnumMember ( e, em, ev.identifier, (Expression) ev.expression_or_array_initializer, ev.OptAttributes, ev.Location); /* if (RootContext.Documentation != null)*/ em.DocComment = ev.DocComment; e.AddEnumMember (em); } if (RootContext.EvalMode) undo.AddTypeContainer (current_container, e); current_container.AddTypeContainer (e); yyVal = e; } break; case 315: #line 2458 "cs-parser.jay" { yyVal = TypeManager.system_int32_expr; } break; case 316: #line 2460 "cs-parser.jay" { if (yyVals[0+yyTop] != TypeManager.system_int32_expr && yyVals[0+yyTop] != TypeManager.system_uint32_expr && yyVals[0+yyTop] != TypeManager.system_int64_expr && yyVals[0+yyTop] != TypeManager.system_uint64_expr && yyVals[0+yyTop] != TypeManager.system_int16_expr && yyVals[0+yyTop] != TypeManager.system_uint16_expr && yyVals[0+yyTop] != TypeManager.system_byte_expr && yyVals[0+yyTop] != TypeManager.system_sbyte_expr) Enum.Error_1008 (GetLocation (yyVals[0+yyTop])); yyVal = yyVals[0+yyTop]; } break; case 317: #line 2470 "cs-parser.jay" { Error_TypeExpected (lexer.Location); } break; case 318: #line 2477 "cs-parser.jay" { if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 319: #line 2482 "cs-parser.jay" { /* here will be evaluated after CLOSE_BLACE is consumed.*/ if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 320: #line 2488 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; } break; case 321: #line 2494 "cs-parser.jay" { yyVal = new ArrayList (4); } break; case 322: #line 2495 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 323: #line 2500 "cs-parser.jay" { ArrayList l = new ArrayList (4); l.Add (yyVals[0+yyTop]); yyVal = l; } break; case 324: #line 2507 "cs-parser.jay" { ArrayList l = (ArrayList) yyVals[-2+yyTop]; l.Add (yyVals[0+yyTop]); yyVal = l; } break; case 325: #line 2518 "cs-parser.jay" { VariableDeclaration vd = new VariableDeclaration ( (LocatedToken) yyVals[0+yyTop], null, (Attributes) yyVals[-1+yyTop]); if (RootContext.Documentation != null) { vd.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } yyVal = vd; } break; case 326: #line 2530 "cs-parser.jay" { ++lexer.parsing_block; if (RootContext.Documentation != null) { tmpComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.NotAllowed; } } break; case 327: #line 2538 "cs-parser.jay" { --lexer.parsing_block; VariableDeclaration vd = new VariableDeclaration ( (LocatedToken) yyVals[-3+yyTop], yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop]); if (RootContext.Documentation != null) vd.DocComment = ConsumeStoredComment (); yyVal = vd; } break; case 328: #line 2556 "cs-parser.jay" { MemberName name = MakeName ((MemberName) yyVals[-3+yyTop]); Parameters p = (Parameters) yyVals[-1+yyTop]; Delegate del = new Delegate (current_namespace, current_class, (FullNamedExpression) yyVals[-4+yyTop], (int) yyVals[-6+yyTop], name, p, (Attributes) yyVals[-7+yyTop]); if (RootContext.Documentation != null) { del.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } current_container.AddDelegate (del); current_delegate = del; lexer.ConstraintsParsing = true; } break; case 329: #line 2573 "cs-parser.jay" { lexer.ConstraintsParsing = false; } break; case 330: #line 2577 "cs-parser.jay" { current_delegate.SetParameterInfo ((ArrayList) yyVals[-2+yyTop]); yyVal = current_delegate; current_delegate = null; } break; case 331: #line 2587 "cs-parser.jay" { yyVal = null; } break; case 332: #line 2591 "cs-parser.jay" { if (RootContext.Version < LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (lexer.Location, "nullable types"); yyVal = this; } break; case 334: #line 2602 "cs-parser.jay" { LocatedToken lt1 = (LocatedToken) yyVals[-2+yyTop]; LocatedToken lt2 = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location); } break; case 336: #line 2613 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } break; case 337: #line 2621 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } break; case 338: #line 2631 "cs-parser.jay" { yyVal = null; } break; case 339: #line 2633 "cs-parser.jay" { if (RootContext.Version < LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); yyVal = yyVals[-1+yyTop]; } break; case 340: #line 2640 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = new TypeArguments (); } break; case 341: #line 2648 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = type_args; } break; case 342: #line 2654 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = type_args; } break; case 343: #line 2666 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 344: #line 2670 "cs-parser.jay" { lexer.parsing_generic_declaration = false; LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } break; case 345: #line 2679 "cs-parser.jay" { MemberName mn = (MemberName)yyVals[0+yyTop]; if (mn.TypeArguments != null) syntax_error (mn.Location, string.Format ("Member `{0}' cannot declare type arguments", mn.GetSignatureForError ())); } break; case 347: #line 2690 "cs-parser.jay" { lexer.parsing_generic_declaration = false; LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } break; case 348: #line 2699 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeContainer.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); } break; case 349: #line 2704 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName ((MemberName) yyVals[-1+yyTop], TypeContainer.DefaultIndexerName, null, GetLocation (yyVals[-1+yyTop])); } break; case 350: #line 2712 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); } break; case 351: #line 2717 "cs-parser.jay" { LocatedToken lt1 = (LocatedToken) yyVals[-3+yyTop]; LocatedToken lt2 = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName (lt1.Value, lt2.Value, (TypeArguments) yyVals[-1+yyTop], lt1.Location); } break; case 352: #line 2724 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); } break; case 353: #line 2731 "cs-parser.jay" { yyVal = null; } break; case 354: #line 2733 "cs-parser.jay" { if (RootContext.Version < LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); yyVal = yyVals[-1+yyTop]; } break; case 355: #line 2743 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression)yyVals[0+yyTop]); yyVal = type_args; } break; case 356: #line 2749 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression)yyVals[0+yyTop]); yyVal = type_args; } break; case 357: #line 2758 "cs-parser.jay" { LocatedToken lt = (LocatedToken)yyVals[0+yyTop]; yyVal = new TypeParameterName (lt.Value, (Attributes)yyVals[-1+yyTop], lt.Location); } break; case 358: #line 2763 "cs-parser.jay" { if (GetTokenName (yyToken) == "type") Report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); else Error_SyntaxError (yyToken); yyVal = new TypeParameterName ("", null, lexer.Location); } break; case 360: #line 2779 "cs-parser.jay" { yyVal = TypeManager.system_void_expr; } break; case 361: #line 2786 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 363: #line 2797 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (lexer.Location); yyVal = TypeManager.system_void_expr; } break; case 365: #line 2806 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (lexer.Location); yyVal = TypeManager.system_void_expr; } break; case 367: #line 2815 "cs-parser.jay" { string rank_specifiers = (string) yyVals[0+yyTop]; yyVal = current_array_type = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], rank_specifiers); } break; case 368: #line 2823 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-1+yyTop]; if (yyVals[0+yyTop] != null) { yyVal = new ComposedCast (name.GetTypeExpression (), "?", lexer.Location); } else { if (name.Left == null && name.Name == "var" && (RootContext.Version > LanguageVersion.ISO_2 || RootContext.Version == LanguageVersion.Default_MCS)) yyVal = current_array_type = new VarExpr (name.Location); else yyVal = name.GetTypeExpression (); } } break; case 369: #line 2837 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], "?", lexer.Location); } break; case 370: #line 2842 "cs-parser.jay" { /**/ /* Note that here only unmanaged types are allowed but we*/ /* can't perform checks during this phase - we do it during*/ /* semantic analysis.*/ /**/ yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], "*", Lexer.Location); } break; case 371: #line 2851 "cs-parser.jay" { yyVal = new ComposedCast (TypeManager.system_void_expr, "*", (Location) yyVals[-1+yyTop]); } break; case 372: #line 2858 "cs-parser.jay" { ArrayList types = new ArrayList (2); types.Add (yyVals[0+yyTop]); yyVal = types; } break; case 373: #line 2864 "cs-parser.jay" { ArrayList types = (ArrayList) yyVals[-2+yyTop]; types.Add (yyVals[0+yyTop]); yyVal = types; } break; case 374: #line 2873 "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 ()); yyVal = yyVals[0+yyTop]; } break; case 375: #line 2879 "cs-parser.jay" { Error_TypeExpected (lexer.Location); } break; case 376: #line 2889 "cs-parser.jay" { yyVal = TypeManager.system_object_expr; } break; case 377: #line 2890 "cs-parser.jay" { yyVal = TypeManager.system_string_expr; } break; case 378: #line 2891 "cs-parser.jay" { yyVal = TypeManager.system_boolean_expr; } break; case 379: #line 2892 "cs-parser.jay" { yyVal = TypeManager.system_decimal_expr; } break; case 380: #line 2893 "cs-parser.jay" { yyVal = TypeManager.system_single_expr; } break; case 381: #line 2894 "cs-parser.jay" { yyVal = TypeManager.system_double_expr; } break; case 383: #line 2899 "cs-parser.jay" { yyVal = TypeManager.system_sbyte_expr; } break; case 384: #line 2900 "cs-parser.jay" { yyVal = TypeManager.system_byte_expr; } break; case 385: #line 2901 "cs-parser.jay" { yyVal = TypeManager.system_int16_expr; } break; case 386: #line 2902 "cs-parser.jay" { yyVal = TypeManager.system_uint16_expr; } break; case 387: #line 2903 "cs-parser.jay" { yyVal = TypeManager.system_int32_expr; } break; case 388: #line 2904 "cs-parser.jay" { yyVal = TypeManager.system_uint32_expr; } break; case 389: #line 2905 "cs-parser.jay" { yyVal = TypeManager.system_int64_expr; } break; case 390: #line 2906 "cs-parser.jay" { yyVal = TypeManager.system_uint64_expr; } break; case 391: #line 2907 "cs-parser.jay" { yyVal = TypeManager.system_char_expr; } break; case 393: #line 2913 "cs-parser.jay" { yyVal = TypeManager.system_void_expr; } break; case 397: #line 2931 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (MemberName.MakeName (lt.Value, (TypeArguments)yyVals[0+yyTop]), (TypeArguments)yyVals[0+yyTop], lt.Location); } break; case 418: #line 2958 "cs-parser.jay" { yyVal = new CharLiteral ((char) lexer.Value, lexer.Location); } break; case 419: #line 2959 "cs-parser.jay" { yyVal = new StringLiteral ((string) lexer.Value, lexer.Location); } break; case 420: #line 2960 "cs-parser.jay" { yyVal = new NullLiteral (lexer.Location); } break; case 421: #line 2964 "cs-parser.jay" { yyVal = new FloatLiteral ((float) lexer.Value, lexer.Location); } break; case 422: #line 2965 "cs-parser.jay" { yyVal = new DoubleLiteral ((double) lexer.Value, lexer.Location); } break; case 423: #line 2966 "cs-parser.jay" { yyVal = new DecimalLiteral ((decimal) lexer.Value, lexer.Location); } break; case 424: #line 2970 "cs-parser.jay" { object v = lexer.Value; if (v is int){ yyVal = new IntLiteral ((int) v, lexer.Location); } else if (v is uint) yyVal = new UIntLiteral ((UInt32) v, lexer.Location); else if (v is long) yyVal = new LongLiteral ((Int64) v, lexer.Location); else if (v is ulong) yyVal = new ULongLiteral ((UInt64) v, lexer.Location); else Console.WriteLine ("OOPS. Unexpected result from scanner"); } break; case 425: #line 2987 "cs-parser.jay" { yyVal = new BoolLiteral (true, lexer.Location); } break; case 426: #line 2988 "cs-parser.jay" { yyVal = new BoolLiteral (false, lexer.Location); } break; case 430: #line 3005 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); } break; case 431: #line 3012 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } break; case 432: #line 3017 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; /* TODO: Location is wrong as some predefined types doesn't hold a location*/ yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } break; case 433: #line 3023 "cs-parser.jay" { LocatedToken lt1 = (LocatedToken) yyVals[-2+yyTop]; LocatedToken lt2 = (LocatedToken) yyVals[-1+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location); } break; case 434: #line 3033 "cs-parser.jay" { yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (ArrayList) yyVals[-1+yyTop]); } break; case 435: #line 3039 "cs-parser.jay" { yyVal = null; } break; case 437: #line 3045 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = CollectionOrObjectInitializers.Empty; else yyVal = new CollectionOrObjectInitializers ((ArrayList) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 438: #line 3052 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((ArrayList) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); } break; case 439: #line 3058 "cs-parser.jay" { yyVal = null; } break; case 440: #line 3060 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 441: #line 3067 "cs-parser.jay" { ArrayList a = new ArrayList (); a.Add (yyVals[0+yyTop]); yyVal = a; } break; case 442: #line 3073 "cs-parser.jay" { ArrayList a = (ArrayList)yyVals[-2+yyTop]; a.Add (yyVals[0+yyTop]); yyVal = a; } break; case 443: #line 3082 "cs-parser.jay" { LocatedToken lt = yyVals[-2+yyTop] as LocatedToken; yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location); } break; case 444: #line 3087 "cs-parser.jay" { yyVal = new CollectionElementInitializer ((Expression)yyVals[0+yyTop]); } break; case 445: #line 3091 "cs-parser.jay" { yyVal = new CollectionElementInitializer ((ArrayList)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 446: #line 3095 "cs-parser.jay" { Report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); } break; case 449: #line 3106 "cs-parser.jay" { yyVal = null; } break; case 451: #line 3112 "cs-parser.jay" { ArrayList list = new ArrayList (4); list.Add (yyVals[0+yyTop]); yyVal = list; } break; case 452: #line 3118 "cs-parser.jay" { ArrayList list = (ArrayList) yyVals[-2+yyTop]; list.Add (yyVals[0+yyTop]); yyVal = list; } break; case 453: #line 3124 "cs-parser.jay" { Report.Error (839, GetLocation (yyVals[0+yyTop]), "An argument is missing"); yyVal = null; } break; case 454: #line 3129 "cs-parser.jay" { Report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } break; case 455: #line 3137 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Expression); } break; case 456: #line 3141 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 457: #line 3148 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); } break; case 458: #line 3152 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); } break; case 459: #line 3156 "cs-parser.jay" { ArrayList list = (ArrayList) yyVals[-1+yyTop]; Argument[] args = new Argument [list.Count]; list.CopyTo (args, 0); Expression expr = new Arglist (args, (Location) yyVals[-3+yyTop]); yyVal = new Argument (expr, Argument.AType.Expression); } break; case 460: #line 3165 "cs-parser.jay" { yyVal = new Argument (new Arglist ((Location) yyVals[-2+yyTop]), Argument.AType.Expression); } break; case 461: #line 3169 "cs-parser.jay" { yyVal = new Argument (new ArglistAccess ((Location) yyVals[0+yyTop]), Argument.AType.ArgList); } break; case 462: #line 3175 "cs-parser.jay" { note ("section 5.4"); yyVal = yyVals[0+yyTop]; } break; case 463: #line 3180 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (ArrayList) yyVals[-1+yyTop]); } break; case 464: #line 3184 "cs-parser.jay" { /* LAMESPEC: Not allowed according to specification*/ yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (ArrayList) yyVals[-1+yyTop]); } break; case 465: #line 3189 "cs-parser.jay" { /* So the super-trick is that primary_expression*/ /* can only be either a SimpleName or a MemberAccess. */ /* The MemberAccess case arises when you have a fully qualified type-name like :*/ /* Foo.Bar.Blah i;*/ /* SimpleName is when you have*/ /* Blah i;*/ Expression expr = (Expression) yyVals[-1+yyTop]; if (expr is ComposedCast){ yyVal = new ComposedCast ((ComposedCast)expr, (string) yyVals[0+yyTop]); } else if (expr is ATypeNameExpression){ /**/ /* So we extract the string corresponding to the SimpleName*/ /* or MemberAccess*/ /* */ yyVal = new ComposedCast ((ATypeNameExpression)expr, (string) yyVals[0+yyTop]); } else { Error_ExpectingTypeName (expr); yyVal = TypeManager.system_object_expr; } current_array_type = (FullNamedExpression)yyVal; } break; case 466: #line 3217 "cs-parser.jay" { ArrayList list = new ArrayList (4); list.Add (yyVals[0+yyTop]); yyVal = list; } break; case 467: #line 3223 "cs-parser.jay" { ArrayList list = (ArrayList) yyVals[-2+yyTop]; list.Add (yyVals[0+yyTop]); yyVal = list; } break; case 468: #line 3232 "cs-parser.jay" { yyVal = new This (current_block, (Location) yyVals[0+yyTop]); } break; case 469: #line 3239 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new BaseAccess (lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } break; case 470: #line 3244 "cs-parser.jay" { yyVal = new BaseIndexerAccess ((ArrayList) yyVals[-1+yyTop], (Location) yyVals[-3+yyTop]); } break; case 471: #line 3247 "cs-parser.jay" { Report.Error (175, (Location) yyVals[-1+yyTop], "Use of keyword `base' is not valid in this context"); yyVal = null; } break; case 472: #line 3255 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop]); } break; case 473: #line 3262 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop]); } break; case 474: #line 3269 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (RootContext.Version <= LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (GetLocation (yyVals[-5+yyTop]), "object initializers"); yyVal = new NewInitialize ((Expression) yyVals[-4+yyTop], (ArrayList) yyVals[-2+yyTop], (CollectionOrObjectInitializers) yyVals[0+yyTop], (Location) yyVals[-5+yyTop]); } else yyVal = new New ((Expression) yyVals[-4+yyTop], (ArrayList) yyVals[-2+yyTop], (Location) yyVals[-5+yyTop]); } break; case 475: #line 3280 "cs-parser.jay" { if (RootContext.Version <= LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); yyVal = new NewInitialize ((Expression) yyVals[-1+yyTop], null, (CollectionOrObjectInitializers) yyVals[0+yyTop], (Location) yyVals[-2+yyTop]); } break; case 476: #line 3293 "cs-parser.jay" { yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (ArrayList) yyVals[-3+yyTop], (string) yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop], (Location) yyVals[-6+yyTop]); } break; case 477: #line 3297 "cs-parser.jay" { if (yyVals[0+yyTop] == null) Report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-2+yyTop], (string) yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop], (Location) yyVals[-3+yyTop]); } break; case 478: #line 3304 "cs-parser.jay" { yyVal = new ImplicitlyTypedArrayCreation ((string) yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop], (Location) yyVals[-2+yyTop]); } break; case 479: #line 3308 "cs-parser.jay" { Report.Error (1526, (Location) yyVals[-2+yyTop], "A new expression requires () or [] after type"); yyVal = null; } break; case 480: #line 3316 "cs-parser.jay" { if (RootContext.Version <= LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); yyVal = new AnonymousTypeDeclaration ((ArrayList) yyVals[-1+yyTop], current_container, GetLocation (yyVals[-3+yyTop])); } break; case 483: #line 3330 "cs-parser.jay" { yyVal = null; } break; case 485: #line 3336 "cs-parser.jay" { ArrayList a = new ArrayList (4); a.Add (yyVals[0+yyTop]); yyVal = a; } break; case 486: #line 3342 "cs-parser.jay" { ArrayList a = (ArrayList) yyVals[-2+yyTop]; a.Add (yyVals[0+yyTop]); yyVal = a; } break; case 487: #line 3351 "cs-parser.jay" { LocatedToken lt = (LocatedToken)yyVals[-2+yyTop]; yyVal = new AnonymousTypeParameter ((Expression)yyVals[0+yyTop], lt.Value, lt.Location); } break; case 488: #line 3356 "cs-parser.jay" { LocatedToken lt = (LocatedToken)yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), lt.Value, lt.Location); } break; case 489: #line 3362 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; BaseAccess ba = new BaseAccess (lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); yyVal = new AnonymousTypeParameter (ba, lt.Value, lt.Location); } break; case 490: #line 3368 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } break; case 491: #line 3373 "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"); } break; case 492: #line 3381 "cs-parser.jay" { yyVal = ""; } break; case 493: #line 3385 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 494: #line 3392 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = "?"; else yyVal = string.Empty; } break; case 495: #line 3399 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = "?" + (string) yyVals[0+yyTop]; else yyVal = yyVals[0+yyTop]; } break; case 497: #line 3410 "cs-parser.jay" { yyVal = (string) yyVals[0+yyTop] + (string) yyVals[-1+yyTop]; } break; case 498: #line 3417 "cs-parser.jay" { yyVal = "[]"; } break; case 499: #line 3421 "cs-parser.jay" { yyVal = "[" + (string) yyVals[-1+yyTop] + "]"; } break; case 500: #line 3425 "cs-parser.jay" { ArrayCreation.Error_IncorrectArrayInitializer (GetLocation (yyVals[-2+yyTop])); yyVal = "[]"; } break; case 501: #line 3433 "cs-parser.jay" { yyVal = ","; } break; case 502: #line 3437 "cs-parser.jay" { yyVal = (string) yyVals[-1+yyTop] + ","; } break; case 503: #line 3444 "cs-parser.jay" { yyVal = null; } break; case 504: #line 3448 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 505: #line 3455 "cs-parser.jay" { ArrayList list = new ArrayList (4); yyVal = list; } break; case 506: #line 3460 "cs-parser.jay" { yyVal = (ArrayList) yyVals[-2+yyTop]; } break; case 507: #line 3467 "cs-parser.jay" { ArrayList list = new ArrayList (4); list.Add (yyVals[0+yyTop]); yyVal = list; } break; case 508: #line 3473 "cs-parser.jay" { ArrayList list = (ArrayList) yyVals[-2+yyTop]; list.Add (yyVals[0+yyTop]); yyVal = list; } break; case 509: #line 3479 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ArrayList (); } break; case 510: #line 3487 "cs-parser.jay" { pushed_current_array_type = current_array_type; lexer.TypeOfParsing = true; } break; case 511: #line 3492 "cs-parser.jay" { lexer.TypeOfParsing = false; Expression type = (Expression)yyVals[-1+yyTop]; if (type == TypeManager.system_void_expr) yyVal = new TypeOfVoid ((Location) yyVals[-4+yyTop]); else yyVal = new TypeOf (type, (Location) yyVals[-4+yyTop]); current_array_type = pushed_current_array_type; } break; case 514: #line 3507 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } break; case 515: #line 3515 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (MemberName.MakeName (lt.Value, (int)yyVals[0+yyTop]), lt.Location); } break; case 516: #line 3521 "cs-parser.jay" { LocatedToken lt1 = (LocatedToken) yyVals[-2+yyTop]; LocatedToken lt2 = (LocatedToken) yyVals[-1+yyTop]; yyVal = new QualifiedAliasMember (lt1.Value, MemberName.MakeName (lt2.Value, (int) yyVals[0+yyTop]), lt1.Location); } break; case 517: #line 3528 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-2+yyTop], lt.Value, lt.Location); } break; case 518: #line 3534 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], MemberName.MakeName (lt.Value, (int) yyVals[0+yyTop]), lt.Location); } break; case 519: #line 3540 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; MemberName name = (MemberName) yyVals[-3+yyTop]; yyVal = new MemberAccess (name.GetTypeExpression (), MemberName.MakeName (lt.Value, (int) yyVals[0+yyTop]), lt.Location); } break; case 520: #line 3550 "cs-parser.jay" { if (RootContext.Version < LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (lexer.Location, "generics"); yyVal = yyVals[0+yyTop]; } break; case 521: #line 3560 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; if (RootContext.Version == LanguageVersion.ISO_1) Report.FeatureIsNotAvailable (lt.Location, "namespace alias qualifier"); yyVal = lt; } break; case 522: #line 3570 "cs-parser.jay" { yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], (Location) yyVals[-3+yyTop]); } break; case 523: #line 3577 "cs-parser.jay" { yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], (Location) yyVals[-3+yyTop]); } break; case 524: #line 3584 "cs-parser.jay" { yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], (Location) yyVals[-3+yyTop]); } break; case 525: #line 3591 "cs-parser.jay" { Expression deref; LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; deref = new Indirection ((Expression) yyVals[-2+yyTop], lt.Location); yyVal = new MemberAccess (deref, lt.Value); } break; case 526: #line 3602 "cs-parser.jay" { start_anonymous (false, (Parameters) yyVals[0+yyTop], (Location) yyVals[-1+yyTop]); } break; case 527: #line 3606 "cs-parser.jay" { yyVal = end_anonymous ((ToplevelBlock) yyVals[0+yyTop]); } break; case 528: #line 3613 "cs-parser.jay" { yyVal = Parameters.Undefined; } break; case 530: #line 3621 "cs-parser.jay" { params_modifiers_not_allowed = true; } break; case 531: #line 3625 "cs-parser.jay" { params_modifiers_not_allowed = false; yyVal = yyVals[-1+yyTop]; } break; case 532: #line 3633 "cs-parser.jay" { if (RootContext.Version < LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (lexer.Location, "default value expression"); yyVal = new DefaultValueExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); } break; case 534: #line 3644 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop]); } break; case 535: #line 3648 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop]); } break; case 537: #line 3656 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); } break; case 538: #line 3660 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); } break; case 540: #line 3672 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop]); } break; case 541: #line 3676 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop]); } break; case 542: #line 3680 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop]); } break; case 543: #line 3684 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop]); } break; case 544: #line 3688 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 545: #line 3692 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop]); } break; case 547: #line 3700 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 548: #line 3705 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 549: #line 3710 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 551: #line 3719 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 552: #line 3724 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 553: #line 3728 "cs-parser.jay" { /* Shift/Reduce conflict*/ yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 554: #line 3733 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], (Location) yyVals[-1+yyTop]); } break; case 555: #line 3737 "cs-parser.jay" { yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], (Location) yyVals[-1+yyTop]); } break; case 557: #line 3745 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 558: #line 3750 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 560: #line 3759 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 561: #line 3764 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 562: #line 3769 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 563: #line 3774 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 565: #line 3783 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 566: #line 3788 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 568: #line 3797 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 570: #line 3806 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 572: #line 3815 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 574: #line 3824 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 576: #line 3833 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 578: #line 3842 "cs-parser.jay" { if (RootContext.Version < LanguageVersion.ISO_2) Report.FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); yyVal = new Nullable.NullCoalescingOperator ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], lexer.Location); } break; case 580: #line 3853 "cs-parser.jay" { yyVal = new Conditional ((Expression) yyVals[-4+yyTop], (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 581: #line 3860 "cs-parser.jay" { yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 582: #line 3864 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 583: #line 3869 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 584: #line 3874 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 585: #line 3879 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 586: #line 3884 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 587: #line 3889 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 588: #line 3894 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 589: #line 3899 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 590: #line 3904 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 591: #line 3909 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); } break; case 592: #line 3917 "cs-parser.jay" { ArrayList pars = new ArrayList (4); pars.Add (yyVals[0+yyTop]); yyVal = pars; } break; case 593: #line 3924 "cs-parser.jay" { ArrayList pars = (ArrayList) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; if (pars[0].GetType () != p.GetType ()) { Report.Error (748, p.Location, "All lambda parameters must be typed either explicitly or implicitly"); } pars.Add (p); yyVal = pars; } break; case 594: #line 3938 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], null, lt.Location); } break; case 595: #line 3944 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, Parameter.Modifier.NONE, null, lt.Location); } break; case 596: #line 3950 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } break; case 597: #line 3957 "cs-parser.jay" { yyVal = Parameters.EmptyReadOnlyParameters; } break; case 598: #line 3958 "cs-parser.jay" { ArrayList pars_list = (ArrayList) yyVals[0+yyTop]; yyVal = new Parameters ((Parameter[])pars_list.ToArray (typeof (Parameter))); } break; case 599: #line 3965 "cs-parser.jay" { start_block (lexer.Location); } break; case 600: #line 3969 "cs-parser.jay" { Block b = end_block (lexer.Location); b.AddStatement (new ContextualReturn ((Expression) yyVals[0+yyTop])); yyVal = b; } break; case 601: #line 3974 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 602: #line 3981 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); start_anonymous (true, new Parameters (p), GetLocation (yyVals[-1+yyTop])); } break; case 603: #line 3987 "cs-parser.jay" { yyVal = end_anonymous ((ToplevelBlock) yyVals[0+yyTop]); } break; case 604: #line 3991 "cs-parser.jay" { start_anonymous (true, (Parameters) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); } break; case 605: #line 3995 "cs-parser.jay" { yyVal = end_anonymous ((ToplevelBlock) yyVals[0+yyTop]); } break; case 613: #line 4027 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 614: #line 4031 "cs-parser.jay" { MemberName name = MakeName ((MemberName) yyVals[0+yyTop]); push_current_class (new Class (current_namespace, current_class, name, (int) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]); } break; case 615: #line 4037 "cs-parser.jay" { lexer.ConstraintsParsing = false; current_class.SetParameterInfo ((ArrayList) yyVals[0+yyTop]); if (RootContext.Documentation != null) { current_container.DocComment = Lexer.consume_doc_comment (); Lexer.doc_state = XmlCommentState.Allowed; } } break; case 616: #line 4048 "cs-parser.jay" { --lexer.parsing_declaration; if (RootContext.Documentation != null) Lexer.doc_state = XmlCommentState.Allowed; } break; case 617: #line 4054 "cs-parser.jay" { yyVal = pop_current_class (); } break; case 618: #line 4061 "cs-parser.jay" { yyVal = null; } break; case 619: #line 4063 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 620: #line 4067 "cs-parser.jay" { yyVal = (int) 0; } break; case 623: #line 4074 "cs-parser.jay" { int m1 = (int) yyVals[-1+yyTop]; int m2 = (int) yyVals[0+yyTop]; if ((m1 & m2) != 0) { Location l = lexer.Location; Report.Error (1004, l, "Duplicate `{0}' modifier", Modifiers.Name (m2)); } yyVal = (int) (m1 | m2); } break; case 624: #line 4088 "cs-parser.jay" { yyVal = Modifiers.NEW; if (current_container == RootContext.ToplevelTypes) Report.Error (1530, lexer.Location, "Keyword `new' is not allowed on namespace elements"); } break; case 625: #line 4093 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; } break; case 626: #line 4094 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; } break; case 627: #line 4095 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; } break; case 628: #line 4096 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; } break; case 629: #line 4097 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; } break; case 630: #line 4098 "cs-parser.jay" { yyVal = Modifiers.SEALED; } break; case 631: #line 4099 "cs-parser.jay" { yyVal = Modifiers.STATIC; } break; case 632: #line 4100 "cs-parser.jay" { yyVal = Modifiers.READONLY; } break; case 633: #line 4101 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; } break; case 634: #line 4102 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; } break; case 635: #line 4103 "cs-parser.jay" { yyVal = Modifiers.EXTERN; } break; case 636: #line 4104 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; } break; case 637: #line 4105 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; } break; case 640: #line 4114 "cs-parser.jay" { current_container.AddBasesForPart (current_class, (ArrayList) yyVals[0+yyTop]); } break; case 641: #line 4118 "cs-parser.jay" { yyVal = null; } break; case 642: #line 4120 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 643: #line 4124 "cs-parser.jay" { ArrayList constraints = new ArrayList (1); constraints.Add (yyVals[0+yyTop]); yyVal = constraints; } break; case 644: #line 4129 "cs-parser.jay" { ArrayList constraints = (ArrayList) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; foreach (Constraints c in constraints) { if (new_constraint.TypeParameter == c.TypeParameter) { Report.Error (409, new_constraint.Location, "A constraint clause has already been specified for type parameter `{0}'", new_constraint.TypeParameter); } } constraints.Add (new_constraint); yyVal = constraints; } break; case 645: #line 4146 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; yyVal = new Constraints (lt.Value, (ArrayList) yyVals[0+yyTop], lt.Location); } break; case 646: #line 4153 "cs-parser.jay" { ArrayList constraints = new ArrayList (1); constraints.Add (yyVals[0+yyTop]); yyVal = constraints; } break; case 647: #line 4158 "cs-parser.jay" { ArrayList constraints = (ArrayList) yyVals[-2+yyTop]; constraints.Add (yyVals[0+yyTop]); yyVal = constraints; } break; case 649: #line 4168 "cs-parser.jay" { yyVal = SpecialConstraint.Constructor; } break; case 650: #line 4171 "cs-parser.jay" { yyVal = SpecialConstraint.ReferenceType; } break; case 651: #line 4174 "cs-parser.jay" { yyVal = SpecialConstraint.ValueType; } break; case 652: #line 4194 "cs-parser.jay" { ++lexer.parsing_block; start_block ((Location) yyVals[0+yyTop]); } break; case 653: #line 4199 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block ((Location) yyVals[0+yyTop]); } break; case 654: #line 4207 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } break; case 655: #line 4212 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block ((Location) yyVals[0+yyTop]); } break; case 660: #line 4230 "cs-parser.jay" { if (yyVals[0+yyTop] != null && (Block) yyVals[0+yyTop] != current_block){ current_block.AddStatement ((Statement) yyVals[0+yyTop]); current_block = (Block) yyVals[0+yyTop]; } } break; case 661: #line 4237 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 665: #line 4256 "cs-parser.jay" { if (yyVals[0+yyTop] != null && (Block) yyVals[0+yyTop] != current_block){ current_block.AddStatement ((Statement) yyVals[0+yyTop]); current_block = (Block) yyVals[0+yyTop]; } } break; case 666: #line 4263 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 695: #line 4304 "cs-parser.jay" { Report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } break; case 696: #line 4309 "cs-parser.jay" { Report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } break; case 697: #line 4317 "cs-parser.jay" { yyVal = EmptyStatement.Value; } break; case 698: #line 4324 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, lt.Location); if (current_block.AddLabel (labeled)) current_block.AddStatement (labeled); } break; case 700: #line 4336 "cs-parser.jay" { current_array_type = null; if (yyVals[-1+yyTop] != null){ DictionaryEntry de = (DictionaryEntry) yyVals[-1+yyTop]; Expression e = (Expression) de.Key; yyVal = declare_local_variables (e, (ArrayList) de.Value, e.Location); } } break; case 701: #line 4347 "cs-parser.jay" { current_array_type = null; if (yyVals[-1+yyTop] != null){ DictionaryEntry de = (DictionaryEntry) yyVals[-1+yyTop]; yyVal = declare_local_constants ((Expression) de.Key, (ArrayList) de.Value); } } break; case 702: #line 4365 "cs-parser.jay" { /* FIXME: Do something smart here regarding the composition of the type.*/ /* Ok, the above "primary_expression" is there to get rid of*/ /* both reduce/reduce and shift/reduces in the grammar, it should*/ /* really just be "type_name". If you use type_name, a reduce/reduce*/ /* creeps up. If you use namespace_or_type_name (which is all we need*/ /* really) two shift/reduces appear.*/ /* */ /* So the super-trick is that primary_expression*/ /* can only be either a SimpleName or a MemberAccess. */ /* The MemberAccess case arises when you have a fully qualified type-name like :*/ /* Foo.Bar.Blah i;*/ /* SimpleName is when you have*/ /* Blah i;*/ Expression expr = (Expression) yyVals[-1+yyTop]; string rank_or_nullable = (string) yyVals[0+yyTop]; if (expr is ComposedCast){ yyVal = new ComposedCast ((ComposedCast)expr, rank_or_nullable); } else if (expr is ATypeNameExpression){ /**/ /* So we extract the string corresponding to the SimpleName*/ /* or MemberAccess*/ /**/ if (rank_or_nullable.Length == 0) { SimpleName sn = expr as SimpleName; if (sn != null && sn.Name == "var" && (RootContext.Version > LanguageVersion.ISO_2 || RootContext.Version == LanguageVersion.Default_MCS)) yyVal = current_array_type = new VarExpr (sn.Location); else yyVal = yyVals[-1+yyTop]; } else { yyVal = new ComposedCast ((ATypeNameExpression)expr, rank_or_nullable); } } else { Error_ExpectingTypeName (expr); yyVal = TypeManager.system_object_expr; } } break; case 703: #line 4408 "cs-parser.jay" { if ((string) yyVals[0+yyTop] == "") yyVal = yyVals[-1+yyTop]; else yyVal = current_array_type = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (string) yyVals[0+yyTop], lexer.Location); } break; case 704: #line 4415 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (lexer.Location); yyVal = TypeManager.system_void_expr; } break; case 705: #line 4423 "cs-parser.jay" { ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; if (expr != null) { yyVal = new ComposedCast (expr, "*"); } else { Error_ExpectingTypeName ((Expression)yyVals[-1+yyTop]); yyVal = expr; } } break; case 706: #line 4434 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], "*", GetLocation (yyVals[-1+yyTop])); } break; case 707: #line 4438 "cs-parser.jay" { yyVal = new ComposedCast (TypeManager.system_void_expr, "*", (Location) yyVals[-1+yyTop]); } break; case 708: #line 4442 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], "*"); } break; case 710: #line 4450 "cs-parser.jay" { if (yyVals[-1+yyTop] != null){ string rank = (string)yyVals[0+yyTop]; if (rank == "") yyVal = yyVals[-1+yyTop]; else yyVal = current_array_type = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], rank); } else { yyVal = null; } } break; case 711: #line 4466 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) { VarExpr ve = yyVals[-1+yyTop] as VarExpr; if (ve != null) ve.VariableInitializer = (ArrayList)yyVals[0+yyTop]; yyVal = new DictionaryEntry (yyVals[-1+yyTop], yyVals[0+yyTop]); } else yyVal = null; } break; case 712: #line 4480 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DictionaryEntry (yyVals[-1+yyTop], yyVals[0+yyTop]); else yyVal = null; } break; case 713: #line 4489 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 714: #line 4493 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 715: #line 4502 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { ((Expression) yyVals[0+yyTop]).Error_InvalidExpressionStatement (); s = EmptyExpressionStatement.Instance; } yyVal = new StatementExpression (s); } break; case 716: #line 4512 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } break; case 717: #line 4520 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; ExpressionStatement s; s = new OptionalAssign (new SimpleName ("$retval", lexer.Location), expr, lexer.Location); yyVal = new StatementExpression (s); } break; case 718: #line 4528 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } break; case 721: #line 4542 "cs-parser.jay" { Location l = (Location) yyVals[-4+yyTop]; yyVal = new If ((Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], l); /* FIXME: location for warning should be loc property of $5.*/ if (yyVals[0+yyTop] == EmptyStatement.Value) Report.Warning (642, 3, l, "Possible mistaken empty statement"); } break; case 722: #line 4554 "cs-parser.jay" { Location l = (Location) yyVals[-6+yyTop]; yyVal = new If ((Expression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], l); /* FIXME: location for warning should be loc property of $5 and $7.*/ if (yyVals[-2+yyTop] == EmptyStatement.Value) Report.Warning (642, 3, l, "Possible mistaken empty statement"); if (yyVals[0+yyTop] == EmptyStatement.Value) Report.Warning (642, 3, l, "Possible mistaken empty statement"); } break; case 723: #line 4569 "cs-parser.jay" { if (switch_stack == null) switch_stack = new Stack (2); switch_stack.Push (current_block); } break; case 724: #line 4576 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-2+yyTop], (ArrayList) yyVals[0+yyTop], (Location) yyVals[-5+yyTop]); current_block = (Block) switch_stack.Pop (); } break; case 725: #line 4586 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 726: #line 4593 "cs-parser.jay" { Report.Warning (1522, 1, lexer.Location, "Empty switch block"); yyVal = new ArrayList (); } break; case 728: #line 4602 "cs-parser.jay" { ArrayList sections = new ArrayList (4); sections.Add (yyVals[0+yyTop]); yyVal = sections; } break; case 729: #line 4609 "cs-parser.jay" { ArrayList sections = (ArrayList) yyVals[-1+yyTop]; sections.Add (yyVals[0+yyTop]); yyVal = sections; } break; case 730: #line 4619 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; case 731: #line 4623 "cs-parser.jay" { yyVal = new SwitchSection ((ArrayList) yyVals[-2+yyTop], current_block.Explicit); } break; case 732: #line 4630 "cs-parser.jay" { ArrayList labels = new ArrayList (4); labels.Add (yyVals[0+yyTop]); yyVal = labels; } break; case 733: #line 4637 "cs-parser.jay" { ArrayList labels = (ArrayList) (yyVals[-1+yyTop]); labels.Add (yyVals[0+yyTop]); yyVal = labels; } break; case 734: #line 4647 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], (Location) yyVals[-2+yyTop]); } break; case 735: #line 4651 "cs-parser.jay" { yyVal = new SwitchLabel (null, (Location) yyVals[0+yyTop]); } break; case 740: #line 4665 "cs-parser.jay" { Location l = (Location) yyVals[-4+yyTop]; yyVal = new While ((Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], l); } break; case 741: #line 4674 "cs-parser.jay" { Location l = (Location) yyVals[-6+yyTop]; yyVal = new Do ((Statement) yyVals[-5+yyTop], (Expression) yyVals[-2+yyTop], l); } break; case 742: #line 4683 "cs-parser.jay" { Location l = lexer.Location; start_block (l); Block assign_block = current_block; if (yyVals[-1+yyTop] is DictionaryEntry){ DictionaryEntry de = (DictionaryEntry) yyVals[-1+yyTop]; Expression type = (Expression) de.Key; ArrayList var_declarators = (ArrayList) de.Value; foreach (VariableDeclaration decl in var_declarators){ LocalInfo vi; vi = current_block.AddVariable (type, decl.identifier, decl.Location); if (vi == null) continue; Expression expr = decl.expression_or_array_initializer; LocalVariableReference var; var = new LocalVariableReference (assign_block, decl.identifier, l); if (expr != null) { Assign a = new SimpleAssign (var, expr, decl.Location); assign_block.AddStatement (new StatementExpression (a)); } } /* Note: the $$ below refers to the value of this code block, not of the LHS non-terminal.*/ /* This can be referred to as $5 below.*/ yyVal = null; } else { yyVal = yyVals[-1+yyTop]; } } break; case 743: #line 4724 "cs-parser.jay" { Location l = (Location) yyVals[-9+yyTop]; For f = new For ((Statement) yyVals[-5+yyTop], (Expression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], l); current_block.AddStatement (f); yyVal = end_block (lexer.Location); } break; case 744: #line 4736 "cs-parser.jay" { yyVal = EmptyStatement.Value; } break; case 748: #line 4746 "cs-parser.jay" { yyVal = null; } break; case 750: #line 4751 "cs-parser.jay" { yyVal = EmptyStatement.Value; } break; case 753: #line 4761 "cs-parser.jay" { /* CHANGE: was `null'*/ Statement s = (Statement) yyVals[0+yyTop]; Block b = new Block (current_block, s.loc, lexer.Location); b.AddStatement (s); yyVal = b; } break; case 754: #line 4770 "cs-parser.jay" { Block b = (Block) yyVals[-2+yyTop]; b.AddStatement ((Statement) yyVals[0+yyTop]); yyVal = yyVals[-2+yyTop]; } break; case 755: #line 4780 "cs-parser.jay" { Report.Error (230, (Location) yyVals[-5+yyTop], "Type and identifier are both required in a foreach statement"); yyVal = null; } break; case 756: #line 4786 "cs-parser.jay" { start_block (lexer.Location); Block foreach_block = current_block; LocatedToken lt = (LocatedToken) yyVals[-3+yyTop]; Location l = lt.Location; LocalInfo vi = foreach_block.AddVariable ((Expression) yyVals[-4+yyTop], lt.Value, l); if (vi != null) { vi.SetReadOnlyContext (LocalInfo.ReadOnlyContext.Foreach); /* Get a writable reference to this read-only variable.*/ /**/ /* Note that the $$ here refers to the value of _this_ code block,*/ /* not the value of the LHS non-terminal. This can be referred to as $8 below.*/ yyVal = new LocalVariableReference (foreach_block, lt.Value, l, vi, false); } else { yyVal = null; } } break; case 757: #line 4806 "cs-parser.jay" { LocalVariableReference v = (LocalVariableReference) yyVals[-1+yyTop]; Location l = (Location) yyVals[-8+yyTop]; if (v != null) { Foreach f = new Foreach ((Expression) yyVals[-6+yyTop], v, (Expression) yyVals[-3+yyTop], (Statement) yyVals[0+yyTop], l); current_block.AddStatement (f); } yyVal = end_block (lexer.Location); } break; case 764: #line 4830 "cs-parser.jay" { yyVal = new Break ((Location) yyVals[-1+yyTop]); } break; case 765: #line 4837 "cs-parser.jay" { yyVal = new Continue ((Location) yyVals[-1+yyTop]); } break; case 766: #line 4844 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, lt.Location); } break; case 767: #line 4849 "cs-parser.jay" { yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], (Location) yyVals[-3+yyTop]); } break; case 768: #line 4853 "cs-parser.jay" { yyVal = new GotoDefault ((Location) yyVals[-2+yyTop]); } break; case 769: #line 4860 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], (Location) yyVals[-2+yyTop]); } break; case 770: #line 4867 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], (Location) yyVals[-2+yyTop]); } break; case 771: #line 4874 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; if (s != "yield"){ Report.Error (1003, lt.Location, "; expected"); yyVal = null; } if (RootContext.Version == LanguageVersion.ISO_1){ Report.FeatureIsNotAvailable (lt.Location, "yield statement"); yyVal = null; } current_block.Toplevel.IsIterator = true; yyVal = new Yield ((Expression) yyVals[-1+yyTop], lt.Location); } break; case 772: #line 4889 "cs-parser.jay" { Report.Error (1627, (Location) yyVals[-1+yyTop], "Expression expected after yield return"); yyVal = null; } break; case 773: #line 4894 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; if (s != "yield"){ Report.Error (1003, lt.Location, "; expected"); yyVal = null; } if (RootContext.Version == LanguageVersion.ISO_1){ Report.FeatureIsNotAvailable (lt.Location, "yield statement"); yyVal = null; } current_block.Toplevel.IsIterator = true; yyVal = new YieldBreak (lt.Location); } break; case 776: #line 4918 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (ArrayList) yyVals[0+yyTop], (Location) yyVals[-2+yyTop], false); } break; case 777: #line 4922 "cs-parser.jay" { yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (Block) yyVals[0+yyTop], (Location) yyVals[-3+yyTop]); } break; case 778: #line 4926 "cs-parser.jay" { yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (ArrayList) yyVals[-2+yyTop], (Location) yyVals[-4+yyTop], true), (Block) yyVals[0+yyTop], (Location) yyVals[-4+yyTop]); } break; case 779: #line 4930 "cs-parser.jay" { Report.Error (1524, (Location) yyVals[-2+yyTop], "Expected catch or finally"); yyVal = null; } break; case 780: #line 4938 "cs-parser.jay" { ArrayList l = new ArrayList (4); l.Add (yyVals[0+yyTop]); yyVal = l; } break; case 781: #line 4945 "cs-parser.jay" { ArrayList l = (ArrayList) yyVals[-1+yyTop]; l.Add (yyVals[0+yyTop]); yyVal = l; } break; case 782: #line 4954 "cs-parser.jay" { yyVal = null; } break; case 784: #line 4960 "cs-parser.jay" { Expression type = null; if (yyVals[0+yyTop] != null) { DictionaryEntry cc = (DictionaryEntry) yyVals[0+yyTop]; type = (Expression) cc.Key; LocatedToken lt = (LocatedToken) cc.Value; if (lt != null){ ArrayList one = new ArrayList (4); one.Add (new VariableDeclaration (lt, null)); start_block (lexer.Location); current_block = declare_local_variables (type, one, lt.Location); } } } break; case 785: #line 4977 "cs-parser.jay" { Expression type = null; string id = null; Block var_block = null; if (yyVals[-2+yyTop] != null){ DictionaryEntry cc = (DictionaryEntry) yyVals[-2+yyTop]; type = (Expression) cc.Key; LocatedToken lt = (LocatedToken) cc.Value; if (lt != null){ id = lt.Value; var_block = end_block (lexer.Location); } } yyVal = new Catch (type, id, (Block) yyVals[0+yyTop], var_block, ((Block) yyVals[0+yyTop]).loc); } break; case 786: #line 4998 "cs-parser.jay" { yyVal = null; } break; case 788: #line 5004 "cs-parser.jay" { yyVal = new DictionaryEntry (yyVals[-2+yyTop], yyVals[-1+yyTop]); } break; case 789: #line 5008 "cs-parser.jay" { Report.Error (1015, GetLocation (yyVals[-1+yyTop]), "A type that derives from `System.Exception', `object', or `string' expected"); } break; case 790: #line 5015 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop]); } break; case 791: #line 5022 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop]); } break; case 792: #line 5029 "cs-parser.jay" { RootContext.CheckUnsafeOption ((Location) yyVals[0+yyTop]); } break; case 793: #line 5031 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop]); } break; case 794: #line 5040 "cs-parser.jay" { ArrayList list = (ArrayList) yyVals[-1+yyTop]; Expression type = (Expression) yyVals[-2+yyTop]; Location l = (Location) yyVals[-4+yyTop]; int top = list.Count; start_block (lexer.Location); for (int i = 0; i < top; i++){ Pair p = (Pair) list [i]; LocalInfo v; v = current_block.AddVariable (type, (string) p.First, l); if (v == null) continue; v.SetReadOnlyContext (LocalInfo.ReadOnlyContext.Fixed); v.Pinned = true; p.First = v; list [i] = p; } } break; case 795: #line 5063 "cs-parser.jay" { Location l = (Location) yyVals[-6+yyTop]; Fixed f = new Fixed ((Expression) yyVals[-4+yyTop], (ArrayList) yyVals[-3+yyTop], (Statement) yyVals[0+yyTop], l); current_block.AddStatement (f); yyVal = end_block (lexer.Location); } break; case 796: #line 5075 "cs-parser.jay" { ArrayList declarators = new ArrayList (4); if (yyVals[0+yyTop] != null) declarators.Add (yyVals[0+yyTop]); yyVal = declarators; } break; case 797: #line 5082 "cs-parser.jay" { ArrayList declarators = (ArrayList) yyVals[-2+yyTop]; if (yyVals[0+yyTop] != null) declarators.Add (yyVals[0+yyTop]); yyVal = declarators; } break; case 798: #line 5092 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-2+yyTop]; /* FIXME: keep location*/ yyVal = new Pair (lt.Value, yyVals[0+yyTop]); } break; case 799: #line 5098 "cs-parser.jay" { Report.Error (210, ((LocatedToken) yyVals[0+yyTop]).Location, "You must provide an initializer in a fixed or using statement declaration"); yyVal = null; } break; case 800: #line 5106 "cs-parser.jay" { /**/ } break; case 801: #line 5110 "cs-parser.jay" { yyVal = new Lock ((Expression) yyVals[-3+yyTop], (Statement) yyVals[0+yyTop], (Location) yyVals[-5+yyTop]); } break; case 802: #line 5117 "cs-parser.jay" { start_block (lexer.Location); Block assign_block = current_block; DictionaryEntry de = (DictionaryEntry) yyVals[-1+yyTop]; Location l = (Location) yyVals[-3+yyTop]; Expression type = (Expression) de.Key; ArrayList var_declarators = (ArrayList) de.Value; Stack vars = new Stack (); foreach (VariableDeclaration decl in var_declarators) { LocalInfo vi = current_block.AddVariable (type, decl.identifier, decl.Location); if (vi == null) continue; vi.SetReadOnlyContext (LocalInfo.ReadOnlyContext.Using); Expression expr = decl.expression_or_array_initializer; if (expr == null) { Report.Error (210, l, "You must provide an initializer in a fixed or using statement declaration"); continue; } LocalVariableReference var; /* Get a writable reference to this read-only variable.*/ var = new LocalVariableReference (assign_block, decl.identifier, l, vi, false); /* This is so that it is not a warning on using variables*/ vi.Used = true; vars.Push (new DictionaryEntry (var, expr)); /* Assign a = new SimpleAssign (var, expr, decl.Location);*/ /* assign_block.AddStatement (new StatementExpression (a));*/ } /* Note: the $$ here refers to the value of this code block and not of the LHS non-terminal.*/ /* It can be referred to as $5 below.*/ yyVal = vars; } break; case 803: #line 5159 "cs-parser.jay" { Statement stmt = (Statement) yyVals[0+yyTop]; Stack vars = (Stack) yyVals[-1+yyTop]; Location l = (Location) yyVals[-5+yyTop]; while (vars.Count > 0) { DictionaryEntry de = (DictionaryEntry) vars.Pop (); stmt = new Using ((Expression) de.Key, (Expression) de.Value, stmt, l); } current_block.AddStatement (stmt); yyVal = end_block (lexer.Location); } break; case 804: #line 5172 "cs-parser.jay" { start_block (lexer.Location); } break; case 805: #line 5176 "cs-parser.jay" { current_block.AddStatement (new UsingTemporary ((Expression) yyVals[-3+yyTop], (Statement) yyVals[0+yyTop], (Location) yyVals[-5+yyTop])); yyVal = end_block (lexer.Location); } break; case 806: #line 5187 "cs-parser.jay" { ++lexer.query_parsing; } break; case 807: #line 5191 "cs-parser.jay" { if (--lexer.query_parsing == 1) lexer.query_parsing = 0; Linq.AQueryClause from = yyVals[-2+yyTop] as Linq.AQueryClause; from.Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = from; current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } break; case 808: #line 5207 "cs-parser.jay" { yyVal = new Linq.QueryExpression (current_block, new Linq.QueryStartClause ((Expression)yyVals[0+yyTop])); current_block = new Linq.QueryBlock (current_block, (LocatedToken) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); } break; case 809: #line 5212 "cs-parser.jay" { yyVal = new Linq.QueryExpression (current_block, new Linq.Cast ((FullNamedExpression)yyVals[-3+yyTop], (Expression)yyVals[0+yyTop])); current_block = new Linq.QueryBlock (current_block, (LocatedToken) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop])); } break; case 810: #line 5220 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, GetLocation (yyVals[-2+yyTop])); } break; case 811: #line 5224 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-3+yyTop]; yyVal = new Linq.SelectMany (current_block.Toplevel, lt, (Expression)yyVals[0+yyTop]); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; ((Linq.QueryBlock)current_block).AddTransparentParameter (lt); } break; case 812: #line 5234 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, GetLocation (yyVals[-3+yyTop])); } break; case 813: #line 5238 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-3+yyTop]; FullNamedExpression type = (FullNamedExpression)yyVals[-4+yyTop]; yyVal = new Linq.SelectMany (current_block.Toplevel, lt, new Linq.Cast (type, (FullNamedExpression)yyVals[0+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; ((Linq.QueryBlock)current_block).AddTransparentParameter (lt); } break; case 814: #line 5253 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; if (yyVals[0+yyTop] != null) head.Next = (Linq.AQueryClause)yyVals[0+yyTop]; if (yyVals[-2+yyTop] != null) { Linq.AQueryClause clause = (Linq.AQueryClause)yyVals[-2+yyTop]; clause.Tail.Next = head; head = clause; } yyVal = head; } break; case 815: #line 5271 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 816: #line 5275 "cs-parser.jay" { yyVal = new Linq.Select (current_block.Toplevel, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } break; case 817: #line 5282 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push (current_block); } break; case 818: #line 5290 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 819: #line 5297 "cs-parser.jay" { yyVal = new Linq.GroupBy (current_block.Toplevel, (Expression)yyVals[-3+yyTop], (ToplevelBlock) linq_clause_blocks.Pop (), (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } break; case 823: #line 5313 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } break; case 829: #line 5329 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, GetLocation (yyVals[-2+yyTop])); } break; case 830: #line 5333 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-3+yyTop]; yyVal = new Linq.Let (current_block.Toplevel, current_container, lt, (Expression)yyVals[0+yyTop]); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; ((Linq.QueryBlock)current_block).AddTransparentParameter (lt); } break; case 831: #line 5346 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 832: #line 5350 "cs-parser.jay" { yyVal = new Linq.Where (current_block.Toplevel, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } break; case 833: #line 5360 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push (current_block); } break; case 834: #line 5368 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push (current_block); } break; case 835: #line 5376 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, (LocatedToken) yyVals[-7+yyTop], lexer.Location); } break; case 836: #line 5384 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-10+yyTop]; ToplevelBlock outer_selector = (ToplevelBlock) linq_clause_blocks.Pop (); ToplevelBlock block = (ToplevelBlock) linq_clause_blocks.Pop (); if (yyVals[0+yyTop] == null) { yyVal = new Linq.Join (block, lt, (Expression)yyVals[-7+yyTop], outer_selector, current_block.Toplevel, GetLocation (yyVals[-11+yyTop])); } else { yyVal = new Linq.GroupJoin (block, lt, (Expression)yyVals[-7+yyTop], outer_selector, current_block.Toplevel, (LocatedToken) yyVals[0+yyTop], GetLocation (yyVals[-11+yyTop])); } current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; if (yyVals[0+yyTop] == null) ((Linq.QueryBlock)current_block).AddTransparentParameter (lt); else ((Linq.QueryBlock)current_block).AddTransparentParameter ((LocatedToken) yyVals[0+yyTop]); } break; case 837: #line 5407 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push (current_block); } break; case 838: #line 5415 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, lexer.Location); linq_clause_blocks.Push (current_block); } break; case 839: #line 5423 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, (LocatedToken) yyVals[-7+yyTop], lexer.Location); } break; case 840: #line 5431 "cs-parser.jay" { LocatedToken lt = (LocatedToken) yyVals[-10+yyTop]; ToplevelBlock outer_selector = (ToplevelBlock) linq_clause_blocks.Pop (); ToplevelBlock block = (ToplevelBlock) linq_clause_blocks.Pop (); Linq.Cast cast = new Linq.Cast ((FullNamedExpression)yyVals[-11+yyTop], (Expression)yyVals[-7+yyTop]); if (yyVals[0+yyTop] == null) { yyVal = new Linq.Join (block, lt, cast, outer_selector, current_block.Toplevel, GetLocation (yyVals[-12+yyTop])); } else { yyVal = new Linq.GroupJoin (block, lt, cast, outer_selector, current_block.Toplevel, (LocatedToken) yyVals[0+yyTop], GetLocation (yyVals[-12+yyTop])); } current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; if (yyVals[0+yyTop] == null) ((Linq.QueryBlock)current_block).AddTransparentParameter (lt); else ((Linq.QueryBlock)current_block).AddTransparentParameter ((LocatedToken) yyVals[0+yyTop]); } break; case 842: #line 5458 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 843: #line 5465 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 844: #line 5469 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; yyVal = yyVals[0+yyTop]; } break; case 846: #line 5480 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 847: #line 5487 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } break; case 849: #line 5496 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 850: #line 5503 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[-1+yyTop]; yyVal = yyVals[-3+yyTop]; } break; case 851: #line 5511 "cs-parser.jay" { yyVal = new Linq.OrderByAscending (current_block.Toplevel, (Expression)yyVals[0+yyTop]); } break; case 852: #line 5515 "cs-parser.jay" { yyVal = new Linq.OrderByAscending (current_block.Toplevel, (Expression)yyVals[-1+yyTop]); } break; case 853: #line 5519 "cs-parser.jay" { yyVal = new Linq.OrderByDescending (current_block.Toplevel, (Expression)yyVals[-1+yyTop]); } break; case 854: #line 5526 "cs-parser.jay" { yyVal = new Linq.ThenByAscending (current_block.Toplevel, (Expression)yyVals[0+yyTop]); } break; case 855: #line 5530 "cs-parser.jay" { yyVal = new Linq.ThenByAscending (current_block.Toplevel, (Expression)yyVals[-1+yyTop]); } break; case 856: #line 5534 "cs-parser.jay" { yyVal = new Linq.ThenByDescending (current_block.Toplevel, (Expression)yyVals[-1+yyTop]); } break; case 858: #line 5543 "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*/ /* different identifiers.*/ current_block.SetEndLocation (GetLocation (yyVals[-1+yyTop])); current_block = current_block.Parent; current_block = new Linq.QueryBlock (current_block, (LocatedToken) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 859: #line 5554 "cs-parser.jay" { yyVal = new Linq.QueryExpression (current_block, (Linq.AQueryClause)yyVals[0+yyTop]); } break; case 862: #line 5575 "cs-parser.jay" { Evaluator.LoadAliases (current_namespace); push_current_class (new Class (current_namespace, current_class, new MemberName ("Class" + class_count++), Modifiers.PUBLIC, null), null); ArrayList baseclass_list = new ArrayList (); baseclass_list.Add (new TypeExpression (Evaluator.InteractiveBaseClass, lexer.Location)); current_container.AddBasesForPart (current_class, baseclass_list); /* (ref object retval)*/ Parameter [] mpar = new Parameter [1]; mpar [0] = new Parameter (TypeManager.system_object_expr, "$retval", Parameter.Modifier.REF, null, Location.Null); Parameters pars = new Parameters (mpar); current_local_parameters = pars; Method method = new Method ( current_class, null, /* generic*/ TypeManager.system_void_expr, Modifiers.PUBLIC | Modifiers.STATIC, new MemberName ("Host"), pars, null /* attributes */); oob_stack.Push (method); ++lexer.parsing_block; start_block (lexer.Location); } break; case 863: #line 5605 "cs-parser.jay" { --lexer.parsing_block; Method method = (Method) oob_stack.Pop (); method.Block = (ToplevelBlock) end_block(lexer.Location); current_container.AddMethod (method); --lexer.parsing_declaration; InteractiveResult = pop_current_class (); current_local_parameters = null; } break; case 864: #line 5616 "cs-parser.jay" { Evaluator.LoadAliases (current_namespace); } break; #line default } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; int yyM = yyLhs[yyN]; if (yyState == 0 && yyM == 0) { //t if (debug != null) debug.shift(0, yyFinal); yyState = yyFinal; if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value()); } if (yyToken == 0) { //t if (debug != null) debug.accept(yyVal); return yyVal; } goto continue_yyLoop; } if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState)) yyState = yyTable[yyN]; else yyState = yyDgoto[yyM]; //t if (debug != null) debug.shift(yyStates[yyTop], yyState); goto continue_yyLoop; continue_yyDiscarded: continue; // implements the named-loop continue: 'continue yyDiscarded' } continue_yyLoop: continue; // implements the named-loop continue: 'continue yyLoop' }