/** 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;
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;
if (debug != null)
debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value());
}
if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0)
&& (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) {
if (debug != null)
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));
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) {
if (debug != null)
debug.shift(yyStates[yyTop], yyTable[yyN], 3);
yyState = yyTable[yyN];
yyVal = yyLex.value();
goto continue_yyLoop;
}
if (debug != null) debug.pop(yyStates[yyTop]);
} while (-- yyTop >= 0);
if (debug != null) debug.reject();
throw new yyParser.yyException("irrecoverable syntax error");
case 3:
if (yyToken == 0) {
if (debug != null) debug.reject();
throw new yyParser.yyException("irrecoverable syntax error at end-of-file");
}
if (debug != null)
debug.discard(yyState, yyToken, yyname(yyToken),
yyLex.value());
yyToken = -1;
goto continue_yyDiscarded; // leave stack alone
}
}
int yyV = yyTop + 1-yyLen[yyN];
if (debug != null)
debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]);
yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
switch (yyN) {
case 1:
#line 391 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Lexer.check_incorrect_doc_comment ();
}
break;
case 2:
#line 394 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ Lexer.CompleteOnEOF = false; }
break;
case 6:
#line 401 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] != null) {
Attributes attrs = (Attributes) yyVals[0+yyTop];
report.Error (1730, attrs.Attrs [0].Location,
"Assembly and module attributes must precede all other elements except using clauses and extern alias declarations");
}
}
break;
case 7:
#line 409 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace);
}
break;
case 8:
#line 413 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyToken == Token.EXTERN_ALIAS)
report.Error (439, lexer.Location, "An extern alias declaration must precede all other elements");
else
Error_SyntaxError (yyToken);
}
break;
case 13:
#line 433 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
string s = lt.Value;
if (s != "alias"){
syntax_error (lt.Location, "`alias' expected");
} else if (lang_version == LanguageVersion.ISO_1) {
FeatureIsNotAvailable (lt.Location, "external alias");
} else {
lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
current_namespace.AddUsingExternalAlias (lt.Value, lt.Location, report);
}
}
break;
case 14:
#line 446 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
syntax_error (GetLocation (yyVals[-1+yyTop]), "`alias' expected"); /* TODO: better*/
}
break;
case 17:
#line 458 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 18:
#line 463 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 19:
#line 471 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") {
report.Warning (440, 2, lt.Location,
"An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead");
}
current_namespace.AddUsingAlias (lt.Value, (MemberName) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop]));
}
break;
case 20:
#line 481 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = null;
}
break;
case 21:
#line 489 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_namespace.AddUsing ((MemberName) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
}
break;
case 22:
#line 501 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Attributes attrs = (Attributes) yyVals[-2+yyTop];
MemberName name = (MemberName) yyVals[0+yyTop];
if (attrs != null) {
bool valid_global_attrs = true;
if ((current_namespace.DeclarationFound || current_namespace != file.NamespaceContainer)) {
valid_global_attrs = false;
} else {
foreach (var a in attrs.Attrs) {
if (a.ExplicitTarget == "assembly" || a.ExplicitTarget == "module")
continue;
valid_global_attrs = false;
break;
}
}
if (!valid_global_attrs)
report.Error (1671, name.Location, "A namespace declaration cannot have modifiers or attributes");
}
module.AddAttributes (attrs, current_namespace);
current_namespace = new NamespaceContainer (name, module, current_namespace, file);
module.AddTypesContainer (current_namespace);
current_class = current_namespace.SlaveDeclSpace;
current_container = current_class.PartialContainer;
}
break;
case 23:
#line 530 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 24:
#line 535 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] != null)
lbag.AddLocation (current_namespace, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
else
lbag.AddLocation (current_namespace, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-1+yyTop]));
current_namespace = current_namespace.Parent;
current_class = current_namespace.SlaveDeclSpace;
current_container = current_class.PartialContainer;
}
break;
case 25:
#line 549 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new MemberName (lt.Value, lt.Location);
}
break;
case 26:
#line 554 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location);
}
break;
case 27:
#line 559 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = new MemberName ("<invalid>", lexer.Location);
}
break;
case 32:
#line 577 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
MemberName name = (MemberName) yyVals[0+yyTop];
if (name.TypeArguments != null)
syntax_error (lexer.Location, "namespace name expected");
yyVal = name;
}
break;
case 41:
#line 609 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] != null) {
TypeContainer ds = (TypeContainer)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");
}
/* Here is a trick, for explicit attributes we don't know where they belong to until*/
/* we parse succeeding declaration hence we parse them as normal and re-attach them*/
/* when we know whether they are global (assembly:, module:) or local (type:).*/
if (ds.OptAttributes != null) {
ds.OptAttributes.ConvertGlobalAttributes (ds, current_namespace, !current_namespace.DeclarationFound && current_namespace == file.NamespaceContainer);
}
}
current_namespace.DeclarationFound = true;
}
break;
case 42:
#line 628 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_namespace.DeclarationFound = true;
}
break;
case 50:
#line 659 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var sect = (List<Attribute>) yyVals[0+yyTop];
yyVal = new Attributes (sect);
}
break;
case 51:
#line 664 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Attributes attrs = yyVals[-1+yyTop] as Attributes;
var sect = (List<Attribute>) yyVals[0+yyTop];
if (attrs == null)
attrs = new Attributes (sect);
else
attrs.AddAttributes (sect);
yyVal = attrs;
}
break;
case 52:
#line 677 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_attribute_section = true;
}
break;
case 53:
#line 681 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_attribute_section = false;
yyVal = yyVals[0+yyTop];
}
break;
case 54:
#line 689 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_attr_target = (string) yyVals[-1+yyTop];
if (current_attr_target == "assembly" || current_attr_target == "module") {
Lexer.check_incorrect_doc_comment ();
}
}
break;
case 55:
#line 696 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
/* when attribute target is invalid*/
if (current_attr_target == string.Empty)
yyVal = new List<Attribute> (0);
else
yyVal = yyVals[-2+yyTop];
current_attr_target = null;
lexer.parsing_attribute_section = false;
}
break;
case 56:
#line 707 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[-2+yyTop];
}
break;
case 57:
#line 714 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = CheckAttributeTarget (lt.Value, lt.Location);
}
break;
case 58:
#line 718 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = "event"; }
break;
case 59:
#line 719 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = "return"; }
break;
case 60:
#line 721 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyToken == Token.IDENTIFIER) {
Error_SyntaxError (yyToken);
yyVal = null;
} else {
string name = GetTokenName (yyToken);
yyVal = CheckAttributeTarget (name, GetLocation (yyVals[0+yyTop]));
}
}
break;
case 61:
#line 734 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new List<Attribute> (4) { (Attribute) yyVals[0+yyTop] };
}
break;
case 62:
#line 738 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var attrs = (List<Attribute>) yyVals[-2+yyTop];
attrs.Add ((Attribute) yyVals[0+yyTop]);
yyVal = attrs;
}
break;
case 63:
#line 748 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 64:
#line 752 "D:\GitHub\M\Marvin\mcs\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");
}
Arguments [] arguments = (Arguments []) yyVals[0+yyTop];
ATypeNameExpression expr = mname.GetTypeExpression ();
yyVal = new Attribute (current_attr_target, expr, arguments, mname.Location, lexer.IsEscapedIdentifier (mname));
}
break;
case 66:
#line 771 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 67:
#line 773 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[-1+yyTop];
}
break;
case 68:
#line 780 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 69:
#line 782 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments a = new Arguments (4);
a.Add ((Argument) yyVals[0+yyTop]);
yyVal = new Arguments [] { a, null };
}
break;
case 70:
#line 788 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments a = new Arguments (4);
a.Add ((Argument) yyVals[0+yyTop]);
yyVal = new Arguments [] { null, a };
}
break;
case 71:
#line 794 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments[] o = (Arguments[]) yyVals[-2+yyTop];
if (o [1] != null) {
report.Error (1016, ((Argument) yyVals[0+yyTop]).Expr.Location, "Named attribute arguments must appear after the positional arguments");
o [0] = new Arguments (4);
}
Arguments args = ((Arguments) o [0]);
if (args.Count > 0 && !(yyVals[0+yyTop] is NamedArgument) && args [args.Count - 1] is NamedArgument)
Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]);
args.Add ((Argument) yyVals[0+yyTop]);
}
break;
case 72:
#line 808 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments[] o = (Arguments[]) yyVals[-2+yyTop];
if (o [1] == null) {
o [1] = new Arguments (4);
}
((Arguments) o [1]).Add ((Argument) yyVals[0+yyTop]);
}
break;
case 73:
#line 820 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Argument ((Expression) yyVals[0+yyTop]);
}
break;
case 75:
#line 828 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 76:
#line 832 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
yyVal = new NamedArgument (lt.Value, lt.Location, (Expression) yyVals[0+yyTop]);
}
break;
case 77:
#line 841 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version <= LanguageVersion.V_3)
FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "named argument");
/* Avoid boxing in common case (no modifier)*/
var arg_mod = yyVals[-1+yyTop] == null ? Argument.AType.None : (Argument.AType) yyVals[-1+yyTop];
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
yyVal = new NamedArgument (lt.Value, lt.Location, (Expression) yyVals[0+yyTop], arg_mod);
}
break;
case 78:
#line 854 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 79:
#line 856 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Argument.AType.Ref;
}
break;
case 80:
#line 860 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Argument.AType.Out;
}
break;
case 83:
#line 872 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_modifiers = true;
}
break;
case 84:
#line 876 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_modifiers = true;
}
break;
case 97:
#line 895 "D:\GitHub\M\Marvin\mcs\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 98:
#line 908 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = true;
}
break;
case 99:
#line 912 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
MemberName name = MakeName ((MemberName) yyVals[0+yyTop]);
push_current_class (new Struct (current_namespace, current_class, name, (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]);
}
break;
case 100:
#line 918 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
current_class.SetParameterInfo ((List<Constraints>) yyVals[0+yyTop]);
if (doc_support)
current_container.DocComment = Lexer.consume_doc_comment ();
lbag.AddMember (current_class, mod_locations, GetLocation (yyVals[-5+yyTop]));
lexer.parsing_modifiers = true;
}
break;
case 101:
#line 931 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 102:
#line 936 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_declaration;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 103:
#line 942 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lbag.AppendToMember (current_class, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
yyVal = pop_current_class ();
}
break;
case 104:
#line 947 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
}
break;
case 105:
#line 956 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var mod = (Modifiers) yyVals[-3+yyTop];
current_field = new Const (current_class, (FullNamedExpression) yyVals[-1+yyTop], mod, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]);
current_container.AddConstant ((Const) current_field);
if ((mod & Modifiers.STATIC) != 0) {
report.Error (504, current_field.Location, "The constant `{0}' cannot be marked static", current_field.GetSignatureForError ());
}
yyVal = current_field;
}
break;
case 106:
#line 969 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
current_field.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
current_field.Initializer = (ConstInitializer) yyVals[-2+yyTop];
lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop]));
current_field = null;
}
break;
case 117:
#line 1003 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 118:
#line 1007 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SimpleName("dynamic",new Location(0,0));
}
break;
case 119:
#line 1013 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = false;
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
FullNamedExpression type = yyVals[0+yyTop] as FullNamedExpression;
if(type == null){
report.Error (10008, GetLocation (yyVals[0+yyTop]), "Could not resolve type expression");
}
current_field = new RoleField (current_class, type, Modifiers.PRIVATE | Modifiers.ROLE, new MemberName (lt.Value, lt.Location),null);
current_container.AddField (current_field);
yyVal = current_field;
if (doc_support) {
current_field.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[-1+yyTop]));
yyVal = current_field;
current_role = current_field;
current_field = null;
}
break;
case 120:
#line 1039 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_role = null;
}
break;
case 121:
#line 1045 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 122:
#line 1047 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
TypeParameter tparam = null;
var simple = current_role.TypeExpression as SimpleName;
if((simple != null && simple.Name != "dynamic") || (simple.Type != null && simple.Type.BuiltinType != BuiltinTypeSpec.Type.Dynamic)){
if(current_class.IsGeneric){
for(int i = 0; tparam == null && i<current_class.TypeParameters.Length;i++){
if(simple.Name == current_class.TypeParameters[i].Name){
tparam = current_class.TypeParameters[i];
}
}
}
if(tparam == null) {
report.Error (10009, GetLocation (yyVals[0+yyTop]), "Contracts can only be used for none typed roles");
}
}
var contractName = GetCurrentRoleContractName();
MemberName name = MakeName (new MemberName(contractName));
var inter = new Interface (current_namespace, current_class, name, Modifiers.PUBLIC, null);
if(tparam != null) {
tparam.Type.RolePlayerContract = inter.Type;
var ns = current_namespace.NS;
var className = new MemberName (ns.MemberName, new MemberName("><_extensionContainerFor" + GetCurrentRoleContractName(),GetLocation (yyVals[0+yyTop])));
current_extensionContainer = new Class (current_namespace,
current_class.Parent,
className,
Modifiers.PUBLIC | Modifiers.STATIC,
null);
}
RoleContracts.Add(contractName,inter);
push_current_class (inter, null);
lbag.AddMember (current_class, mod_locations, GetLocation (yyVals[0+yyTop]));
}
break;
case 123:
#line 1081 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_declaration;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
lbag.AppendToMember (current_class, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
if(current_extensionContainer != null) {
var cls = current_class;
var container = current_container;
current_container = current_class.Module;
push_current_class((Class)current_extensionContainer, null);
lbag.AddMember (current_extensionContainer, mod_locations, GetLocation (yyVals[-4+yyTop]));
lbag.AppendToMember (current_extensionContainer, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
pop_current_class();
current_class = cls;
current_container = container;
current_extensionContainer = null;
}
yyVal = pop_current_class ();
}
break;
case 124:
#line 1104 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 125:
#line 1108 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 126:
#line 1115 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
}
break;
case 127:
#line 1124 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 128:
#line 1128 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
yyVal = new ConstInitializer (current_field, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]));
}
break;
case 129:
#line 1133 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (145, lexer.Location, "A const field requires a value to be provided");
yyVal = null;
}
break;
case 132:
#line 1148 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = false;
FullNamedExpression type = (FullNamedExpression) yyVals[-1+yyTop];
if (type.Type != null && type.Type.Kind == MemberKind.Void)
report.Error (670, GetLocation (yyVals[-1+yyTop]), "Fields cannot have void type");
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
current_field = new Field (current_class, type, (Modifiers) yyVals[-2+yyTop], new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-3+yyTop]);
current_container.AddField (current_field);
yyVal = current_field;
}
break;
case 133:
#line 1163 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
current_field.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[0+yyTop]));
yyVal = current_field;
current_field = null;
}
break;
case 134:
#line 1176 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version < LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "fixed size buffers");
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
current_field = new FixedField (current_class, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop],
new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]);
current_container.AddField (current_field);
}
break;
case 135:
#line 1187 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
current_field.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
current_field.Initializer = (ConstInitializer) yyVals[-2+yyTop];
lbag.AddMember (current_field, mod_locations, GetLocation (yyVals[0+yyTop]));
yyVal = current_field;
current_field = null;
}
break;
case 136:
#line 1202 "D:\GitHub\M\Marvin\mcs\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 138:
#line 1210 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters;
start_block (GetLocation (yyVals[0+yyTop]));
}
break;
case 139:
#line 1216 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
current_field.Initializer = (Expression) yyVals[0+yyTop];
end_block (lexer.Location);
current_local_parameters = null;
}
break;
case 142:
#line 1231 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 143:
#line 1235 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 144:
#line 1242 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null);
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 145:
#line 1248 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 146:
#line 1252 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]));
}
break;
case 149:
#line 1267 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 150:
#line 1271 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 151:
#line 1278 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (ConstInitializer) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
}
break;
case 152:
#line 1287 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 153:
#line 1291 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
yyVal = new ConstInitializer (current_field, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 154:
#line 1297 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (443, lexer.Location, "Value or constant expected");
yyVal = null;
}
break;
case 157:
#line 1307 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
/* It has to be here for the parent to safely restore artificial block*/
Error_SyntaxError (yyToken);
yyVal = null;
}
break;
case 158:
#line 1316 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.NotAllowed;
/* Add it early in the case of body being eof for full ast*/
Method m = (Method) yyVals[0+yyTop];
async_block = (m.ModFlags & Modifiers.ASYNC) != 0;
current_container.AddMethod (m);
}
break;
case 159:
#line 1327 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Method method = (Method) yyVals[-2+yyTop];
method.Block = (ToplevelBlock) yyVals[0+yyTop];
async_block = false;
if (method.Block == null) {
method.ParameterInfo.CheckParameters (method);
if ((method.ModFlags & Modifiers.ASYNC) != 0) {
report.Error (1994, method.Location, "`{0}': The async modifier can only be used with methods that have a body",
method.GetSignatureForError ());
}
} else {
if (current_container.Kind == MemberKind.Interface) {
report.Error (531, method.Location, "`{0}': interface members cannot have a definition",
method.GetSignatureForError ());
}
}
current_local_parameters = null;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 160:
#line 1355 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.NotAllowed;
/* Add it early in the case of body being eof for full ast*/
Method m = (Method) yyVals[0+yyTop];
async_block = (m.ModFlags & Modifiers.ASYNC) != 0;
current_container.AddMethod (m);
}
break;
case 161:
#line 1365 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
try{
Method method = (Method) yyVals[-2+yyTop];
method.Block = (ToplevelBlock) yyVals[0+yyTop];
async_block = false;
if (method.Block == null) {
method.ParameterInfo.CheckParameters (method);
if ((method.ModFlags & Modifiers.ASYNC) != 0) {
report.Error (1994, method.Location, "`{0}': The async modifier can only be used with methods that have a body",
method.GetSignatureForError ());
}
} else {
if (current_container.Kind == MemberKind.Interface) {
report.Error (531, method.Location, "`{0}': interface members cannot have a definition",
method.GetSignatureForError ());
}
}
current_local_parameters = null;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
} finally {
isInteraction = false;
interactionInitializationDone = false;
}
}
break;
case 162:
#line 1399 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
isInteraction = true;
interactionInitializationDone = false;
}
break;
case 163:
#line 1405 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.All;
}
break;
case 164:
#line 1409 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = true;
}
break;
case 165:
#line 1413 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
valid_param_mod = 0;
MemberName name = (MemberName) yyVals[-6+yyTop];
current_local_parameters = (ParametersCompiled) yyVals[-3+yyTop];
GenericMethod generic = null;
if (name.TypeArguments != null) {
generic = new GenericMethod (current_namespace, current_class, name,
(FullNamedExpression) yyVals[-7+yyTop], current_local_parameters);
generic.SetParameterInfo ((List<Constraints>) yyVals[0+yyTop]);
} else if (yyVals[0+yyTop] != null) {
report.Error (80, GetLocation (yyVals[0+yyTop]),
"Constraints are not allowed on non-generic declarations");
}
var modifiers = Modifiers.PUBLIC;
var method = Method.Create (current_class, generic, (FullNamedExpression) yyVals[-7+yyTop], modifiers,
name, current_local_parameters, (Attributes) yyVals[-10+yyTop], yyVals[0+yyTop] != null);
if (doc_support)
method.DocComment = Lexer.consume_doc_comment ();
lbag.AddMember (method, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]));
yyVal = method;
}
break;
case 166:
#line 1444 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.NotAllowed;
isRoleMethod = true;
/* Add it early in the case of body being eof for full ast*/
var m = (Method) yyVals[0+yyTop];
async_block = (m.ModFlags & Modifiers.ASYNC) != 0;
current_container.AddMethod (m);
}
break;
case 167:
#line 1454 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var method = (Method) yyVals[-2+yyTop];
method.Block = (ToplevelBlock) yyVals[0+yyTop];
async_block = false;
if (method.Block == null) {
method.ParameterInfo.CheckParameters (method);
if ((method.ModFlags & Modifiers.ASYNC) != 0) {
report.Error (1994, method.Location, "`{0}': The async modifier can only be used with methods that have a body",
method.GetSignatureForError ());
}
} else {
if (current_container.Kind == MemberKind.Interface) {
report.Error (531, method.Location, "`{0}': interface members cannot have a definition",
method.GetSignatureForError ());
}
}
current_local_parameters = null;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
isRoleMethod = false;
}
break;
case 168:
#line 1483 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.PRIVATE | Modifiers.ROLE;
}
break;
case 169:
#line 1487 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
{
yyVal = Modifiers.PRIVATE | Modifiers.ROLE |Modifiers.ENTRY;
}
}
break;
case 170:
#line 1499 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
isInteraction = false;
valid_param_mod = ParameterModifierType.All;
}
break;
case 171:
#line 1504 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = true;
}
break;
case 172:
#line 1508 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
valid_param_mod = 0;
MemberName name = (MemberName) yyVals[-6+yyTop];
current_local_parameters = (ParametersCompiled) yyVals[-3+yyTop];
var tempParameters = current_local_parameters.FixedParameters;
var roleArgLocation = GetLocation (yyVals[-9+yyTop]);
var realParameters = new Parameter[tempParameters.Length+1];
realParameters[0] = new Self(GetCurrentRoleContractName(), current_role.TypeExpression,"self",Parameter.Modifier.NONE,null,roleArgLocation);
Array.Copy(tempParameters,0,realParameters,1,tempParameters.Length);
current_local_parameters = new ParametersCompiled(realParameters);
GenericMethod generic = null;
if (name.TypeArguments != null) {
generic = new GenericMethod (current_namespace, current_class, name,
(FullNamedExpression) yyVals[-7+yyTop], current_local_parameters);
generic.SetParameterInfo ((List<Constraints>) yyVals[0+yyTop]);
} else if (yyVals[0+yyTop] != null) {
report.Error (80, GetLocation (yyVals[0+yyTop]),
"Constraints are not allowed on non-generic declarations");
}
var typeExpr = (FullNamedExpression) yyVals[-7+yyTop];
var method = Method.Create (current_class, generic, typeExpr, (Modifiers)yyVals[-8+yyTop] | Modifiers.ROLE,
name, current_local_parameters, (Attributes) yyVals[-9+yyTop], yyVals[0+yyTop] != null);
lbag.AddMember (method, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]));
if (doc_support)
method.DocComment = Lexer.consume_doc_comment ();
yyVal = method;
}
break;
case 173:
#line 1547 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
isInteraction = false;
valid_param_mod = ParameterModifierType.All;
}
break;
case 174:
#line 1552 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = true;
}
break;
case 175:
#line 1556 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
valid_param_mod = 0;
MemberName name = (MemberName) yyVals[-6+yyTop];
current_local_parameters = (ParametersCompiled) yyVals[-3+yyTop];
GenericMethod generic = null;
if (name.TypeArguments != null) {
generic = new GenericMethod (current_namespace, current_class, name,
(FullNamedExpression) yyVals[-7+yyTop], current_local_parameters);
generic.SetParameterInfo ((List<Constraints>) yyVals[0+yyTop]);
} else if (yyVals[0+yyTop] != null) {
report.Error (80, GetLocation (yyVals[0+yyTop]),
"Constraints are not allowed on non-generic declarations");
}
var modifiers = (Modifiers) yyVals[-8+yyTop];
if((Modifiers.INTERACTION & modifiers) != 0){
modifiers = (modifiers ^ Modifiers.INTERACTION) | Modifiers.PUBLIC;
isInteraction = true;
} else {
isInteraction = false;
}
var method = Method.Create (current_class, generic, (FullNamedExpression) yyVals[-7+yyTop], modifiers,
name, current_local_parameters, (Attributes) yyVals[-9+yyTop], yyVals[0+yyTop] != null);
if(current_container.Kind == MemberKind.Interface && current_extensionContainer != null){
var parameters = new List<Parameter>();
var typeExpression = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[-9+yyTop]));
var parameter = new Parameter(typeExpression, "self", Parameter.Modifier.This, null, GetLocation(yyVals[-9+yyTop]));
parameters.Add(parameter);
parameters.Add(new Parameter(typeExpression, "ctx", Parameter.Modifier.NONE, null, GetLocation(yyVals[-9+yyTop])));
var clone = current_local_parameters.Clone();
for(var i = 0; i < clone.Count; i++){
parameters.Add(clone[i]);
}
var parameterTypeExpressions = parameters.Select(p=>p.TypeExpression).ToList();
var key = current_namespace.NS.Name + "," + name.Name + "," + string.Join(",",parameterTypeExpressions.Select(p => p.ToString()));
if(roleExtensionMethodDummies.Add(key)){
var returnType = (FullNamedExpression) yyVals[-7+yyTop];
var parametersCompiled = new ParametersCompiled(parameters.ToArray(),false);
var dummy = Method.Create (current_extensionContainer, generic, (FullNamedExpression) yyVals[-7+yyTop], Modifiers.PUBLIC | Modifiers.STATIC,
name, parametersCompiled, (Attributes) yyVals[-9+yyTop], yyVals[0+yyTop] != null);
var location = GetLocation(yyVals[-9+yyTop]);
var parameterName = new SimpleName("self", null, location);
var getTypeAccess = new MemberAccess(parameterName, "GetType", null, location);
var getTypeExpression = new Invocation(getTypeAccess, new Arguments(0));
var argCount = parameterTypeExpressions.Count-1;
var argumentsForGetMethod = new Arguments(2);
var stringLiteral = new StringLiteral(compiler.BuiltinTypes,name.Name,location);
argumentsForGetMethod.Add(new Argument(stringLiteral));
var typeName = new SimpleName("Type", null, location);
var types = parameterTypeExpressions.Skip(2)
.Select(t =>(Expression)(t.Type != null
? new TypeOf(t.Type,location)
: new TypeOf(t,location))
).ToList();
var initializer = new ArrayInitializer(types,location);
var parameterTypes = new ImplicitlyTypedArrayCreation (
new ComposedTypeSpecifier (1, location),
initializer,
location);
lbag.AddLocation (parameterTypes, location, location);
argumentsForGetMethod.Add(new Argument(parameterTypes));
var getMethodExpression = new Invocation(new MemberAccess(getTypeExpression,"GetMethod"),argumentsForGetMethod);
var argumentsForMethod = new Arguments(2);
var delegatedArguments = parameters.Skip(2).Select(p =>
(Expression)new Cast(
new TypeExpression(compiler.BuiltinTypes.Object,location),
new SimpleName(p.Name,location),
location)).ToList();
argumentsForMethod.Add(new Argument(new SimpleName("self", null, location)));
if(delegatedArguments.Any()){
initializer = new ArrayInitializer(delegatedArguments,location);
argumentsForMethod.Add(new Argument(new ImplicitlyTypedArrayCreation(
new ComposedTypeSpecifier (1, location),
initializer,
location)));
} else {
argumentsForMethod.Add(new Argument(new ArrayCreation(new TypeExpression(compiler.BuiltinTypes.Object,location),new ArrayInitializer(0,location))));
}
var invocation = new Invocation(new MemberAccess(getMethodExpression,"Invoke"),argumentsForMethod);
Statement statement = new StatementExpression(invocation);
var retType = (returnType as TypeExpression);
if(retType != null && retType.Type.Name != "Void"){
var cast = new Cast(returnType,invocation,location);
statement = new Return(cast,location);
}
dummy.Block = new ToplevelBlock (compiler, parametersCompiled, GetLocation(yyVals[-9+yyTop]));
/*var exceptionExpression = new New(new MemberName("InvalidOperationException",GetLocation($1)).GetTypeExpression(),new Arguments(0),GetLocation($1));*/
dummy.Block.AddStatement( statement);
lbag.AddMember(dummy,mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]));
((Class)current_extensionContainer).AddMethod(dummy);
}
}
if (doc_support)
method.DocComment = Lexer.consume_doc_comment ();
lbag.AddMember (method, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]));
yyVal = method;
}
break;
case 176:
#line 1666 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = true;
}
break;
case 177:
#line 1671 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = false;
valid_param_mod = ParameterModifierType.All;
}
break;
case 178:
#line 1676 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = true;
}
break;
case 179:
#line 1680 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
valid_param_mod = 0;
MemberName name = (MemberName) yyVals[-6+yyTop];
current_local_parameters = (ParametersCompiled) yyVals[-3+yyTop];
if (yyVals[-1+yyTop] != null && name.TypeArguments == null)
report.Error (80, lexer.Location,
"Constraints are not allowed on non-generic declarations");
GenericMethod generic = null;
if (name.TypeArguments != null) {
generic = new GenericMethod (current_namespace, current_class, name,
new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-8+yyTop])),
current_local_parameters);
generic.SetParameterInfo ((List<Constraints>) yyVals[-1+yyTop]);
}
var modifiers = (Modifiers) yyVals[-10+yyTop];
modifiers |= Modifiers.PARTIAL;
var method = Method.Create (current_class, generic, new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-8+yyTop])),
modifiers, name, current_local_parameters, (Attributes) yyVals[-11+yyTop], yyVals[-1+yyTop] != null);
if (doc_support)
method.DocComment = Lexer.consume_doc_comment ();
StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[-9+yyTop]));
lbag.AddMember (method, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]));
yyVal = method;
}
break;
case 180:
#line 1717 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
MemberName name = (MemberName) yyVals[-3+yyTop];
report.Error (1585, name.Location,
"Member modifier `{0}' must precede the member type and name", ModifiersExtensions.Name ((Modifiers) yyVals[-4+yyTop]));
var method = Method.Create (current_class, null, (FullNamedExpression) yyVals[-5+yyTop],
0, name, (ParametersCompiled) yyVals[-1+yyTop], (Attributes) yyVals[-7+yyTop], false);
current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop];
if (doc_support)
method.DocComment = Lexer.consume_doc_comment ();
yyVal = method;
}
break;
case 182:
#line 1736 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 183:
#line 1740 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = ParametersCompiled.EmptyReadOnlyParameters; }
break;
case 185:
#line 1746 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var pars_list = (List<Parameter>) yyVals[0+yyTop];
yyVal = new ParametersCompiled (pars_list.ToArray ());
}
break;
case 186:
#line 1751 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var pars_list = (List<Parameter>) yyVals[-2+yyTop];
pars_list.Add ((Parameter) yyVals[0+yyTop]);
yyVal = new ParametersCompiled (pars_list.ToArray ());
}
break;
case 187:
#line 1758 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var pars_list = (List<Parameter>) yyVals[-2+yyTop];
pars_list.Add (new ArglistParameter (GetLocation (yyVals[0+yyTop])));
yyVal = new ParametersCompiled (pars_list.ToArray (), true);
}
break;
case 188:
#line 1764 "D:\GitHub\M\Marvin\mcs\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 = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[-2+yyTop] } );
}
break;
case 189:
#line 1771 "D:\GitHub\M\Marvin\mcs\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");
var pars_list = (List<Parameter>) yyVals[-4+yyTop];
pars_list.Add (new ArglistParameter (GetLocation (yyVals[-2+yyTop])));
yyVal = new ParametersCompiled (pars_list.ToArray (), true);
}
break;
case 190:
#line 1781 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list");
yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[-2+yyTop])) }, true);
}
break;
case 191:
#line 1787 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list");
var pars_list = (List<Parameter>) yyVals[-4+yyTop];
pars_list.Add (new ArglistParameter (GetLocation (yyVals[-2+yyTop])));
yyVal = new ParametersCompiled (pars_list.ToArray (), true);
}
break;
case 192:
#line 1796 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } );
}
break;
case 193:
#line 1800 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true);
}
break;
case 194:
#line 1804 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = ParametersCompiled.EmptyReadOnlyParameters;
}
break;
case 195:
#line 1812 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
parameters_bucket.Clear ();
Parameter p = (Parameter) yyVals[0+yyTop];
parameters_bucket.Add (p);
default_parameter_used = p.HasDefaultValue;
yyVal = parameters_bucket;
}
break;
case 196:
#line 1821 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var pars = (List<Parameter>) 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");
else if (!p.HasDefaultValue && default_parameter_used)
report.Error (1737, p.Location, "Optional parameter cannot precede required parameters");
default_parameter_used |= p.HasDefaultValue;
pars.Add (p);
lbag.AddLocation (p, GetLocation (yyVals[-1+yyTop]));
}
yyVal = yyVals[-2+yyTop];
}
break;
case 197:
#line 1845 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], lt.Location);
}
break;
case 198:
#line 1853 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name");
yyVal = new Parameter ((FullNamedExpression) yyVals[-3+yyTop], lt.Value, (Parameter.Modifier) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop], lt.Location);
}
break;
case 199:
#line 1862 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
Location l = GetLocation (yyVals[0+yyTop]);
yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], null, (Parameter.Modifier) yyVals[-2+yyTop], (Attributes) yyVals[-3+yyTop], l);
}
break;
case 200:
#line 1872 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 201:
#line 1876 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
if (lang_version <= LanguageVersion.V_3) {
FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "optional parameter");
}
Parameter.Modifier mod = (Parameter.Modifier) yyVals[-5+yyTop];
if (mod != Parameter.Modifier.NONE) {
switch (mod) {
case Parameter.Modifier.REF:
case Parameter.Modifier.OUT:
report.Error (1741, GetLocation (yyVals[-5+yyTop]), "Cannot specify a default value for the `{0}' parameter",
Parameter.GetModifierSignature (mod));
break;
case Parameter.Modifier.This:
report.Error (1743, GetLocation (yyVals[-5+yyTop]), "Cannot specify a default value for the `{0}' parameter",
Parameter.GetModifierSignature (mod));
break;
default:
throw new NotImplementedException (mod.ToString ());
}
mod = Parameter.Modifier.NONE;
}
if ((valid_param_mod & ParameterModifierType.DefaultValue) == 0)
report.Error (1065, GetLocation (yyVals[-2+yyTop]), "Optional parameter is not valid in this context");
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
yyVal = new Parameter ((FullNamedExpression) yyVals[-4+yyTop], lt.Value, mod, (Attributes) yyVals[-6+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
if (yyVals[0+yyTop] != null)
((Parameter) yyVal).DefaultValue = new DefaultParameterValueExpression ((Expression) yyVals[0+yyTop]);
}
break;
case 202:
#line 1915 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Parameter.Modifier.NONE; }
break;
case 204:
#line 1921 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 205:
#line 1925 "D:\GitHub\M\Marvin\mcs\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 206:
#line 1949 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if ((valid_param_mod & ParameterModifierType.Ref) == 0)
Error_ParameterModifierNotValid ("ref", GetLocation (yyVals[0+yyTop]));
yyVal = Parameter.Modifier.REF;
}
break;
case 207:
#line 1956 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if ((valid_param_mod & ParameterModifierType.Out) == 0)
Error_ParameterModifierNotValid ("out", GetLocation (yyVals[0+yyTop]));
yyVal = Parameter.Modifier.OUT;
}
break;
case 208:
#line 1963 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if ((valid_param_mod & ParameterModifierType.This) == 0)
Error_ParameterModifierNotValid ("this", GetLocation (yyVals[0+yyTop]));
if (lang_version <= LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "extension methods");
yyVal = Parameter.Modifier.This;
}
break;
case 209:
#line 1976 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Attributes) yyVals[-3+yyTop], lt.Location);
}
break;
case 210:
#line 1981 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (1751, GetLocation (yyVals[-4+yyTop]), "Cannot specify a default value for a parameter array");
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
yyVal = new ParamsParameter ((FullNamedExpression) yyVals[-3+yyTop], lt.Value, (Attributes) yyVals[-5+yyTop], lt.Location);
}
break;
case 211:
#line 1988 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = null;
}
break;
case 212:
#line 1996 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if ((valid_param_mod & ParameterModifierType.Params) == 0)
report.Error (1670, (GetLocation (yyVals[0+yyTop])), "The `params' modifier is not allowed in current context");
}
break;
case 213:
#line 2001 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Parameter.Modifier mod = (Parameter.Modifier)yyVals[0+yyTop];
if ((mod & Parameter.Modifier.This) != 0) {
report.Error (1104, GetLocation (yyVals[-1+yyTop]), "The parameter modifiers `this' and `params' cannot be used altogether");
} else {
report.Error (1611, GetLocation (yyVals[-1+yyTop]), "The params parameter cannot be declared as ref or out");
}
}
break;
case 214:
#line 2010 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS);
}
break;
case 215:
#line 2017 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if ((valid_param_mod & ParameterModifierType.Arglist) == 0)
report.Error (1669, GetLocation (yyVals[0+yyTop]), "__arglist is not valid in this context");
}
break;
case 216:
#line 2028 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
tmpComment = Lexer.consume_doc_comment ();
}
break;
case 217:
#line 2033 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var type = (FullNamedExpression) yyVals[-3+yyTop];
current_property = new Property (current_class, type, (Modifiers) yyVals[-4+yyTop],
(MemberName) yyVals[-2+yyTop], (Attributes) yyVals[-5+yyTop]);
if (type.Type != null && type.Type.Kind == MemberKind.Void)
report.Error (547, GetLocation (yyVals[-3+yyTop]), "`{0}': property or indexer cannot have void type", current_property.GetSignatureForError ());
current_container.AddProperty ((Property)current_property);
lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[0+yyTop]));
lexer.PropertyParsing = true;
}
break;
case 218:
#line 2047 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.PropertyParsing = false;
if (doc_support)
current_property.DocComment = ConsumeStoredComment ();
}
break;
case 219:
#line 2054 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lbag.AppendToMember (current_property, GetLocation (yyVals[0+yyTop]));
current_property = null;
}
break;
case 220:
#line 2064 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue;
}
break;
case 221:
#line 2068 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
var type = (FullNamedExpression) yyVals[-6+yyTop];
Indexer indexer = new Indexer (current_class, type, (MemberName) yyVals[-5+yyTop], (Modifiers) yyVals[-7+yyTop], (ParametersCompiled) yyVals[-2+yyTop], (Attributes) yyVals[-8+yyTop]);
current_property = indexer;
current_container.AddIndexer (indexer);
lbag.AddMember (current_property, mod_locations, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
if (type.Type != null && type.Type.Kind == MemberKind.Void)
report.Error (620, GetLocation (yyVals[-6+yyTop]), "`{0}': indexer return type cannot be `void'", indexer.GetSignatureForError ());
if (indexer.ParameterInfo.IsEmpty) {
report.Error (1551, GetLocation (yyVals[-4+yyTop]), "Indexers must have at least one parameter");
}
if (doc_support) {
tmpComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
lexer.PropertyParsing = true;
}
break;
case 222:
#line 2093 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.PropertyParsing = false;
}
break;
case 223:
#line 2097 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (current_property.AccessorFirst != null && current_property.AccessorFirst.Block == null)
((Indexer) current_property).ParameterInfo.CheckParameters (current_property);
if (doc_support)
current_property.DocComment = ConsumeStoredComment ();
lbag.AppendToMember (current_property, GetLocation (yyVals[-1+yyTop]));
current_property = null;
}
break;
case 228:
#line 2116 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyToken == Token.CLOSE_BRACE) {
report.Error (548, lexer.Location, "`{0}': property or indexer must have at least one accessor", current_property.GetSignatureForError ());
} 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");
}
}
break;
case 229:
#line 2130 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) {
FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties");
}
if (current_property.Get != null) {
report.Error (1007, GetLocation (yyVals[0+yyTop]), "Property accessor already defined");
}
if (current_property is Indexer) {
current_property.Get = new Indexer.GetIndexerMethod (current_property, (Modifiers) yyVals[-1+yyTop], ((Indexer)current_property).ParameterInfo.Clone (),
(Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop]));
} else {
current_property.Get = new Property.GetMethod (current_property,
(Modifiers) yyVals[-1+yyTop], (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop]));
}
current_local_parameters = current_property.Get.ParameterInfo;
lbag.AddMember (current_property.Get, mod_locations);
lexer.PropertyParsing = false;
}
break;
case 230:
#line 2152 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] != null) {
current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop];
if (current_container.Kind == MemberKind.Interface) {
report.Error (531, current_property.Get.Block.StartLocation,
"`{0}': interface members cannot have a definition", current_property.Get.GetSignatureForError ());
}
}
current_local_parameters = null;
lexer.PropertyParsing = true;
if (doc_support)
if (Lexer.doc_state == XmlCommentState.Error)
Lexer.doc_state = XmlCommentState.NotAllowed;
}
break;
case 231:
#line 2173 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) {
FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties");
}
if (current_property.Set != null) {
report.Error (1007, GetLocation (yyVals[0+yyTop]), "Property accessor already defined");
}
if (current_property is Indexer) {
current_property.Set = new Indexer.SetIndexerMethod (current_property, (Modifiers) yyVals[-1+yyTop],
ParametersCompiled.MergeGenerated (compiler,
((Indexer)current_property).ParameterInfo, true, new Parameter (
current_property.TypeExpression, "value", Parameter.Modifier.NONE, null, GetLocation (yyVals[0+yyTop])),
null),
(Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop]));
} else {
current_property.Set = new Property.SetMethod (current_property, (Modifiers) yyVals[-1+yyTop],
ParametersCompiled.CreateImplicitParameter (current_property.TypeExpression, GetLocation (yyVals[0+yyTop])),
(Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop]));
}
current_local_parameters = current_property.Set.ParameterInfo;
lbag.AddMember (current_property.Set, mod_locations);
lexer.PropertyParsing = false;
}
break;
case 232:
#line 2200 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] != null) {
current_property.Set.Block = (ToplevelBlock) yyVals[0+yyTop];
if (current_container.Kind == MemberKind.Interface) {
report.Error (531, current_property.Set.Block.StartLocation,
"`{0}': interface members cannot have a definition", current_property.Set.GetSignatureForError ());
}
}
current_local_parameters = null;
lexer.PropertyParsing = true;
if (doc_support
&& Lexer.doc_state == XmlCommentState.Error)
Lexer.doc_state = XmlCommentState.NotAllowed;
}
break;
case 234:
#line 2222 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
/* TODO: lbag*/
yyVal = null;
}
break;
case 235:
#line 2227 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (1043, yyToken, "Invalid accessor body");
yyVal = null;
}
break;
case 236:
#line 2238 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = true;
}
break;
case 237:
#line 2242 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
MemberName name = MakeName ((MemberName) yyVals[0+yyTop]);
push_current_class (new Interface (current_namespace, current_class, name, (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]), yyVals[-3+yyTop]);
lbag.AddMember (current_class, mod_locations, GetLocation (yyVals[-2+yyTop]));
}
break;
case 238:
#line 2249 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
current_class.SetParameterInfo ((List<Constraints>) yyVals[0+yyTop]);
if (doc_support) {
current_container.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
lexer.parsing_modifiers = true;
}
break;
case 239:
#line 2262 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_declaration;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 240:
#line 2268 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lbag.AppendToMember (current_class, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]));
yyVal = pop_current_class ();
}
break;
case 241:
#line 2273 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
}
break;
case 244:
#line 2285 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_modifiers = true;
}
break;
case 245:
#line 2289 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_modifiers = true;
}
break;
case 246:
#line 2296 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants");
}
break;
case 247:
#line 2300 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants");
}
break;
case 252:
#line 2308 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators");
}
break;
case 253:
#line 2312 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors");
}
break;
case 254:
#line 2316 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations");
}
break;
case 255:
#line 2323 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
}
break;
case 256:
#line 2326 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
OperatorDeclaration decl = (OperatorDeclaration) yyVals[-2+yyTop];
if (decl != null) {
Operator op = new Operator (
current_class, decl.optype, decl.ret_type, (Modifiers) yyVals[-3+yyTop],
current_local_parameters,
(ToplevelBlock) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop], decl.location);
if (op.Block == null)
op.ParameterInfo.CheckParameters (op);
if (doc_support) {
op.DocComment = tmpComment;
Lexer.doc_state = XmlCommentState.Allowed;
}
/* Note again, checking is done in semantic analysis*/
current_container.AddOperator (op);
lbag.AddMember (op, mod_locations, lbag.GetLocations (decl));
}
current_local_parameters = null;
}
break;
case 258:
#line 2354 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 260:
#line 2360 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (590, GetLocation (yyVals[0+yyTop]), "User-defined operators cannot return void");
yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop]));
}
break;
case 261:
#line 2368 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.DefaultValue;
}
break;
case 262:
#line 2372 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
Location loc = GetLocation (yyVals[-5+yyTop]);
Operator.OpType op = (Operator.OpType) yyVals[-4+yyTop];
current_local_parameters = (ParametersCompiled)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 (doc_support) {
tmpComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.NotAllowed;
}
yyVal = new OperatorDeclaration (op, (FullNamedExpression) yyVals[-6+yyTop], loc);
lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 264:
#line 2416 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.LogicalNot; }
break;
case 265:
#line 2417 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.OnesComplement; }
break;
case 266:
#line 2418 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Increment; }
break;
case 267:
#line 2419 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Decrement; }
break;
case 268:
#line 2420 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.True; }
break;
case 269:
#line 2421 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.False; }
break;
case 270:
#line 2423 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Addition; }
break;
case 271:
#line 2424 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Subtraction; }
break;
case 272:
#line 2426 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Multiply; }
break;
case 273:
#line 2427 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Division; }
break;
case 274:
#line 2428 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Modulus; }
break;
case 275:
#line 2429 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.BitwiseAnd; }
break;
case 276:
#line 2430 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.BitwiseOr; }
break;
case 277:
#line 2431 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.ExclusiveOr; }
break;
case 278:
#line 2432 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.LeftShift; }
break;
case 279:
#line 2433 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.RightShift; }
break;
case 280:
#line 2434 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Equality; }
break;
case 281:
#line 2435 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.Inequality; }
break;
case 282:
#line 2436 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.GreaterThan; }
break;
case 283:
#line 2437 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.LessThan; }
break;
case 284:
#line 2438 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.GreaterThanOrEqual; }
break;
case 285:
#line 2439 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = Operator.OpType.LessThanOrEqual; }
break;
case 286:
#line 2444 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.DefaultValue;
}
break;
case 287:
#line 2448 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
Location loc = GetLocation (yyVals[-5+yyTop]);
current_local_parameters = (ParametersCompiled)yyVals[-1+yyTop];
if (doc_support) {
tmpComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.NotAllowed;
}
yyVal = new OperatorDeclaration (Operator.OpType.Implicit, (FullNamedExpression) yyVals[-4+yyTop], loc);
lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 288:
#line 2463 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.DefaultValue;
}
break;
case 289:
#line 2467 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
Location loc = GetLocation (yyVals[-5+yyTop]);
current_local_parameters = (ParametersCompiled)yyVals[-1+yyTop];
if (doc_support) {
tmpComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.NotAllowed;
}
yyVal = new OperatorDeclaration (Operator.OpType.Explicit, (FullNamedExpression) yyVals[-4+yyTop], loc);
lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 290:
#line 2482 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters;
yyVal = new OperatorDeclaration (Operator.OpType.Implicit, null, GetLocation (yyVals[-1+yyTop]));
}
break;
case 291:
#line 2488 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters;
yyVal = new OperatorDeclaration (Operator.OpType.Explicit, null, GetLocation (yyVals[-1+yyTop]));
}
break;
case 292:
#line 2498 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Constructor c = (Constructor) yyVals[-1+yyTop];
c.Block = (ToplevelBlock) yyVals[0+yyTop];
if (doc_support)
c.DocComment = ConsumeStoredComment ();
current_container.AddConstructor (c);
current_local_parameters = null;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
current_method = null;
}
break;
case 293:
#line 2518 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
tmpComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
valid_param_mod = ParameterModifierType.All;
}
break;
case 294:
#line 2527 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop];
/**/
/* start block here, so possible anonymous methods inside*/
/* constructor initializer can get correct parent block*/
/**/
start_block (lexer.Location);
}
break;
case 295:
#line 2538 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-6+yyTop];
var mods = (Modifiers) 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);
current_method = c;
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.AccessibilityMask) != 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 ());
}
}
lbag.AddMember (c, mod_locations, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]));
yyVal = c;
}
break;
case 297:
#line 2569 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ current_block = null; yyVal = null; }
break;
case 300:
#line 2579 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 301:
#line 2583 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
yyVal = new ConstructorBaseInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 302:
#line 2589 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 303:
#line 2593 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
yyVal = new ConstructorThisInitializer ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 304:
#line 2599 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = null;
}
break;
case 305:
#line 2607 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
tmpComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.NotAllowed;
}
current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters;
}
break;
case 306:
#line 2616 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.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 != MemberKind.Class){
report.Error (575, lt.Location, "Only class types can contain destructor");
}
Destructor d = new Destructor (current_class, (Modifiers) yyVals[-6+yyTop],
ParametersCompiled.EmptyReadOnlyParameters, (Attributes) yyVals[-7+yyTop], lt.Location);
if (doc_support)
d.DocComment = ConsumeStoredComment ();
d.Block = (ToplevelBlock) yyVals[0+yyTop];
current_container.AddMethod (d);
lbag.AddMember (d, mod_locations, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[-1+yyTop]));
current_local_parameters = null;
}
break;
case 307:
#line 2641 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_event_field = new EventField (current_class, (FullNamedExpression) yyVals[-1+yyTop], (Modifiers) yyVals[-3+yyTop], (MemberName) yyVals[0+yyTop], (Attributes) yyVals[-4+yyTop]);
current_container.AddEvent (current_event_field);
if (current_event_field.MemberName.Left != null) {
report.Error (71, current_event_field.Location, "`{0}': An explicit interface implementation of an event must use property syntax",
current_event_field.GetSignatureForError ());
}
yyVal = current_event_field;
}
break;
case 308:
#line 2655 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
current_event_field.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
lbag.AddMember (current_event_field, mod_locations, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop]));
current_event_field = null;
}
break;
case 309:
#line 2668 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_event = new EventProperty (current_class, (FullNamedExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-4+yyTop], (MemberName) yyVals[-1+yyTop], (Attributes) yyVals[-5+yyTop]);
current_container.AddEvent (current_event);
lbag.AddMember (current_event, mod_locations, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop]));
lexer.EventParsing = true;
}
break;
case 310:
#line 2676 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (current_container.Kind == MemberKind.Interface)
report.Error (69, GetLocation (yyVals[-2+yyTop]), "Event in interface cannot have add or remove accessors");
lexer.EventParsing = false;
}
break;
case 311:
#line 2683 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
current_event.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
lbag.AppendToMember (current_event, GetLocation (yyVals[-1+yyTop]));
current_event = null;
current_local_parameters = null;
}
break;
case 313:
#line 2698 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 314:
#line 2702 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
current_event_field.Initializer = (Expression) yyVals[0+yyTop];
}
break;
case 317:
#line 2715 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 318:
#line 2719 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]);
}
break;
case 319:
#line 2726 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), null);
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 320:
#line 2732 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
}
break;
case 321:
#line 2736 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
yyVal = new FieldDeclarator (new SimpleMemberName (lt.Value, lt.Location), (Expression) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]));
}
break;
case 322:
#line 2745 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (current_container.Kind == MemberKind.Interface) {
report.Error (68, lexer.Location, "`{0}': event in interface cannot have an initializer",
current_event_field.GetSignatureForError ());
}
if ((current_event_field.ModFlags & Modifiers.ABSTRACT) != 0) {
report.Error (74, lexer.Location, "`{0}': abstract event cannot have an initializer",
current_event_field.GetSignatureForError ());
}
}
break;
case 323:
#line 2757 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 326:
#line 2766 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors",
current_event.GetSignatureForError ());
}
break;
case 327:
#line 2771 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors",
current_event.GetSignatureForError ());
}
break;
case 328:
#line 2776 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (1055, GetLocation (yyVals[0+yyTop]), "An add or remove accessor expected");
yyVal = null;
}
break;
case 329:
#line 2784 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] != ModifierNone) {
report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations");
}
current_event.Add = new EventProperty.AddDelegateMethod (current_event, (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop]));
current_local_parameters = current_event.Add.ParameterInfo;
lbag.AddMember (current_event.Add, mod_locations);
lexer.EventParsing = false;
}
break;
case 330:
#line 2796 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.EventParsing = true;
current_event.Add.Block = (ToplevelBlock) yyVals[0+yyTop];
if (current_container.Kind == MemberKind.Interface) {
report.Error (531, current_event.Add.Block.StartLocation,
"`{0}': interface members cannot have a definition", current_event.Add.GetSignatureForError ());
}
current_local_parameters = null;
}
break;
case 331:
#line 2812 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] != ModifierNone) {
report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations");
}
current_event.Remove = new EventProperty.RemoveDelegateMethod (current_event, (Attributes) yyVals[-2+yyTop], GetLocation (yyVals[0+yyTop]));
current_local_parameters = current_event.Remove.ParameterInfo;
lbag.AddMember (current_event.Remove, mod_locations);
lexer.EventParsing = false;
}
break;
case 332:
#line 2824 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.EventParsing = true;
current_event.Remove.Block = (ToplevelBlock) yyVals[0+yyTop];
if (current_container.Kind == MemberKind.Interface) {
report.Error (531, current_event.Remove.Block.StartLocation,
"`{0}': interface members cannot have a definition", current_event.Remove.GetSignatureForError ());
}
current_local_parameters = null;
}
break;
case 333:
#line 2840 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (73, lexer.Location, "An add or remove accessor must have a body");
yyVal = null;
}
break;
case 335:
#line 2852 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
enumTypeComment = Lexer.consume_doc_comment ();
}
break;
case 336:
#line 2857 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
MemberName name = (MemberName) yyVals[-3+yyTop];
if (name.IsGeneric) {
report.Error (1675, name.Location, "Enums cannot have type parameters");
}
push_current_class (new Enum (current_namespace, current_class, (TypeExpression) yyVals[-2+yyTop], (Modifiers) yyVals[-5+yyTop], MakeName (name), (Attributes) yyVals[-6+yyTop]), null);
}
break;
case 337:
#line 2869 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
/* here will be evaluated after CLOSE_BLACE is consumed.*/
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 338:
#line 2875 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support)
current_class.DocComment = enumTypeComment;
--lexer.parsing_declaration;
/* if (doc_support)*/
/* em.DocComment = ev.DocComment;*/
lbag.AddMember (current_class, mod_locations, GetLocation (yyVals[-9+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-1+yyTop]));
yyVal = pop_current_class ();
}
break;
case 340:
#line 2892 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var te = yyVals[0+yyTop] as TypeExpression;
if (te == null || !EnumSpec.IsValidUnderlyingType (te.Type)) {
Enum.Error_1008 (GetLocation (yyVals[0+yyTop]), report);
yyVal = null;
} else {
yyVal = yyVals[0+yyTop];
}
}
break;
case 341:
#line 2902 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_TypeExpected (GetLocation (yyVals[-1+yyTop]));
yyVal = null;
}
break;
case 344:
#line 2912 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lbag.AddLocation (yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop]));
}
break;
case 346:
#line 2920 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lbag.AddLocation (yyVals[-2+yyTop], GetLocation (yyVals[-1+yyTop]));
yyVal = yyVals[0+yyTop];
}
break;
case 347:
#line 2928 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var em = new EnumMember ((Enum) current_class, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-1+yyTop]);
((Enum) current_class).AddEnumMember (em);
if (doc_support) {
em.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
yyVal = em;
}
break;
case 348:
#line 2941 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
if (doc_support) {
tmpComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.NotAllowed;
}
}
break;
case 349:
#line 2949 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
var em = new EnumMember ((Enum) current_class, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-4+yyTop]);
em.Initializer = new ConstInitializer (em, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
((Enum) current_class).AddEnumMember (em);
if (doc_support)
em.DocComment = ConsumeStoredComment ();
yyVal = em;
}
break;
case 350:
#line 2970 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue;
}
break;
case 351:
#line 2974 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
MemberName name = MakeName ((MemberName) yyVals[-4+yyTop]);
ParametersCompiled p = (ParametersCompiled) yyVals[-1+yyTop];
Delegate del = new Delegate (current_namespace, current_class, (FullNamedExpression) yyVals[-5+yyTop],
(Modifiers) yyVals[-7+yyTop], name, p, (Attributes) yyVals[-8+yyTop]);
p.CheckParameters (del);
current_container.AddDelegate (del);
current_delegate = del;
lexer.ConstraintsParsing = true;
}
break;
case 352:
#line 2990 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
}
break;
case 353:
#line 2994 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (doc_support) {
current_delegate.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
current_delegate.SetParameterInfo ((List<Constraints>) yyVals[-2+yyTop]);
lbag.AddMember (current_delegate, mod_locations, GetLocation (yyVals[-10+yyTop]), GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[0+yyTop]));
yyVal = current_delegate;
current_delegate = null;
}
break;
case 355:
#line 3012 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version < LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types");
yyVal = ComposedTypeSpecifier.CreateNullable (GetLocation (yyVals[0+yyTop]));
}
break;
case 357:
#line 3023 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberName (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location);
}
break;
case 359:
#line 3034 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberName ((MemberName) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
}
break;
case 360:
#line 3043 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location);
}
break;
case 362:
#line 3055 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version < LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics");
yyVal = yyVals[-1+yyTop];
}
break;
case 363:
#line 3062 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_TypeExpected (lexer.Location);
yyVal = new TypeArguments ();
}
break;
case 364:
#line 3070 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
TypeArguments type_args = new TypeArguments ();
type_args.Add ((FullNamedExpression) yyVals[0+yyTop]);
yyVal = type_args;
}
break;
case 365:
#line 3076 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop];
type_args.Add ((FullNamedExpression) yyVals[0+yyTop]);
yyVal = type_args;
}
break;
case 366:
#line 3088 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = true;
}
break;
case 367:
#line 3092 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = false;
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
yyVal = new MemberName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location);
}
break;
case 368:
#line 3101 "D:\GitHub\M\Marvin\mcs\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 370:
#line 3112 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = false;
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location);
}
break;
case 371:
#line 3121 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = false;
yyVal = new MemberName (TypeContainer.DefaultIndexerName, GetLocation (yyVals[0+yyTop]));
}
break;
case 372:
#line 3126 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = false;
yyVal = new MemberName ((MemberName) yyVals[-1+yyTop], TypeContainer.DefaultIndexerName, null, GetLocation (yyVals[-1+yyTop]));
}
break;
case 373:
#line 3134 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
yyVal = new MemberName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 374:
#line 3140 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt1 = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
var lt2 = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
yyVal = new MemberName (lt1.Value, lt2.Value, (TypeArguments) yyVals[-1+yyTop], lt1.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 375:
#line 3148 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
yyVal = new MemberName ((MemberName) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 377:
#line 3158 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version < LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics");
yyVal = yyVals[-1+yyTop];
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 378:
#line 3169 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
TypeArguments type_args = new TypeArguments ();
type_args.Add ((FullNamedExpression)yyVals[0+yyTop]);
yyVal = type_args;
}
break;
case 379:
#line 3175 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop];
type_args.Add ((FullNamedExpression)yyVals[0+yyTop]);
yyVal = type_args;
lbag.AddLocation (yyVals[0+yyTop], GetLocation (yyVals[0+yyTop]));
}
break;
case 380:
#line 3185 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop];
yyVal = new TypeParameterName (lt.Value, (Attributes)yyVals[-2+yyTop], (Variance) yyVals[-1+yyTop], lt.Location);
}
break;
case 381:
#line 3190 "D:\GitHub\M\Marvin\mcs\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 383:
#line 3206 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop]));
}
break;
case 384:
#line 3213 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_generic_declaration = true;
}
break;
case 386:
#line 3224 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report);
yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop]));
}
break;
case 388:
#line 3233 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report);
yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop]));
}
break;
case 390:
#line 3242 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (1536, GetLocation (yyVals[0+yyTop]), "Invalid parameter type `void'");
yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop]));
}
break;
case 392:
#line 3251 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 393:
#line 3258 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
MemberName name = (MemberName) yyVals[-1+yyTop];
if (yyVals[0+yyTop] != null) {
yyVal = new ComposedCast (name.GetTypeExpression (), (ComposedTypeSpecifier) yyVals[0+yyTop]);
} else {
if (name.Left == null && name.Name == "var")
yyVal = new VarExpr (name.Location);
else
yyVal = name.GetTypeExpression ();
}
}
break;
case 394:
#line 3271 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ComposedCast (((MemberName) yyVals[-1+yyTop]).GetTypeExpression (), (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 395:
#line 3275 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] != null)
yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 396:
#line 3280 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 397:
#line 3284 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 398:
#line 3291 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var types = new List<FullNamedExpression> (2);
types.Add ((FullNamedExpression) yyVals[0+yyTop]);
yyVal = types;
}
break;
case 399:
#line 3297 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var types = (List<FullNamedExpression>) yyVals[-2+yyTop];
types.Add ((FullNamedExpression) yyVals[0+yyTop]);
yyVal = types;
}
break;
case 400:
#line 3306 "D:\GitHub\M\Marvin\mcs\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 401:
#line 3313 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_TypeExpected (lexer.Location);
yyVal = null;
}
break;
case 402:
#line 3324 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); }
break;
case 403:
#line 3325 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); }
break;
case 404:
#line 3326 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); }
break;
case 405:
#line 3327 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); }
break;
case 406:
#line 3328 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); }
break;
case 407:
#line 3329 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); }
break;
case 409:
#line 3334 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); }
break;
case 410:
#line 3335 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); }
break;
case 411:
#line 3336 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); }
break;
case 412:
#line 3337 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); }
break;
case 413:
#line 3338 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); }
break;
case 414:
#line 3339 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); }
break;
case 415:
#line 3340 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); }
break;
case 416:
#line 3341 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); }
break;
case 417:
#line 3342 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); }
break;
case 418:
#line 3352 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
checkForInteraction((Expression)yyVals[0+yyTop]);
}
break;
case 439:
#line 3382 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location);
}
break;
case 440:
#line 3386 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location);
}
break;
case 444:
#line 3396 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); }
break;
case 445:
#line 3400 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); }
break;
case 446:
#line 3401 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); }
break;
case 451:
#line 3427 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 452:
#line 3432 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]);
}
break;
case 453:
#line 3439 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
}
break;
case 454:
#line 3445 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
}
break;
case 455:
#line 3451 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
}
break;
case 456:
#line 3457 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location);
}
break;
case 457:
#line 3463 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop]));
}
break;
case 458:
#line 3466 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location);
}
break;
case 459:
#line 3471 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location);
}
break;
case 460:
#line 3474 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location);
}
break;
case 461:
#line 3482 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
isInteractionArgumentList = isInteraction;
}
break;
case 462:
#line 3486 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
isInteractionArgumentList = false;
}
break;
case 463:
#line 3490 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var instance = (Expression) yyVals[-5+yyTop];
var arguments = (Arguments) yyVals[-2+yyTop];
yyVal = new Invocation (instance,arguments);
lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
}
break;
case 464:
#line 3500 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 466:
#line 3506 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] == null) {
yyVal = CollectionOrObjectInitializers.Empty;
/* TODO: lbag*/
} else {
yyVal = new CollectionOrObjectInitializers ((List<Expression>) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
}
break;
case 467:
#line 3516 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CollectionOrObjectInitializers ((List<Expression>) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 468:
#line 3523 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 469:
#line 3525 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 470:
#line 3532 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var a = new List<Expression> ();
a.Add ((Expression) yyVals[0+yyTop]);
yyVal = a;
}
break;
case 471:
#line 3538 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var a = (List<Expression>)yyVals[-2+yyTop];
a.Add ((Expression) yyVals[0+yyTop]);
yyVal = a;
}
break;
case 472:
#line 3543 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = yyVals[-1+yyTop];
}
break;
case 473:
#line 3551 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
yyVal = new ElementInitializer (lt.Value, (Expression)yyVals[0+yyTop], lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 474:
#line 3557 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop]));
}
break;
case 475:
#line 3560 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName;
if (csn == null)
yyVal = new CollectionElementInitializer ((Expression)yyVals[-1+yyTop]);
else
yyVal = new CompletionElementInitializer (csn.Prefix, csn.Location);
}
break;
case 476:
#line 3568 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] == null)
yyVal = null;
else
yyVal = new CollectionElementInitializer ((List<Expression>)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
}
break;
case 477:
#line 3575 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty");
yyVal = null;
}
break;
case 480:
#line 3587 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 482:
#line 3593 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments list = new Arguments (4);
list.Add ((Argument) yyVals[0+yyTop]);
yyVal = list;
}
break;
case 483:
#line 3599 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments list = (Arguments) yyVals[-2+yyTop];
if (list [list.Count - 1] is NamedArgument)
Error_NamedArgumentExpected ((NamedArgument) list [list.Count - 1]);
list.Add ((Argument) yyVals[0+yyTop]);
yyVal = list;
}
break;
case 484:
#line 3608 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments list = (Arguments) yyVals[-2+yyTop];
NamedArgument a = (NamedArgument) yyVals[0+yyTop];
for (int i = 0; i < list.Count; ++i) {
NamedArgument na = list [i] as NamedArgument;
if (na != null && na.Name == a.Name)
report.Error (1740, na.Location, "Named argument `{0}' specified multiple times",
na.Name);
}
list.Add (a);
yyVal = list;
}
break;
case 485:
#line 3622 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (839, GetLocation (yyVals[0+yyTop]), "An argument is missing");
yyVal = yyVals[-1+yyTop];
}
break;
case 486:
#line 3627 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing");
yyVal = null;
}
break;
case 487:
#line 3635 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Argument ((Expression) yyVals[0+yyTop]);
}
break;
case 491:
#line 3648 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref);
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 492:
#line 3653 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out);
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 493:
#line 3658 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Argument (new Arglist ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 494:
#line 3663 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Argument (new Arglist (GetLocation (yyVals[-2+yyTop])));
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 496:
#line 3675 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 497:
#line 3683 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var list = new List<Expression> (4);
list.Add ((Expression) yyVals[0+yyTop]);
yyVal = list;
}
break;
case 498:
#line 3689 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var list = (List<Expression>) yyVals[-2+yyTop];
list.Add ((Expression) yyVals[0+yyTop]);
yyVal = list;
}
break;
case 499:
#line 3694 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = yyVals[-1+yyTop];
}
break;
case 500:
#line 3702 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments args = new Arguments (4);
args.Add ((Argument) yyVals[0+yyTop]);
yyVal = args;
}
break;
case 501:
#line 3708 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Arguments args = (Arguments) yyVals[-2+yyTop];
if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument))
Error_NamedArgumentExpected ((NamedArgument) args [args.Count - 1]);
args.Add ((Argument) yyVals[0+yyTop]);
yyVal = args;
}
break;
case 502:
#line 3720 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Argument ((Expression) yyVals[0+yyTop]);
}
break;
case 504:
#line 3728 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if(isRoleMethod) {
report.Error (10077, lexer.Location,
"Can't use this explicitly in role methods. Use self or role name to refer to the role");
}
yyVal = new This (GetLocation (yyVals[0+yyTop]));
}
break;
case 505:
#line 3739 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ElementAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 506:
#line 3744 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop]));
}
break;
case 507:
#line 3752 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop]));
}
break;
case 508:
#line 3759 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop]));
}
break;
case 509:
#line 3766 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] != null) {
if (lang_version <= LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-5+yyTop]), "object initializers");
yyVal = new NewInitialize ((FullNamedExpression) yyVals[-4+yyTop], (Arguments) yyVals[-2+yyTop], (CollectionOrObjectInitializers) yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop]));
} else {
yyVal = new New ((FullNamedExpression) yyVals[-4+yyTop], (Arguments) yyVals[-2+yyTop], GetLocation (yyVals[-5+yyTop]));
}
lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
}
break;
case 510:
#line 3779 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version <= LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers");
yyVal = new NewInitialize ((FullNamedExpression) yyVals[-1+yyTop], null, (CollectionOrObjectInitializers) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]));
}
break;
case 511:
#line 3791 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (List<Expression>) yyVals[-3+yyTop],
new ComposedTypeSpecifier (((List<Expression>) yyVals[-3+yyTop]).Count, GetLocation (yyVals[-4+yyTop])) {
Next = (ComposedTypeSpecifier) yyVals[-1+yyTop]
}, (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]));
}
break;
case 512:
#line 3799 "D:\GitHub\M\Marvin\mcs\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], (ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop]));
}
break;
case 513:
#line 3806 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version <= LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays");
yyVal = new ImplicitlyTypedArrayCreation ((ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]));
}
break;
case 514:
#line 3813 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (178, GetLocation (yyVals[-1+yyTop]), "Invalid rank specifier, expecting `,' or `]'");
yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], null, GetLocation (yyVals[-6+yyTop]));
}
break;
case 515:
#line 3818 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (1526, yyToken, "Unexpected symbol");
yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]));
}
break;
case 516:
#line 3825 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_type;
}
break;
case 517:
#line 3829 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_type;
yyVal = yyVals[0+yyTop];
}
break;
case 518:
#line 3837 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version <= LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types");
yyVal = new NewAnonymousType ((List<AnonymousTypeParameter>) yyVals[-1+yyTop], current_container, GetLocation (yyVals[-3+yyTop]));
/* TODO: lbag comma location*/
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 521:
#line 3854 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 523:
#line 3860 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var a = new List<AnonymousTypeParameter> (4);
a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]);
yyVal = a;
}
break;
case 524:
#line 3866 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var a = (List<AnonymousTypeParameter>) yyVals[-2+yyTop];
a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]);
yyVal = a;
}
break;
case 525:
#line 3875 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken)yyVals[-2+yyTop];
yyVal = new AnonymousTypeParameter ((Expression)yyVals[0+yyTop], lt.Value, lt.Location);
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 526:
#line 3881 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop];
yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location),
lt.Value, lt.Location);
}
break;
case 527:
#line 3887 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
MemberAccess ma = (MemberAccess) yyVals[0+yyTop];
yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location);
}
break;
case 528:
#line 3892 "D:\GitHub\M\Marvin\mcs\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");
yyVal = null;
}
break;
case 532:
#line 3907 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop];
yyVal = yyVals[-1+yyTop];
}
break;
case 533:
#line 3915 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 534:
#line 3920 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 535:
#line 3928 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = 2;
}
break;
case 536:
#line 3932 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = ((int) yyVals[-1+yyTop]) + 1;
}
break;
case 537:
#line 3939 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = null;
}
break;
case 538:
#line 3943 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 539:
#line 3950 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop]));
ai.VariableDeclaration = current_variable;
lbag.AddLocation (ai, GetLocation (yyVals[0+yyTop]));
yyVal = ai;
}
break;
case 540:
#line 3957 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var ai = new ArrayInitializer ((List<Expression>) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop]));
ai.VariableDeclaration = current_variable;
if (yyVals[-1+yyTop] != null) {
lbag.AddLocation (ai, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
} else {
lbag.AddLocation (ai, GetLocation (yyVals[0+yyTop]));
}
yyVal = ai;
}
break;
case 541:
#line 3971 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var list = new List<Expression> (4);
list.Add ((Expression) yyVals[0+yyTop]);
yyVal = list;
}
break;
case 542:
#line 3977 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var list = (List<Expression>) yyVals[-2+yyTop];
list.Add ((Expression) yyVals[0+yyTop]);
yyVal = list;
}
break;
case 543:
#line 3986 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.TypeOfParsing = true;
}
break;
case 544:
#line 3990 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.TypeOfParsing = false;
yyVal = new TypeOf ((FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 547:
#line 4001 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_TypeExpected (lexer.Location);
yyVal = null;
}
break;
case 548:
#line 4009 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new SimpleName (lt.Value, (int) yyVals[0+yyTop], lt.Location);
}
break;
case 549:
#line 4015 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (int) yyVals[0+yyTop], lt1.Location);
}
break;
case 550:
#line 4022 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new MemberAccess ((Expression) yyVals[-2+yyTop], lt.Value, lt.Location);
}
break;
case 551:
#line 4028 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (int) yyVals[0+yyTop], lt.Location);
}
break;
case 552:
#line 4034 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var te = ((MemberName) yyVals[-3+yyTop]).GetTypeExpression ();
if (te.HasTypeArguments)
Error_TypeExpected (GetLocation (yyVals[0+yyTop]));
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberAccess (te, lt.Value, (int) yyVals[0+yyTop], lt.Location);
}
break;
case 553:
#line 4046 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version < LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics");
yyVal = yyVals[0+yyTop];
}
break;
case 554:
#line 4056 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
if (lang_version == LanguageVersion.ISO_1)
FeatureIsNotAvailable (lt.Location, "namespace alias qualifier");
yyVal = lt;
}
break;
case 555:
#line 4067 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 556:
#line 4075 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 557:
#line 4083 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 558:
#line 4091 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberAccess (new Indirection ((Expression) yyVals[-3+yyTop], GetLocation (yyVals[-2+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location);
}
break;
case 559:
#line 4099 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop]));
}
break;
case 560:
#line 4103 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]);
}
break;
case 561:
#line 4107 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop]));
}
break;
case 562:
#line 4111 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]);
}
break;
case 563:
#line 4118 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = ParametersCompiled.Undefined;
}
break;
case 565:
#line 4126 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out;
}
break;
case 566:
#line 4130 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
yyVal = yyVals[-1+yyTop];
}
break;
case 567:
#line 4138 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version < LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression");
yyVal = new DefaultValueExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 569:
#line 4150 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 570:
#line 4154 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 571:
#line 4158 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 572:
#line 4163 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (!async_block) {
report.Error (1992, GetLocation (yyVals[-1+yyTop]),
"The `await' operator can only be used when its containing method or lambda expression is marked with the `async' modifier");
} else {
current_block.ParametersBlock.IsAsync = true;
}
yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 574:
#line 4182 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 575:
#line 4186 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 576:
#line 4190 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 577:
#line 4194 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 578:
#line 4198 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 579:
#line 4202 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 581:
#line 4210 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.Multiply,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 582:
#line 4215 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.Division,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 583:
#line 4220 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.Modulus,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 585:
#line 4229 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.Addition,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 586:
#line 4234 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 587:
#line 4238 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
/* Shift/Reduce conflict*/
yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 588:
#line 4243 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 589:
#line 4247 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 591:
#line 4255 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.LeftShift,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 592:
#line 4260 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.RightShift,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 594:
#line 4269 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.LessThan,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 595:
#line 4274 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.GreaterThan,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 596:
#line 4279 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.LessThanOrEqual,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 597:
#line 4284 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.GreaterThanOrEqual,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 599:
#line 4293 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.Equality,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 600:
#line 4298 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.Inequality,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 602:
#line 4307 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.BitwiseAnd,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 604:
#line 4316 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.ExclusiveOr,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 606:
#line 4325 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.BitwiseOr,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 608:
#line 4334 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.LogicalAnd,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 610:
#line 4343 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Binary (Binary.Operator.LogicalOr,
(Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 612:
#line 4352 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version < LanguageVersion.ISO_2)
FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator");
yyVal = new Nullable.NullCoalescingOperator ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 614:
#line 4363 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 615:
#line 4371 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var potentialRolePlayer = yyVals[0+yyTop] as Expression;
var memberExpression = yyVals[-2+yyTop] as MemberAccess;
var simpleNameForRole = memberExpression != null ? memberExpression.LeftExpression as SimpleName : yyVals[-2+yyTop] as SimpleName;
if(simpleNameForRole != null){
var role = FindField(simpleNameForRole.Name, GetLocation(yyVals[-2+yyTop]));
var isRole = role != null && role.IsRole;
if(current_method as Constructor != null){
/*might be assigning to a role*/
yyVal = new RoleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
} else if(isRole) {
report.Error (10000, GetLocation(potentialRolePlayer), "Roles can only be assigned to players in constructor");
} else{
yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
} else {
yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
}
break;
case 616:
#line 4391 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 617:
#line 4396 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 618:
#line 4401 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 619:
#line 4406 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 620:
#line 4411 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 621:
#line 4416 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 622:
#line 4421 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 623:
#line 4426 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 624:
#line 4431 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 625:
#line 4436 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new CompoundAssign (
Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 626:
#line 4444 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var pars = new List<Parameter> (4);
pars.Add ((Parameter) yyVals[0+yyTop]);
yyVal = pars;
}
break;
case 627:
#line 4451 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var pars = (List<Parameter>) 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 628:
#line 4465 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, (Parameter.Modifier) yyVals[-2+yyTop], null, lt.Location);
}
break;
case 629:
#line 4471 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new Parameter ((FullNamedExpression) yyVals[-1+yyTop], lt.Value, Parameter.Modifier.NONE, null, lt.Location);
}
break;
case 630:
#line 4477 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location);
}
break;
case 631:
#line 4484 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = ParametersCompiled.EmptyReadOnlyParameters; }
break;
case 632:
#line 4485 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var pars_list = (List<Parameter>) yyVals[0+yyTop];
yyVal = new ParametersCompiled (pars_list.ToArray ());
}
break;
case 635:
#line 4497 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_block (lexer.Location);
}
break;
case 636:
#line 4501 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Block b = end_block (lexer.Location);
b.AddStatement (new ContextualReturn ((Expression) yyVals[0+yyTop]));
yyVal = b;
}
break;
case 638:
#line 4511 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = EmptyExpression.Null;
}
break;
case 639:
#line 4519 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location);
start_anonymous (true, new ParametersCompiled (p), false, lt.Location);
}
break;
case 640:
#line 4525 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]));
}
break;
case 641:
#line 4530 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location);
start_anonymous (true, new ParametersCompiled (p), true, lt.Location);
}
break;
case 642:
#line 4536 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]));
}
break;
case 643:
#line 4541 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out;
}
break;
case 644:
#line 4545 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop]));
}
break;
case 645:
#line 4550 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop]));
}
break;
case 646:
#line 4555 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out;
}
break;
case 647:
#line 4559 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = 0;
start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop]));
}
break;
case 648:
#line 4564 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]);
lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop]));
}
break;
case 654:
#line 4580 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop]));
}
break;
case 655:
#line 4587 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new RefValueExpr ((Expression) yyVals[-3+yyTop], (FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 656:
#line 4592 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new RefTypeExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 657:
#line 4597 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new MakeRefExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 659:
#line 4609 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]);
}
break;
case 660:
#line 4622 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = true;
}
break;
case 661:
#line 4626 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
MemberName name = MakeName ((MemberName) yyVals[0+yyTop]);
Class c = new Class (current_namespace, current_class, name, (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]);
if (((c.ModFlags & Modifiers.STATIC) != 0) && lang_version == LanguageVersion.ISO_1) {
FeatureIsNotAvailable (c.Location, "static classes");
}
push_current_class (c, yyVals[-3+yyTop]);
}
break;
case 662:
#line 4637 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.ConstraintsParsing = false;
current_class.SetParameterInfo ((List<Constraints>) yyVals[0+yyTop]);
lbag.AddMember (current_class, mod_locations, GetLocation (yyVals[-5+yyTop]));
if (doc_support) {
current_container.DocComment = Lexer.consume_doc_comment ();
Lexer.doc_state = XmlCommentState.Allowed;
}
lexer.parsing_modifiers = true;
}
break;
case 663:
#line 4651 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_declaration;
if (doc_support)
Lexer.doc_state = XmlCommentState.Allowed;
}
break;
case 664:
#line 4657 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lbag.AppendToMember (current_class, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
yyVal = pop_current_class ();
}
break;
case 665:
#line 4665 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 666:
#line 4667 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = yyVals[0+yyTop]; }
break;
case 667:
#line 4672 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
mod_locations = null;
yyVal = ModifierNone;
lexer.parsing_modifiers = false;
}
break;
case 668:
#line 4678 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.parsing_modifiers = false;
}
break;
case 670:
#line 4686 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var m1 = (Modifiers) yyVals[-1+yyTop];
var m2 = (Modifiers) yyVals[0+yyTop];
if ((m1 & m2) != 0) {
report.Error (1004, lexer.Location - ModifiersExtensions.Name (m2).Length,
"Duplicate `{0}' modifier", ModifiersExtensions.Name (m2));
} else if ((m2 & Modifiers.AccessibilityMask) != 0 && (m1 & Modifiers.AccessibilityMask) != 0 &&
((m2 | m1 & Modifiers.AccessibilityMask) != (Modifiers.PROTECTED | Modifiers.INTERNAL))) {
report.Error (107, lexer.Location - ModifiersExtensions.Name (m2).Length,
"More than one protection modifier specified");
}
yyVal = m1 | m2;
}
break;
case 671:
#line 4705 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.NEW;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
if (current_container == module)
report.Error (1530, GetLocation (yyVals[0+yyTop]), "Keyword `new' is not allowed on namespace elements");
}
break;
case 672:
#line 4713 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.PUBLIC;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 673:
#line 4718 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.PROTECTED;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 674:
#line 4723 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.INTERNAL;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 675:
#line 4728 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.PRIVATE;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 676:
#line 4733 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.ABSTRACT;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 677:
#line 4738 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.SEALED;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 678:
#line 4743 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.STATIC;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 679:
#line 4748 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.READONLY;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 680:
#line 4753 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.VIRTUAL;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 681:
#line 4758 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.OVERRIDE;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 682:
#line 4763 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.EXTERN;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 683:
#line 4768 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.VOLATILE;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 684:
#line 4773 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.UNSAFE;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
if (!settings.Unsafe)
Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop]));
}
break;
case 685:
#line 4780 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Modifiers.ASYNC;
StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 687:
#line 4789 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_container.AddBasesForPart (current_class, (List<FullNamedExpression>) yyVals[0+yyTop]);
}
break;
case 689:
#line 4797 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 690:
#line 4801 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = null;
}
break;
case 691:
#line 4809 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var constraints = new List<Constraints> (1);
constraints.Add ((Constraints) yyVals[0+yyTop]);
yyVal = constraints;
}
break;
case 692:
#line 4815 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var constraints = (List<Constraints>) yyVals[-1+yyTop];
Constraints new_constraint = (Constraints)yyVals[0+yyTop];
foreach (Constraints c in constraints) {
if (new_constraint.TypeParameter.Value == c.TypeParameter.Value) {
report.Error (409, new_constraint.Location,
"A constraint clause has already been specified for type parameter `{0}'",
new_constraint.TypeParameter.Value);
}
}
constraints.Add (new_constraint);
yyVal = constraints;
}
break;
case 693:
#line 4834 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List<FullNamedExpression>) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop]));
}
break;
case 694:
#line 4842 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var constraints = new List<FullNamedExpression> (1);
constraints.Add ((FullNamedExpression) yyVals[0+yyTop]);
yyVal = constraints;
}
break;
case 695:
#line 4848 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var constraints = (List<FullNamedExpression>) yyVals[-2+yyTop];
var prev = constraints [constraints.Count - 1] as SpecialContraintExpr;
if (prev != null && (prev.Constraint & SpecialConstraint.Constructor) != 0) {
report.Error (401, GetLocation (yyVals[-1+yyTop]), "The `new()' constraint must be the last constraint specified");
}
prev = yyVals[0+yyTop] as SpecialContraintExpr;
if (prev != null) {
if ((prev.Constraint & (SpecialConstraint.Class | SpecialConstraint.Struct)) != 0) {
report.Error (449, prev.Location, "The `class' or `struct' constraint must be the first constraint specified");
} else {
prev = constraints [0] as SpecialContraintExpr;
if (prev != null && (prev.Constraint & SpecialConstraint.Struct) != 0) {
report.Error (451, GetLocation (yyVals[0+yyTop]), "The `new()' constraint cannot be used with the `struct' constraint");
}
}
}
constraints.Add ((FullNamedExpression) yyVals[0+yyTop]);
yyVal = constraints;
}
break;
case 696:
#line 4874 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is ComposedCast)
report.Error (706, GetLocation (yyVals[0+yyTop]), "Invalid constraint type `{0}'", ((ComposedCast)yyVals[0+yyTop]).GetSignatureForError ());
yyVal = yyVals[0+yyTop];
}
break;
case 697:
#line 4881 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation (yyVals[-2+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 698:
#line 4886 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop]));
}
break;
case 699:
#line 4890 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop]));
}
break;
case 700:
#line 4897 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Variance.None;
}
break;
case 701:
#line 4901 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (lang_version <= LanguageVersion.V_3)
FeatureIsNotAvailable (lexer.Location, "generic type variance");
yyVal = yyVals[0+yyTop];
}
break;
case 702:
#line 4911 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Variance.Covariant;
}
break;
case 703:
#line 4915 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = Variance.Contravariant;
}
break;
case 704:
#line 4935 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
start_block (GetLocation (yyVals[0+yyTop]));
}
break;
case 705:
#line 4940 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 706:
#line 4947 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
yyVal = end_block (GetLocation (yyVals[0+yyTop]));
}
break;
case 707:
#line 4952 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
yyVal = end_block (lexer.Location);
}
break;
case 708:
#line 4961 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
++lexer.parsing_block;
current_block.StartLocation = GetLocation (yyVals[0+yyTop]);
}
break;
case 709:
#line 4966 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
yyVal = end_block (GetLocation (yyVals[0+yyTop]));
}
break;
case 714:
#line 4984 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.AddStatement ((Statement) yyVals[0+yyTop]);
}
break;
case 715:
#line 4988 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.AddStatement ((Statement) yyVals[0+yyTop]);
}
break;
case 717:
#line 4993 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = null;
}
break;
case 720:
#line 5012 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.AddStatement ((Statement) yyVals[0+yyTop]);
}
break;
case 721:
#line 5016 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.AddStatement ((Statement) yyVals[0+yyTop]);
}
break;
case 750:
#line 5057 "D:\GitHub\M\Marvin\mcs\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 751:
#line 5062 "D:\GitHub\M\Marvin\mcs\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 752:
#line 5067 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop]));
}
break;
case 753:
#line 5075 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
/* Uses lexer.Location because semicolon location is not kept in quick mode*/
yyVal = new EmptyStatement (lexer.Location);
}
break;
case 754:
#line 5083 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location);
current_block.AddLabel (labeled);
current_block.AddStatement (labeled);
}
break;
case 757:
#line 5096 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] is VarExpr)
yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location);
yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 758:
#line 5112 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
/* Ok, the above "primary_expression" is there to get rid of*/
/* both reduce/reduce and shift/reduces in the grammar, it should*/
/* 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];
if (yyVals[0+yyTop] == null) {
SimpleName sn = expr as SimpleName;
if (sn != null && sn.Name == "var")
yyVal = new VarExpr (sn.Location);
else
yyVal = yyVals[-1+yyTop];
} else if (expr is ATypeNameExpression) {
yyVal = new ComposedCast ((ATypeNameExpression)expr, (ComposedTypeSpecifier) yyVals[0+yyTop]);
} else {
Error_ExpectingTypeName (expr);
yyVal = null;
}
}
break;
case 759:
#line 5142 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression;
if (expr != null) {
yyVal = new ComposedCast (expr, (ComposedTypeSpecifier) yyVals[0+yyTop]);
} else {
Error_ExpectingTypeName ((Expression)yyVals[-1+yyTop]);
yyVal = expr;
}
}
break;
case 760:
#line 5153 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] == null)
yyVal = yyVals[-1+yyTop];
else
yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 761:
#line 5160 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 762:
#line 5164 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]);
}
break;
case 763:
#line 5168 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report);
yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop]));
}
break;
case 765:
#line 5177 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop];
yyVal = yyVals[-1+yyTop];
}
break;
case 766:
#line 5185 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop]));
}
break;
case 768:
#line 5193 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (async_block) {
report.Error (4003, GetLocation (yyVals[0+yyTop]), "`await' cannot be used as an identifier within an async method or lambda expression");
yyVal = Tokenizer.LocatedToken.Create ("await", GetLocation (yyVals[0+yyTop]));
}
}
break;
case 769:
#line 5203 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var li = new LocalVariable (current_block, lt.Value, lt.Location);
current_block.AddLocalName (li);
current_variable = new BlockVariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li);
}
break;
case 770:
#line 5210 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = current_variable;
current_variable = null;
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 771:
#line 5216 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location);
current_block.AddLocalName (li);
current_variable = new BlockConstantDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li);
}
break;
case 772:
#line 5223 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = current_variable;
current_variable = null;
lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 774:
#line 5233 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_variable.Initializer = (Expression) yyVals[0+yyTop];
/* TODO: lbag*/
}
break;
case 775:
#line 5238 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyToken == Token.OPEN_BRACKET_EXPR) {
report.Error (650, lexer.Location,
"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");
} else {
Error_SyntaxError (yyToken);
}
}
break;
case 779:
#line 5256 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
foreach (var d in current_variable.Declarators) {
if (d.Initializer == null)
Error_MissingInitializer (d.Variable.Location);
}
}
break;
case 782:
#line 5271 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location);
var d = new BlockVariableDeclaration.Declarator (li, null);
current_variable.AddDeclarator (d);
current_block.AddLocalName (li);
lbag.AddLocation (d, GetLocation (yyVals[-1+yyTop]));
}
break;
case 783:
#line 5280 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location);
var d = new BlockVariableDeclaration.Declarator (li, (Expression) yyVals[0+yyTop]);
current_variable.AddDeclarator (d);
current_block.AddLocalName (li);
lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
}
break;
case 784:
#line 5292 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (145, lexer.Location, "A const field requires a value to be provided");
}
break;
case 785:
#line 5296 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_variable.Initializer = (Expression) yyVals[0+yyTop];
}
break;
case 790:
#line 5313 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location);
var d = new BlockVariableDeclaration.Declarator (li, (Expression) yyVals[0+yyTop]);
current_variable.AddDeclarator (d);
current_block.AddLocalName (li);
lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
}
break;
case 792:
#line 5326 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new StackAlloc ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 793:
#line 5331 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (1575, GetLocation (yyVals[-1+yyTop]), "A stackalloc expression requires [] after type");
yyVal = new StackAlloc ((Expression) yyVals[0+yyTop], null, GetLocation (yyVals[-1+yyTop]));
}
break;
case 794:
#line 5339 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[-1+yyTop];
lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 795:
#line 5343 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = yyVals[-1+yyTop]; }
break;
case 796:
#line 5347 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = yyVals[-1+yyTop]; }
break;
case 797:
#line 5348 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = yyVals[-1+yyTop]; }
break;
case 798:
#line 5357 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement;
if (s == null) {
Expression.Error_InvalidExpressionStatement (report, GetLocation (yyVals[0+yyTop]));
yyVal = new StatementExpression (EmptyExpressionStatement.Instance);
} else {
yyVal = new StatementExpression (s);
}
}
break;
case 799:
#line 5370 "D:\GitHub\M\Marvin\mcs\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 800:
#line 5378 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop]));
}
break;
case 803:
#line 5392 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
yyVal = new If ((BooleanExpression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
}
break;
case 804:
#line 5401 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new If ((BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-6+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
if (yyVals[-2+yyTop] is EmptyStatement)
Warning_EmptyStatement (GetLocation (yyVals[-2+yyTop]));
if (yyVals[0+yyTop] is EmptyStatement)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
}
break;
case 805:
#line 5414 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_block (GetLocation (yyVals[0+yyTop]));
}
break;
case 806:
#line 5418 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, (List<SwitchSection>) yyVals[-1+yyTop], GetLocation (yyVals[-7+yyTop]));
end_block (GetLocation (yyVals[0+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop]));
}
break;
case 807:
#line 5427 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Warning (1522, 1, current_block.StartLocation, "Empty switch block");
yyVal = new List<SwitchSection> ();
}
break;
case 809:
#line 5436 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var sections = new List<SwitchSection> (4);
sections.Add ((SwitchSection) yyVals[0+yyTop]);
yyVal = sections;
}
break;
case 810:
#line 5443 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var sections = (List<SwitchSection>) yyVals[-1+yyTop];
sections.Add ((SwitchSection) yyVals[0+yyTop]);
yyVal = sections;
}
break;
case 811:
#line 5450 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = new List<SwitchSection> ();
}
break;
case 812:
#line 5458 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = current_block.CreateSwitchBlock (lexer.Location);
}
break;
case 813:
#line 5462 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SwitchSection ((List<SwitchLabel>) yyVals[-2+yyTop], current_block);
}
break;
case 814:
#line 5469 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var labels = new List<SwitchLabel> (2);
labels.Add ((SwitchLabel) yyVals[0+yyTop]);
yyVal = labels;
}
break;
case 815:
#line 5476 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var labels = (List<SwitchLabel>) (yyVals[-1+yyTop]);
labels.Add ((SwitchLabel) yyVals[0+yyTop]);
yyVal = labels;
}
break;
case 816:
#line 5486 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 817:
#line 5491 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop]));
}
break;
case 822:
#line 5505 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
yyVal = new While ((BooleanExpression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
}
break;
case 823:
#line 5517 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 824:
#line 5525 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_block (GetLocation (yyVals[0+yyTop]));
current_block.IsCompilerGenerated = true;
}
break;
case 825:
#line 5530 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 826:
#line 5541 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
For f = new For ((Statement) yyVals[-6+yyTop], (BooleanExpression) yyVals[-4+yyTop], (Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-9+yyTop]));
current_block.AddStatement (f);
lbag.AddStatement (f, current_block.StartLocation, GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
yyVal = end_block (GetLocation (yyVals[-5+yyTop]));
}
break;
case 827:
#line 5553 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = end_block (current_block.StartLocation);
}
break;
case 828:
#line 5560 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new EmptyStatement (lexer.Location); }
break;
case 830:
#line 5566 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var li = new LocalVariable (current_block, lt.Value, lt.Location);
current_block.AddLocalName (li);
current_variable = new BlockVariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li);
}
break;
case 831:
#line 5573 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = current_variable;
current_variable = null;
}
break;
case 833:
#line 5581 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = null; }
break;
case 835:
#line 5586 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{ yyVal = new EmptyStatement (lexer.Location); }
break;
case 839:
#line 5597 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var sl = yyVals[-2+yyTop] as StatementList;
if (sl == null) {
sl = new StatementList ((Statement) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop]);
lbag.AddStatement (sl, GetLocation (yyVals[-1+yyTop]));
} else {
sl.Add ((Statement) yyVals[0+yyTop]);
lbag.AppendTo (sl, GetLocation (yyVals[-1+yyTop]));
}
yyVal = sl;
}
break;
case 840:
#line 5613 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (230, GetLocation (yyVals[-5+yyTop]), "Type and identifier are both required in a foreach statement");
yyVal = null;
}
break;
case 841:
#line 5618 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_block (GetLocation (yyVals[-5+yyTop]));
current_block.IsCompilerGenerated = true;
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.ForeachVariable | LocalVariable.Flags.Used, lt.Location);
current_block.AddLocalName (li);
yyVal = li;
}
break;
case 842:
#line 5628 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
Foreach f = new Foreach ((Expression) yyVals[-6+yyTop], (LocalVariable) yyVals[-1+yyTop], (Expression) yyVals[-3+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-8+yyTop]));
current_block.AddStatement (f);
lbag.AddStatement (f, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]));
yyVal = end_block (GetLocation (yyVals[-2+yyTop]));
}
break;
case 849:
#line 5651 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Break (GetLocation (yyVals[-1+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 850:
#line 5659 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Continue (GetLocation (yyVals[-1+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 851:
#line 5667 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new Goto (lt.Value, lt.Location);
lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 852:
#line 5673 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 853:
#line 5678 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 854:
#line 5686 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 855:
#line 5694 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop]));
}
break;
case 856:
#line 5702 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
string s = lt.Value;
if (s != "yield"){
report.Error (1003, lt.Location, "; expected");
} else if (yyVals[-1+yyTop] == null) {
report.Error (1627, GetLocation (yyVals[0+yyTop]), "Expression expected after yield return");
} else if (lang_version == LanguageVersion.ISO_1){
FeatureIsNotAvailable (lt.Location, "iterators");
}
current_block.ParametersBlock.TopBlock.IsIterator = true;
yyVal = new Yield ((Expression) yyVals[-1+yyTop], lt.Location);
lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 857:
#line 5718 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
string s = lt.Value;
if (s != "yield"){
report.Error (1003, lt.Location, "; expected");
} else if (lang_version == LanguageVersion.ISO_1){
FeatureIsNotAvailable (lt.Location, "iterators");
}
current_block.ParametersBlock.TopBlock.IsIterator = true;
yyVal = new YieldBreak (lt.Location);
lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop]));
}
break;
case 860:
#line 5740 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false);
}
break;
case 861:
#line 5744 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (Block) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 862:
#line 5749 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List<Catch>) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop]), true), (Block) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]));
}
break;
case 863:
#line 5754 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
report.Error (1524, GetLocation (yyVals[-2+yyTop]), "Expected catch or finally");
yyVal = null;
}
break;
case 864:
#line 5762 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var l = new List<Catch> (2);
l.Add ((Catch) yyVals[0+yyTop]);
yyVal = l;
}
break;
case 865:
#line 5769 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var l = (List<Catch>) yyVals[-1+yyTop];
Catch c = (Catch) yyVals[0+yyTop];
if (l [0].IsGeneral) {
report.Error (1017, c.loc, "Try statement already has an empty catch block");
} else {
if (c.IsGeneral)
l.Insert (0, c);
else
l.Add (c);
}
yyVal = l;
}
break;
case 868:
#line 5793 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 869:
#line 5797 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_block (GetLocation (yyVals[-3+yyTop]));
var c = new Catch (current_block, GetLocation (yyVals[-4+yyTop]));
c.TypeExpression = (FullNamedExpression) yyVals[-2+yyTop];
if (yyVals[-1+yyTop] != null) {
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
c.Variable = new LocalVariable (current_block, lt.Value, lt.Location);
current_block.AddLocalName (c.Variable);
}
lbag.AddLocation (c, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop]));
yyVal = c;
}
break;
case 870:
#line 5812 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[-1+yyTop];
}
break;
case 871:
#line 5816 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyToken == Token.CLOSE_PARENS) {
report.Error (1015, lexer.Location,
"A type that derives from `System.Exception', `object', or `string' expected");
} else {
Error_SyntaxError (yyToken);
}
yyVal = new Catch (null, GetLocation (yyVals[-2+yyTop]));
}
break;
case 872:
#line 5830 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 873:
#line 5837 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]));
}
break;
case 874:
#line 5844 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (!settings.Unsafe)
Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop]));
}
break;
case 875:
#line 5847 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]));
}
break;
case 876:
#line 5854 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
yyVal = new Lock ((Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
}
break;
case 877:
#line 5865 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_block (GetLocation (yyVals[-2+yyTop]));
current_block.IsCompilerGenerated = true;
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.FixedVariable | LocalVariable.Flags.Used, lt.Location);
current_block.AddLocalName (li);
current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li);
}
break;
case 878:
#line 5875 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = current_variable;
current_variable = null;
}
break;
case 879:
#line 5880 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
Fixed f = new Fixed ((Fixed.VariableDeclaration) yyVals[-1+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-9+yyTop]));
current_block.AddStatement (f);
yyVal = end_block (GetLocation (yyVals[-2+yyTop]));
}
break;
case 880:
#line 5892 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
start_block (GetLocation (yyVals[-2+yyTop]));
current_block.IsCompilerGenerated = true;
var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.UsingVariable | LocalVariable.Flags.Used, lt.Location);
current_block.AddLocalName (li);
current_variable = new Using.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li);
}
break;
case 881:
#line 5902 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = current_variable;
current_variable = null;
}
break;
case 882:
#line 5907 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
Using u = new Using ((Using.VariableDeclaration) yyVals[-1+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-9+yyTop]));
current_block.AddStatement (u);
yyVal = end_block (GetLocation (yyVals[-2+yyTop]));
}
break;
case 883:
#line 5916 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE)
Warning_EmptyStatement (GetLocation (yyVals[0+yyTop]));
Using u = new Using ((Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop]));
lbag.AddStatement (u, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]));
yyVal = u;
}
break;
case 884:
#line 5928 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_MissingInitializer (lexer.Location);
}
break;
case 885:
#line 5932 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_variable.Initializer = (Expression) yyVals[0+yyTop];
yyVal = current_variable;
}
break;
case 886:
#line 5943 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.query_parsing = false;
Linq.AQueryClause from = yyVals[-1+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 887:
#line 5955 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Linq.AQueryClause from = yyVals[-1+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 888:
#line 5966 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
lexer.query_parsing = false;
yyVal = yyVals[-1+yyTop];
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
}
break;
case 889:
#line 5973 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[-1+yyTop];
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
}
break;
case 890:
#line 5982 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var rv = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-3+yyTop])));
}
break;
case 891:
#line 5990 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var rv = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.QueryExpression (
new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-4+yyTop])) {
IdentifierType = (FullNamedExpression)yyVals[-3+yyTop]
}
);
}
break;
case 892:
#line 6005 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var rv = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-3+yyTop])));
}
break;
case 893:
#line 6013 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var rv = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.QueryExpression (
new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-4+yyTop])) {
IdentifierType = (FullNamedExpression)yyVals[-3+yyTop]
}
);
}
break;
case 894:
#line 6028 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 895:
#line 6032 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
var sn = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop]));
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
((Linq.QueryBlock)current_block).AddRangeVariable (sn);
}
break;
case 896:
#line 6043 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 897:
#line 6047 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
var sn = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.SelectMany ((Linq.QueryBlock)current_block, sn, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop])) {
IdentifierType = (FullNamedExpression)yyVals[-4+yyTop]
};
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
((Linq.QueryBlock)current_block).AddRangeVariable (sn);
}
break;
case 898:
#line 6064 "D:\GitHub\M\Marvin\mcs\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 900:
#line 6080 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
Error_SyntaxError (yyToken);
yyVal = null;
}
break;
case 901:
#line 6088 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 902:
#line 6092 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]));
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
}
break;
case 903:
#line 6099 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (linq_clause_blocks == null)
linq_clause_blocks = new Stack<Linq.QueryBlock> ();
current_block = new Linq.QueryBlock (current_block, lexer.Location);
linq_clause_blocks.Push ((Linq.QueryBlock)current_block);
}
break;
case 904:
#line 6107 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 905:
#line 6114 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.GroupBy ((Linq.QueryBlock)current_block, (Expression)yyVals[-3+yyTop], linq_clause_blocks.Pop (), (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop]));
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
}
break;
case 909:
#line 6130 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop];
yyVal = yyVals[-1+yyTop];
}
break;
case 915:
#line 6146 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 916:
#line 6150 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop];
var sn = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.Let ((Linq.QueryBlock) current_block, sn, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop]));
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
((Linq.QueryBlock)current_block).AddRangeVariable (sn);
}
break;
case 917:
#line 6164 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 918:
#line 6168 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]));
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
}
break;
case 919:
#line 6178 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (linq_clause_blocks == null)
linq_clause_blocks = new Stack<Linq.QueryBlock> ();
current_block = new Linq.QueryBlock (current_block, lexer.Location);
linq_clause_blocks.Push ((Linq.QueryBlock) current_block);
}
break;
case 920:
#line 6186 "D:\GitHub\M\Marvin\mcs\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 ((Linq.QueryBlock) current_block);
}
break;
case 921:
#line 6194 "D:\GitHub\M\Marvin\mcs\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, lexer.Location);
}
break;
case 922:
#line 6202 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop]));
current_block.SetEndLocation (lexer.Location);
var outer_selector = linq_clause_blocks.Pop ();
var block = linq_clause_blocks.Pop ();
var lt = (Tokenizer.LocatedToken) yyVals[-10+yyTop];
var sn = new Linq.RangeVariable (lt.Value, lt.Location);
Linq.RangeVariable into;
if (yyVals[0+yyTop] == null) {
into = sn;
yyVal = new Linq.Join (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, GetLocation (yyVals[-11+yyTop]));
} else {
/**/
/* Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions*/
/**/
var parent = block.Parent;
while (parent is Linq.QueryBlock) {
parent = parent.Parent;
}
current_block.Parent = parent;
((Linq.QueryBlock)current_block).AddRangeVariable (sn);
lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
into = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.GroupJoin (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, into, GetLocation (yyVals[-11+yyTop]));
}
current_block = block.Parent;
((Linq.QueryBlock)current_block).AddRangeVariable (into);
}
break;
case 923:
#line 6238 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (linq_clause_blocks == null)
linq_clause_blocks = new Stack<Linq.QueryBlock> ();
current_block = new Linq.QueryBlock (current_block, lexer.Location);
linq_clause_blocks.Push ((Linq.QueryBlock) current_block);
}
break;
case 924:
#line 6246 "D:\GitHub\M\Marvin\mcs\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 ((Linq.QueryBlock) current_block);
}
break;
case 925:
#line 6254 "D:\GitHub\M\Marvin\mcs\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, lexer.Location);
}
break;
case 926:
#line 6262 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop]));
current_block.SetEndLocation (lexer.Location);
var outer_selector = linq_clause_blocks.Pop ();
var block = linq_clause_blocks.Pop ();
var lt = (Tokenizer.LocatedToken) yyVals[-10+yyTop];
var sn = new Linq.RangeVariable (lt.Value, lt.Location);
Linq.RangeVariable into;
if (yyVals[0+yyTop] == null) {
into = sn;
yyVal = new Linq.Join (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, GetLocation (yyVals[-12+yyTop])) {
IdentifierType = (FullNamedExpression)yyVals[-11+yyTop]
};
} else {
/**/
/* Set equals right side parent to beginning of linq query, it is not accessible therefore cannot cause name collisions*/
/**/
var parent = block.Parent;
while (parent is Linq.QueryBlock) {
parent = parent.Parent;
}
current_block.Parent = parent;
((Linq.QueryBlock)current_block).AddRangeVariable (sn);
lt = (Tokenizer.LocatedToken) yyVals[0+yyTop];
into = new Linq.RangeVariable (lt.Value, lt.Location); /* TODO:*/
yyVal = new Linq.GroupJoin (block, sn, (Expression)yyVals[-7+yyTop], outer_selector, (Linq.QueryBlock) current_block, into, GetLocation (yyVals[-12+yyTop])) {
IdentifierType = (FullNamedExpression)yyVals[-11+yyTop]
};
}
current_block = block.Parent;
((Linq.QueryBlock)current_block).AddRangeVariable (into);
}
break;
case 928:
#line 6306 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[0+yyTop];
}
break;
case 929:
#line 6313 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 930:
#line 6317 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
yyVal = yyVals[0+yyTop];
}
break;
case 932:
#line 6328 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
current_block = new Linq.QueryBlock (current_block, lexer.Location);
}
break;
case 933:
#line 6335 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop];
yyVal = yyVals[-3+yyTop];
}
break;
case 935:
#line 6344 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_block.SetEndLocation (lexer.Location);
current_block = current_block.Parent;
current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location);
}
break;
case 936:
#line 6351 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop];
yyVal = yyVals[-3+yyTop];
}
break;
case 937:
#line 6359 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]);
}
break;
case 938:
#line 6363 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]);
}
break;
case 939:
#line 6367 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]);
}
break;
case 940:
#line 6374 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]);
}
break;
case 941:
#line 6378 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]);
}
break;
case 942:
#line 6382 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]);
}
break;
case 944:
#line 6391 "D:\GitHub\M\Marvin\mcs\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, lexer.Location);
if (linq_clause_blocks == null)
linq_clause_blocks = new Stack<Linq.QueryBlock> ();
linq_clause_blocks.Push ((Linq.QueryBlock) current_block);
}
break;
case 945:
#line 6407 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var current_block = linq_clause_blocks.Pop ();
var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop];
var rv = new Linq.RangeVariable (lt.Value, lt.Location);
yyVal = new Linq.QueryStartClause ((Linq.QueryBlock)current_block, null, rv, GetLocation (yyVals[-3+yyTop])) {
next = (Linq.AQueryClause)yyVals[0+yyTop]
};
}
break;
case 948:
#line 6434 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
current_container = new Class (current_namespace, current_class, new MemberName ("<InteractiveExpressionClass>"), Modifiers.PUBLIC, null);
current_class = current_container;
/* (ref object retval)*/
Parameter [] mpar = new Parameter [1];
mpar [0] = new Parameter (new TypeExpression (compiler.BuiltinTypes.Object, Location.Null), "$retval", Parameter.Modifier.REF, null, Location.Null);
ParametersCompiled pars = new ParametersCompiled (mpar);
var mods = Modifiers.PUBLIC | Modifiers.STATIC;
if (settings.Unsafe)
mods |= Modifiers.UNSAFE;
current_local_parameters = pars;
Method method = new Method (
current_class,
null, /* generic*/
new TypeExpression (compiler.BuiltinTypes.Void, Location.Null),
mods,
new MemberName ("Host"),
pars,
null /* attributes */);
current_container.AddMethod (method);
oob_stack.Push (method);
++lexer.parsing_block;
start_block (lexer.Location);
}
break;
case 949:
#line 6464 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
--lexer.parsing_block;
Method method = (Method) oob_stack.Pop ();
method.Block = (ToplevelBlock) end_block(lexer.Location);
InteractiveResult = (Class) pop_current_class ();
current_local_parameters = null;
}
break;
case 957:
#line 6496 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop];
}
break;
case 958:
#line 6503 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop];
}
break;
case 959:
#line 6507 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop];
module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop];
yyVal = null;
}
break;
case 960:
#line 6513 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop];
module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop];
var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop];
yyVal = new MemberName (lt.Value);
}
break;
case 961:
#line 6520 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], new MemberName (MemberCache.IndexerNameAlias));
}
break;
case 962:
#line 6524 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out;
}
break;
case 963:
#line 6528 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[-1+yyTop];
yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], new MemberName (MemberCache.IndexerNameAlias));
}
break;
case 964:
#line 6533 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1);
p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop]));
module.DocumentationBuilder.ParsedParameters = p;
module.DocumentationBuilder.ParsedOperator = Operator.OpType.Explicit;
yyVal = null;
}
break;
case 965:
#line 6541 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1);
p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop]));
module.DocumentationBuilder.ParsedParameters = p;
module.DocumentationBuilder.ParsedOperator = Operator.OpType.Implicit;
yyVal = null;
}
break;
case 966:
#line 6549 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1);
module.DocumentationBuilder.ParsedParameters = p;
module.DocumentationBuilder.ParsedOperator = (Operator.OpType) yyVals[-1+yyTop];
yyVal = null;
}
break;
case 968:
#line 6560 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]);
}
break;
case 970:
#line 6568 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out;
}
break;
case 971:
#line 6572 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = yyVals[-1+yyTop];
}
break;
case 972:
#line 6579 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
yyVal = new List<DocumentationParameter> (0);
}
break;
case 974:
#line 6587 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var parameters = new List<DocumentationParameter> ();
parameters.Add ((DocumentationParameter) yyVals[0+yyTop]);
yyVal = parameters;
}
break;
case 975:
#line 6593 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
var parameters = yyVals[-2+yyTop] as List<DocumentationParameter>;
parameters.Add ((DocumentationParameter) yyVals[0+yyTop]);
yyVal = parameters;
}
break;
case 976:
#line 6602 "D:\GitHub\M\Marvin\mcs\cs-parser.jay"
{
if (yyVals[-1+yyTop] != null)
yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]);
else
yyVal = new DocumentationParameter ((FullNamedExpression) yyVals[0+yyTop]);
}
break;
#line default
}
yyTop -= yyLen[yyN];
yyState = yyStates[yyTop];
int yyM = yyLhs[yyN];
if (yyState == 0 && yyM == 0) {
if (debug != null) debug.shift(0, yyFinal);
yyState = yyFinal;
if (yyToken < 0) {
yyToken = yyLex.advance() ? yyLex.token() : 0;
if (debug != null)
debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value());
}
if (yyToken == 0) {
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];
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'
}
}