diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index ed7b8a2178..5ad2aa0657 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -87,6 +87,13 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (new CSharpTokenNode (Convert (loc [loc.Count - 1]), 1), AstType.Roles.RChevron); } + AstType ConvertToType (TypeParameter spec) + { + AstType result; + result = new SimpleType () { IdentifierToken = Identifier.Create (spec.Name, Convert (spec.Location)) }; + return result; + } + AstType ConvertToType (MemberName memberName) { AstType result; @@ -100,15 +107,15 @@ namespace ICSharpCode.NRefactory.CSharp } else { result = new SimpleType () { IdentifierToken = Identifier.Create (memberName.Name, Convert (memberName.Location)) }; } - if (memberName.TypeArguments != null && !memberName.TypeArguments.IsEmpty) { - var chevronLocs = LocationsBag.GetLocations (memberName.TypeArguments); + if (memberName.TypeParameters != null) { + var chevronLocs = LocationsBag.GetLocations (memberName.TypeParameters); if (chevronLocs != null) result.AddChild (new CSharpTokenNode (Convert (chevronLocs[chevronLocs.Count - 2]), 1), InvocationExpression.Roles.LChevron); - int i = 0; - foreach (var arg in memberName.TypeArguments.Args) { - result.AddChild (ConvertToType (arg), AstType.Roles.TypeArgument); + for (int i = 0; i < memberName.TypeParameters.Count; i++) { + var param = memberName.TypeParameters[i]; + result.AddChild (new SimpleType (Identifier.Create (param.Name, Convert (param.Location))), AstType.Roles.TypeArgument); if (chevronLocs != null && i < chevronLocs.Count - 2) - result.AddChild (new CSharpTokenNode (Convert (chevronLocs [i++]), 1), InvocationExpression.Roles.Comma); + result.AddChild (new CSharpTokenNode (Convert (chevronLocs [i]), 1), InvocationExpression.Roles.Comma); } if (chevronLocs != null) result.AddChild (new CSharpTokenNode (Convert (chevronLocs[chevronLocs.Count - 1]), 1), InvocationExpression.Roles.RChevron); @@ -208,8 +215,8 @@ namespace ICSharpCode.NRefactory.CSharp if (loc != null) result.AddChild (new CSharpTokenNode (Convert (loc [pos++]), 1), AttributeSection.Roles.LPar); - if (attr.PosArguments != null) { - foreach (var arg in attr.PosArguments) { + if (attr.PositionalArguments != null) { + foreach (var arg in attr.PositionalArguments) { var na = arg as NamedArgument; if (na != null) { var newArg = new NamedArgumentExpression (); @@ -327,7 +334,7 @@ namespace ICSharpCode.NRefactory.CSharp { UsingDeclaration ud = new UsingDeclaration (); ud.AddChild (new CSharpTokenNode (Convert (u.UsingLocation), "using".Length), UsingDeclaration.Roles.Keyword); - ud.AddChild (ConvertImport (u.NSpace), UsingDeclaration.ImportRole); + ud.AddChild (ConvertToType (u.NSpace), UsingDeclaration.ImportRole); ud.AddChild (new CSharpTokenNode (Convert (u.SemicolonLocation), 1), UsingDeclaration.Roles.Semicolon); AddToNamespace (ud); } @@ -338,7 +345,7 @@ namespace ICSharpCode.NRefactory.CSharp ud.AddChild (new CSharpTokenNode (Convert (u.UsingLocation), "using".Length), UsingAliasDeclaration.Roles.Keyword); ud.AddChild (Identifier.Create (u.Identifier.Value, Convert (u.Identifier.Location)), UsingAliasDeclaration.AliasRole); ud.AddChild (new CSharpTokenNode (Convert (u.AssignLocation), 1), UsingAliasDeclaration.Roles.Assign); - ud.AddChild (ConvertImport (u.Nspace), UsingAliasDeclaration.ImportRole); + ud.AddChild (ConvertToType (u.Nspace), UsingAliasDeclaration.ImportRole); ud.AddChild (new CSharpTokenNode (Convert (u.SemicolonLocation), 1), UsingAliasDeclaration.Roles.Semicolon); AddToNamespace (ud); } @@ -358,19 +365,19 @@ namespace ICSharpCode.NRefactory.CSharp if (memberName.Left != null) { // left.name var t = new MemberType(); - t.IsDoubleColon = memberName.IsDoubleColon; +// t.IsDoubleColon = memberName.IsDoubleColon; t.AddChild (ConvertImport (memberName.Left), MemberType.TargetRole); if (!memberName.DotLocation.IsNull) t.AddChild (new CSharpTokenNode (Convert (memberName.DotLocation), 1), MemberType.Roles.Dot); t.AddChild (Identifier.Create (memberName.Name, Convert(memberName.Location)), MemberType.Roles.Identifier); - AddTypeArguments (t, memberName.TypeArguments); + AddTypeArguments (t, memberName); return t; } else { SimpleType t = new SimpleType(); t.AddChild (Identifier.Create (memberName.Name, Convert(memberName.Location)), SimpleType.Roles.Identifier); - AddTypeArguments (t, memberName.TypeArguments); + AddTypeArguments (t, memberName); return t; } } @@ -396,9 +403,7 @@ namespace ICSharpCode.NRefactory.CSharp newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), "class".Length), TypeDeclaration.Roles.Keyword); newType.AddChild (Identifier.Create (c.MemberName.Name, Convert (c.MemberName.Location)), AstNode.Roles.Identifier); - if (c.MemberName.TypeArguments != null) { - AddTypeParameters (newType, c.MemberName.TypeArguments); - } + AddTypeParameters (newType, c.MemberName); if (c.TypeBaseExpressions != null) { if (location != null && curLoc < location.Count) @@ -445,9 +450,7 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null) newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), "struct".Length), TypeDeclaration.Roles.Keyword); newType.AddChild (Identifier.Create (s.MemberName.Name, Convert (s.MemberName.Location)), AstNode.Roles.Identifier); - if (s.MemberName.TypeArguments != null) { - AddTypeParameters (newType, s.MemberName.TypeArguments); - } + AddTypeParameters (newType, s.MemberName); if (s.TypeBaseExpressions != null) { if (location != null && curLoc < location.Count) @@ -492,9 +495,7 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null) newType.AddChild (new CSharpTokenNode (Convert (location[curLoc++]), "interface".Length), TypeDeclaration.Roles.Keyword); newType.AddChild (Identifier.Create (i.MemberName.Name, Convert (i.MemberName.Location)), AstNode.Roles.Identifier); - if (i.MemberName.TypeArguments != null) { - AddTypeParameters (newType, i.MemberName.TypeArguments); - } + AddTypeParameters (newType, i.MemberName); if (i.TypeBaseExpressions != null) { if (location != null && curLoc < location.Count) @@ -538,9 +539,8 @@ namespace ICSharpCode.NRefactory.CSharp newDelegate.AddChild (new CSharpTokenNode (Convert (location[0]), "delegate".Length), TypeDeclaration.Roles.Keyword); newDelegate.AddChild (ConvertToType (d.ReturnType), AstNode.Roles.Type); newDelegate.AddChild (Identifier.Create (d.MemberName.Name, Convert (d.MemberName.Location)), AstNode.Roles.Identifier); - if (d.MemberName.TypeArguments != null) { - AddTypeParameters (newDelegate, d.MemberName.TypeArguments); - } + AddTypeParameters (newDelegate, d.MemberName); + if (location != null) newDelegate.AddChild (new CSharpTokenNode (Convert (location[1]), 1), DelegateDeclaration.Roles.LPar); AddParameter (newDelegate, d.Parameters); @@ -909,9 +909,7 @@ namespace ICSharpCode.NRefactory.CSharp } newMethod.AddChild (Identifier.Create (m.MethodName.Name, Convert (m.Location)), AstNode.Roles.Identifier); - if (m.MemberName.TypeArguments != null) { - AddTypeParameters (newMethod, m.MemberName.TypeArguments); - } + AddTypeParameters (newMethod, m.MemberName); if (location != null) newMethod.AddChild (new CSharpTokenNode (Convert (location[0]), 1), MethodDeclaration.Roles.LPar); @@ -1465,7 +1463,7 @@ namespace ICSharpCode.NRefactory.CSharp public override object Visit (StatementErrorExpression statementErrorExpression) { var result = new ExpressionStatement (); - var expr = statementErrorExpression.Expression.Accept (this) as Expression; + var expr = statementErrorExpression.Expr.Accept (this) as Expression; if (expr != null) result.AddChild ((Expression)expr, ExpressionStatement.Roles.Expression); return result; @@ -1849,13 +1847,13 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (new CSharpTokenNode (Convert (tryCatchStatement.loc), "try".Length), TryCatchStatement.TryKeywordRole); if (tryCatchStatement.Block != null) result.AddChild ((BlockStatement)tryCatchStatement.Block.Accept (this), TryCatchStatement.TryBlockRole); - if (tryCatchStatement.Specific != null) { - foreach (Catch ctch in tryCatchStatement.Specific) { + if (tryCatchStatement.Clauses != null) { + foreach (var ctch in tryCatchStatement.Clauses) { result.AddChild (ConvertCatch (ctch), TryCatchStatement.CatchClauseRole); } } - if (tryCatchStatement.General != null) - result.AddChild (ConvertCatch (tryCatchStatement.General), TryCatchStatement.CatchClauseRole); +// if (tryCatchStatement.General != null) +// result.AddChild (ConvertCatch (tryCatchStatement.General), TryCatchStatement.CatchClauseRole); return result; } @@ -1868,8 +1866,8 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (new CSharpTokenNode (Convert (usingStatement.loc), "using".Length), UsingStatement.Roles.Keyword); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location [0]), 1), UsingStatement.Roles.LPar); - if (usingStatement.Expression != null) - result.AddChild ((AstNode)usingStatement.Expression.Accept (this), UsingStatement.ResourceAcquisitionRole); + if (usingStatement.Expr != null) + result.AddChild ((AstNode)usingStatement.Expr.Accept (this), UsingStatement.ResourceAcquisitionRole); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location [1]), 1), UsingStatement.Roles.RPar); @@ -1889,8 +1887,9 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null) result.AddChild (new CSharpTokenNode (Convert (location [0]), 1), ForeachStatement.Roles.LPar); - if (foreachStatement.TypeExpr != null) - result.AddChild (ConvertToType (foreachStatement.TypeExpr), ForeachStatement.Roles.Type); + if (foreachStatement.TypeExpression != null) + result.AddChild (ConvertToType (foreachStatement.TypeExpression), ForeachStatement.Roles.Type); + if (foreachStatement.Variable != null) result.AddChild (Identifier.Create (foreachStatement.Variable.Name, Convert (foreachStatement.Variable.Location)), ForeachStatement.Roles.Identifier); @@ -1902,6 +1901,7 @@ namespace ICSharpCode.NRefactory.CSharp if (location != null && location.Count > 2) result.AddChild (new CSharpTokenNode (Convert (location [2]), 1), ForeachStatement.Roles.RPar); + if (foreachStatement.Statement != null) result.AddChild ((Statement)foreachStatement.Statement.Accept (this), ForeachStatement.Roles.EmbeddedStatement); @@ -1981,9 +1981,7 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (Identifier.Create (memberAccess.Name, Convert (memberAccess.Location)), MemberReferenceExpression.Roles.Identifier); - if (memberAccess.TypeArguments != null) { - AddTypeArguments (result, memberAccess.TypeArguments); - } + AddTypeArguments (result, memberAccess); return result; } @@ -2018,9 +2016,7 @@ namespace ICSharpCode.NRefactory.CSharp { var result = new IdentifierExpression (); result.AddChild (Identifier.Create (simpleName.Name, Convert (simpleName.Location)), IdentifierExpression.Roles.Identifier); - if (simpleName.TypeArguments != null) { - AddTypeArguments (result, simpleName.TypeArguments); - } + AddTypeArguments (result, simpleName); return result; } @@ -2260,7 +2256,7 @@ namespace ICSharpCode.NRefactory.CSharp { var result = new BinaryOperatorExpression (); result.Operator = BinaryOperatorType.NullCoalescing; - result.AddChild ((Expression)nullCoalescingOperator.Left.Accept (this), BinaryOperatorExpression.LeftRole); + result.AddChild ((Expression)nullCoalescingOperator.LeftExpression.Accept (this), BinaryOperatorExpression.LeftRole); result.AddChild (new CSharpTokenNode (Convert (nullCoalescingOperator.Location), 2), BinaryOperatorExpression.OperatorRole); result.AddChild ((Expression)nullCoalescingOperator.Right.Accept (this), BinaryOperatorExpression.RightRole); return result; @@ -2335,17 +2331,17 @@ namespace ICSharpCode.NRefactory.CSharp } } - void AddTypeParameters (AstNode parent, Mono.CSharp.TypeArguments typeArguments) + void AddTypeParameters (AstNode parent, MemberName memberName) { - if (typeArguments == null || typeArguments.IsEmpty) + if (memberName == null || memberName.TypeParameters == null) return; - var chevronLocs = LocationsBag.GetLocations (typeArguments); + var chevronLocs = LocationsBag.GetLocations (memberName.TypeParameters); if (chevronLocs != null) parent.AddChild (new CSharpTokenNode (Convert (chevronLocs[chevronLocs.Count - 2]), 1), InvocationExpression.Roles.LChevron); - for (int i = 0; i < typeArguments.Count; i++) { + for (int i = 0; i < memberName.TypeParameters.Count; i++) { if (chevronLocs != null && i > 0 && i - 1 < chevronLocs.Count) parent.AddChild (new CSharpTokenNode (Convert (chevronLocs[i - 1]), 1), InvocationExpression.Roles.Comma); - var arg = (TypeParameterName)typeArguments.Args[i]; + var arg = memberName.TypeParameters[i]; if (arg == null) continue; TypeParameterDeclaration tp = new TypeParameterDeclaration(); @@ -2387,16 +2383,37 @@ namespace ICSharpCode.NRefactory.CSharp parent.AddChild (new CSharpTokenNode (Convert (chevronLocs[chevronLocs.Count - 1]), 1), InvocationExpression.Roles.RChevron); } - void AddTypeArguments (AstNode parent, Mono.CSharp.TypeArguments typeArguments) + void AddTypeArguments (AstNode parent, MemberName memberName) + { + if (memberName == null || memberName.TypeParameters == null) + return; + var chevronLocs = LocationsBag.GetLocations (memberName.TypeParameters); + if (chevronLocs != null) + parent.AddChild (new CSharpTokenNode (Convert (chevronLocs[chevronLocs.Count - 2]), 1), InvocationExpression.Roles.LChevron); + + for (int i = 0; i < memberName.TypeParameters.Count; i++) { + var arg = memberName.TypeParameters[i]; + if (arg == null) + continue; + parent.AddChild (ConvertToType (arg), InvocationExpression.Roles.TypeArgument); + if (chevronLocs != null && i < chevronLocs.Count - 2) + parent.AddChild (new CSharpTokenNode (Convert (chevronLocs[i]), 1), InvocationExpression.Roles.Comma); + } + + if (chevronLocs != null) + parent.AddChild (new CSharpTokenNode (Convert (chevronLocs[chevronLocs.Count - 1]), 1), InvocationExpression.Roles.RChevron); + } + + void AddTypeArguments (AstNode parent, ATypeNameExpression memberName) { - if (typeArguments == null || typeArguments.IsEmpty) + if (memberName == null || !memberName.HasTypeArguments) return; - var chevronLocs = LocationsBag.GetLocations (typeArguments); + var chevronLocs = LocationsBag.GetLocations (memberName.TypeArguments); if (chevronLocs != null) parent.AddChild (new CSharpTokenNode (Convert (chevronLocs[chevronLocs.Count - 2]), 1), InvocationExpression.Roles.LChevron); - for (int i = 0; i < typeArguments.Count; i++) { - var arg = typeArguments.Args[i]; + for (int i = 0; i < memberName.TypeArguments.Count; i++) { + var arg = memberName.TypeArguments.Args[i]; if (arg == null) continue; parent.AddChild (ConvertToType (arg), InvocationExpression.Roles.TypeArgument); @@ -2489,8 +2506,8 @@ namespace ICSharpCode.NRefactory.CSharp { var result = new InvocationExpression (); var location = LocationsBag.GetLocations (invocationExpression); - if (invocationExpression.Expression != null) - result.AddChild ((Expression)invocationExpression.Expression.Accept (this), InvocationExpression.Roles.TargetExpression); + if (invocationExpression.Exp != null) + result.AddChild ((Expression)invocationExpression.Exp.Accept (this), InvocationExpression.Roles.TargetExpression); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), InvocationExpression.Roles.LPar); AddArguments (result, location, invocationExpression.Arguments); @@ -2796,7 +2813,7 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (new CSharpTokenNode (Convert (sizeOfExpression.Location), "sizeof".Length), TypeOfExpression.Roles.Keyword); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), TypeOfExpression.Roles.LPar); - result.AddChild (ConvertToType (sizeOfExpression.QueriedType), TypeOfExpression.Roles.Type); + result.AddChild (ConvertToType (sizeOfExpression.TypeExpression), TypeOfExpression.Roles.Type); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), TypeOfExpression.Roles.RPar); return result; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs index 8e35e72ad2..2a53a60ad2 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs @@ -36,15 +36,18 @@ namespace Mono.CSharp { throw new InternalErrorException ("Helper class already defined!"); } - protected static MemberName MakeMemberName (MemberBase host, string name, int unique_id, TypeParameter[] tparams, Location loc) + protected static MemberName MakeMemberName (MemberBase host, string name, int unique_id, TypeParameters tparams, Location loc) { - string host_name = host == null ? null : host.Name; + string host_name = host == null ? null : host is InterfaceMemberBase ? ((InterfaceMemberBase)host).GetFullName (host.MemberName) : host.Name; string tname = MakeName (host_name, "c", name, unique_id); - TypeArguments args = null; + TypeParameters args = null; if (tparams != null) { - args = new TypeArguments (); - foreach (TypeParameter tparam in tparams) - args.Add (new TypeParameterName (tparam.Name, null, loc)); + args = new TypeParameters (tparams.Count); + + // Type parameters will be filled later when we have TypeContainer + // instance, for now we need only correct arity to create valid name + for (int i = 0; i < tparams.Count; ++i) + args.Add ((TypeParameter) null); } return new MemberName (tname, args, loc); @@ -81,15 +84,16 @@ namespace Mono.CSharp { protected TypeParameterMutator mutator; - public HoistedStoreyClass (TypeContainer parent, MemberName name, TypeParameter[] tparams, Modifiers mod) + public HoistedStoreyClass (TypeContainer parent, MemberName name, TypeParameters tparams, Modifiers mod) : base (parent, name, mod | Modifiers.PRIVATE) { + if (tparams != null) { - type_params = new TypeParameter[tparams.Length]; - var src = new TypeParameterSpec[tparams.Length]; - var dst = new TypeParameterSpec[tparams.Length]; + var type_params = name.TypeParameters; + var src = new TypeParameterSpec[tparams.Count]; + var dst = new TypeParameterSpec[tparams.Count]; - for (int i = 0; i < type_params.Length; ++i) { + for (int i = 0; i < tparams.Count; ++i) { type_params[i] = tparams[i].CreateHoistedCopy (this, spec); src[i] = tparams[i].Type; @@ -99,7 +103,7 @@ namespace Mono.CSharp { // A copy is not enough, inflate any type parameter constraints // using a new type parameters var inflator = new TypeParameterInflator (this, null, src, dst); - for (int i = 0; i < type_params.Length; ++i) { + for (int i = 0; i < tparams.Count; ++i) { src[i].InflateConstraints (inflator, dst[i]); } @@ -196,7 +200,7 @@ namespace Mono.CSharp { // Local variable which holds this storey instance public Expression Instance; - public AnonymousMethodStorey (Block block, TypeContainer parent, MemberBase host, TypeParameter[] tparams, string name) + public AnonymousMethodStorey (Block block, TypeContainer parent, MemberBase host, TypeParameters tparams, string name) : base (parent, MakeMemberName (host, name, unique_id, tparams, block.StartLocation), tparams, Modifiers.SEALED) { @@ -323,8 +327,8 @@ namespace Mono.CSharp { // Use current method type parameter (MVAR) for top level storey only. All // nested storeys use class type parameter (VAR) // - TypeParameter[] tparams = ec.CurrentAnonymousMethod != null && ec.CurrentAnonymousMethod.Storey != null ? - ec.CurrentAnonymousMethod.Storey.TypeParameters : + var tparams = ec.CurrentAnonymousMethod != null && ec.CurrentAnonymousMethod.Storey != null ? + ec.CurrentAnonymousMethod.Storey.CurrentTypeParameters : ec.CurrentTypeParameters; TypeArguments targs = new TypeArguments (); @@ -333,7 +337,7 @@ namespace Mono.CSharp { // Use type parameter name instead of resolved type parameter // specification to resolve to correctly nested type parameters // - for (int i = 0; i < tparams.Length; ++i) + for (int i = 0; i < tparams.Count; ++i) targs.Add (new SimpleName (tparams [i].Name, Location)); // new TypeParameterExpr (tparams[i], Location)); storey_type_expr = new GenericTypeExpr (Definition, targs, Location); @@ -347,19 +351,18 @@ namespace Mono.CSharp { public void SetNestedStoryParent (AnonymousMethodStorey parentStorey) { Parent = parentStorey; - type_params = null; spec.IsGeneric = false; spec.DeclaringType = parentStorey.CurrentType; - MemberName.TypeArguments = null; + MemberName.TypeParameters = null; } protected override bool DoResolveTypeParameters () { // Although any storey can have type parameters they are all clones of method type // parameters therefore have to mutate MVAR references in any of cloned constraints - if (type_params != null) { - for (int i = 0; i < type_params.Length; ++i) { - var spec = type_params[i].Type; + if (CurrentTypeParameters != null) { + for (int i = 0; i < CurrentTypeParameters.Count; ++i) { + var spec = CurrentTypeParameters[i].Type; spec.BaseType = mutator.Mutate (spec.BaseType); if (spec.InterfacesDefined != null) { var mutated = new TypeSpec[spec.InterfacesDefined.Length]; @@ -885,9 +888,8 @@ namespace Mono.CSharp { public ParametersBlock Block; - public AnonymousMethodExpression (bool isAsync, Location loc) + public AnonymousMethodExpression (Location loc) { - this.IsAsync = isAsync; this.loc = loc; this.compatibles = new Dictionary (); } @@ -1588,16 +1590,17 @@ namespace Mono.CSharp { MemberName member_name; GenericMethod generic_method; - if (storey == null && mc.MemberName.TypeArguments != null) { - member_name = new MemberName (name, mc.MemberName.TypeArguments.Clone (), Location); + if (storey == null && ec.CurrentTypeParameters != null) { var hoisted_tparams = ec.CurrentTypeParameters; - var type_params = new TypeParameter[hoisted_tparams.Length]; - for (int i = 0; i < type_params.Length; ++i) { - type_params[i] = hoisted_tparams[i].CreateHoistedCopy (parent, null); + var type_params = new TypeParameters (hoisted_tparams.Count); + for (int i = 0; i < hoisted_tparams.Count; ++i) { + type_params.Add (hoisted_tparams[i].CreateHoistedCopy (parent, null)); } - generic_method = new GenericMethod (parent.NamespaceEntry, parent, member_name, type_params, + member_name = new MemberName (name, type_params, Location); + + generic_method = new GenericMethod (parent.NamespaceEntry, parent, member_name, //type_params, new TypeExpression (ReturnType, Location), parameters); } else { member_name = new MemberName (name, Location); @@ -1782,16 +1785,15 @@ namespace Mono.CSharp { string name = ClassNamePrefix + types_counter++; ParametersCompiled all_parameters; - TypeParameterName[] t_params; + TypeParameters tparams = null; SimpleName[] t_args; if (parameters.Count == 0) { all_parameters = ParametersCompiled.EmptyReadOnlyParameters; - t_params = new TypeParameterName[0]; t_args = null; } else { t_args = new SimpleName[parameters.Count]; - t_params = new TypeParameterName[parameters.Count]; + tparams = new TypeParameters (); Parameter[] ctor_params = new Parameter[parameters.Count]; for (int i = 0; i < parameters.Count; ++i) { AnonymousTypeParameter p = parameters[i]; @@ -1808,7 +1810,7 @@ namespace Mono.CSharp { } t_args[i] = new SimpleName ("<" + p.Name + ">__T", p.Location); - t_params[i] = new TypeParameterName (t_args[i].Name, null, p.Location); + tparams.Add (new TypeParameter (i, new MemberName (t_args[i].Name, p.Location), null, null, Variance.None)); ctor_params[i] = new Parameter (t_args[i], p.Name, Parameter.Modifier.NONE, null, p.Location); } @@ -1820,13 +1822,13 @@ namespace Mono.CSharp { // named upon properties names // AnonymousTypeClass a_type = new AnonymousTypeClass (parent.NamespaceEntry.SlaveDeclSpace, - new MemberName (name, new TypeArguments (t_params), loc), parameters, loc); + new MemberName (name, tparams, loc), parameters, loc); if (parameters.Count > 0) a_type.SetParameterInfo (null); Constructor c = new Constructor (a_type, name, Modifiers.PUBLIC | Modifiers.DEBUGGER_HIDDEN, - null, all_parameters, null, loc); + null, all_parameters, loc); c.Block = new ToplevelBlock (parent.Module.Compiler, c.ParameterInfo, loc); // @@ -1913,10 +1915,11 @@ namespace Mono.CSharp { ToplevelBlock equals_block = new ToplevelBlock (Compiler, equals.ParameterInfo, loc); TypeExpr current_type; - if (type_params != null) { + if (CurrentTypeParameters != null) { var targs = new TypeArguments (); - foreach (var type_param in type_params) - targs.Add (new TypeParameterExpr (type_param, type_param.Location)); + for (int i = 0; i < CurrentTypeParameters.Count; ++i) { + targs.Add (new TypeParameterExpr (CurrentTypeParameters[i], Location)); + } current_type = new GenericTypeExpr (Definition, targs, loc); } else { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs index 9e06715ed6..2e25ab7ca4 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assembly.cs @@ -1090,8 +1090,7 @@ namespace Mono.CSharp public abstract bool HasObjectType (T assembly); protected abstract string[] GetDefaultReferences (); - public abstract T LoadAssemblyFile (string fileName); - public abstract T LoadAssemblyDefault (string assembly); + public abstract T LoadAssemblyFile (string fileName, bool isImplicitReference); public abstract void LoadReferences (ModuleContainer module); protected void Error_FileNotFound (string fileName) @@ -1128,14 +1127,14 @@ namespace Mono.CSharp // Load mscorlib.dll as the first // if (module.Compiler.Settings.StdLib) { - corlib_assembly = LoadAssemblyDefault ("mscorlib.dll"); + corlib_assembly = LoadAssemblyFile ("mscorlib.dll", true); } else { corlib_assembly = default (T); } T a; foreach (string r in module.Compiler.Settings.AssemblyReferences) { - a = LoadAssemblyFile (r); + a = LoadAssemblyFile (r, false); if (a == null || EqualityComparer.Default.Equals (a, corlib_assembly)) continue; @@ -1153,7 +1152,7 @@ namespace Mono.CSharp } foreach (var entry in module.Compiler.Settings.AssemblyReferencesAliases) { - a = LoadAssemblyFile (entry.Item2); + a = LoadAssemblyFile (entry.Item2, false); if (a == null) continue; @@ -1166,7 +1165,7 @@ namespace Mono.CSharp if (compiler.Settings.LoadDefaultReferences) { foreach (string r in GetDefaultReferences ()) { - a = LoadAssemblyDefault (r); + a = LoadAssemblyFile (r, true); if (a == null) continue; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs index 99416ce55d..4fc2e6e9a4 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs @@ -418,6 +418,11 @@ namespace Mono.CSharp { _target.target = target.Clone (clonectx); _target.source = source.Clone (clonectx); } + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class SimpleAssign : Assign @@ -653,6 +658,12 @@ namespace Mono.CSharp { this.left = left; } + public Binary.Operator Operator { + get { + return op; + } + } + protected override Expression DoResolve (ResolveContext ec) { right = right.Resolve (ec); @@ -811,10 +822,10 @@ namespace Mono.CSharp { ctarget.right = ctarget.source = source.Clone (clonectx); ctarget.target = target.Clone (clonectx); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); } - } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs index 89b78483e2..7a786da549 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs @@ -40,6 +40,12 @@ namespace Mono.CSharp this.loc = loc; } + public Expression Expr { + get { + return expr; + } + } + protected override void CloneTo (CloneContext clonectx, Expression target) { var t = (Await) target; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs index 53a5db56d3..a9decc3ba4 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs @@ -89,8 +89,7 @@ namespace Mono.CSharp { public AttributeTargets Target; readonly ATypeNameExpression expression; - public Arguments PosArguments; - public Arguments NamedArguments; + Arguments pos_args, named_args; bool resolve_error; bool arg_resolved; @@ -118,8 +117,8 @@ namespace Mono.CSharp { { this.expression = expr; if (args != null) { - PosArguments = args[0]; - NamedArguments = args[1]; + pos_args = args[0]; + named_args = args[1]; } this.loc = loc; ExplicitTarget = target; @@ -132,6 +131,24 @@ namespace Mono.CSharp { } } + public Arguments NamedArguments { + get { + return named_args; + } + } + + public Arguments PositionalArguments { + get { + return pos_args; + } + } + + public ATypeNameExpression TypeExpression { + get { + return expression; + } + } + void AddModuleCharSet (ResolveContext rc) { const string dll_import_char_set = "CharSet"; @@ -147,7 +164,7 @@ namespace Mono.CSharp { } if (NamedArguments == null) - NamedArguments = new Arguments (1); + named_args = new Arguments (1); var value = Constant.CreateConstant (rc.Module.PredefinedTypes.CharSet.TypeSpec, rc.Module.DefaultCharSet, Location); NamedArguments.Add (new NamedArgument (dll_import_char_set, loc, value)); @@ -156,8 +173,8 @@ namespace Mono.CSharp { public Attribute Clone () { Attribute a = new Attribute (ExplicitTarget, expression, null, loc, nameEscaped); - a.PosArguments = PosArguments; - a.NamedArguments = NamedArguments; + a.pos_args = pos_args; + a.named_args = NamedArguments; return a; } @@ -432,14 +449,14 @@ namespace Mono.CSharp { MethodSpec ctor; // Try if the attribute is simple and has been resolved before - if (PosArguments != null || !context.Module.AttributeConstructorCache.TryGetValue (Type, out ctor)) { + if (pos_args != null || !context.Module.AttributeConstructorCache.TryGetValue (Type, out ctor)) { rc = CreateResolveContext (); ctor = ResolveConstructor (rc); if (ctor == null) { return null; } - if (PosArguments == null && ctor.Parameters.IsEmpty) + if (pos_args == null && ctor.Parameters.IsEmpty) context.Module.AttributeConstructorCache.Add (Type, ctor); } @@ -468,16 +485,16 @@ namespace Mono.CSharp { MethodSpec ResolveConstructor (ResolveContext ec) { - if (PosArguments != null) { + if (pos_args != null) { bool dynamic; - PosArguments.Resolve (ec, out dynamic); + pos_args.Resolve (ec, out dynamic); if (dynamic) { Error_AttributeArgumentIsDynamic (ec.MemberContext, loc); return null; } } - return Expression.ConstructorLookup (ec, Type, ref PosArguments, loc); + return Expression.ConstructorLookup (ec, Type, ref pos_args, loc); } bool ResolveNamedArguments (ResolveContext ec) @@ -637,7 +654,7 @@ namespace Mono.CSharp { if (resolve_error) return DefaultUsageAttribute; - AttributeUsageAttribute usage_attribute = new AttributeUsageAttribute ((AttributeTargets)((Constant) PosArguments [0].Expr).GetValue ()); + AttributeUsageAttribute usage_attribute = new AttributeUsageAttribute ((AttributeTargets) ((Constant) pos_args[0].Expr).GetValue ()); var field = GetNamedValue ("AllowMultiple") as BoolConstant; if (field != null) @@ -660,10 +677,10 @@ namespace Mono.CSharp { // But because a lot of attribute class code must be rewritten will be better to wait... Resolve (); - if (resolve_error || PosArguments.Count != 1 || !(PosArguments [0].Expr is Constant)) + if (resolve_error || pos_args.Count != 1 || !(pos_args[0].Expr is Constant)) return null; - return ((Constant) PosArguments [0].Expr).GetValue () as string; + return ((Constant) pos_args[0].Expr).GetValue () as string; } /// @@ -679,7 +696,7 @@ namespace Mono.CSharp { if (resolve_error) return null; - return ((Constant) PosArguments[0].Expr).GetValue () as string; + return ((Constant) pos_args[0].Expr).GetValue () as string; } /// @@ -701,14 +718,14 @@ namespace Mono.CSharp { if (resolve_error) return null; - if (PosArguments == null) + if (pos_args == null) return new ObsoleteAttribute (); - string msg = ((Constant) PosArguments[0].Expr).GetValue () as string; - if (PosArguments.Count == 1) + string msg = ((Constant) pos_args[0].Expr).GetValue () as string; + if (pos_args.Count == 1) return new ObsoleteAttribute (msg); - return new ObsoleteAttribute (msg, ((BoolConstant) PosArguments[1].Expr).Value); + return new ObsoleteAttribute (msg, ((BoolConstant) pos_args[1].Expr).Value); } /// @@ -726,7 +743,7 @@ namespace Mono.CSharp { if (resolve_error) return false; - return ((BoolConstant) PosArguments[0].Expr).Value; + return ((BoolConstant) pos_args[0].Expr).Value; } public TypeSpec GetCoClassAttributeValue () @@ -812,7 +829,7 @@ namespace Mono.CSharp { System.Security.Permissions.SecurityAction GetSecurityActionValue () { - return (SecurityAction) ((Constant) PosArguments[0].Expr).GetValue (); + return (SecurityAction) ((Constant) pos_args[0].Expr).GetValue (); } /// @@ -822,9 +839,9 @@ namespace Mono.CSharp { public void ExtractSecurityPermissionSet (MethodSpec ctor, ref SecurityType permissions) { #if STATIC - object[] values = new object [PosArguments.Count]; + object[] values = new object[pos_args.Count]; for (int i = 0; i < values.Length; ++i) - values [i] = ((Constant) PosArguments [i].Expr).GetValue (); + values[i] = ((Constant) pos_args[i].Expr).GetValue (); PropertyInfo[] prop; object[] prop_values; @@ -865,7 +882,7 @@ namespace Mono.CSharp { public CharSet GetCharSetValue () { - return (CharSet)System.Enum.Parse (typeof (CharSet), ((Constant) PosArguments [0].Expr).GetValue ().ToString ()); + return (CharSet) System.Enum.Parse (typeof (CharSet), ((Constant) pos_args[0].Expr).GetValue ().ToString ()); } public bool HasField (string fieldName) @@ -887,8 +904,8 @@ namespace Mono.CSharp { public bool IsInternalCall () { MethodImplOptions options = 0; - if (PosArguments.Count == 1) { - options = (MethodImplOptions) System.Enum.Parse (typeof (MethodImplOptions), ((Constant) PosArguments[0].Expr).GetValue ().ToString ()); + if (pos_args.Count == 1) { + options = (MethodImplOptions) System.Enum.Parse (typeof (MethodImplOptions), ((Constant) pos_args[0].Expr).GetValue ().ToString ()); } else if (HasField ("Value")) { var named = GetNamedValue ("Value"); options = (MethodImplOptions) System.Enum.Parse (typeof (MethodImplOptions), named.GetValue ().ToString ()); @@ -902,19 +919,19 @@ namespace Mono.CSharp { // public bool IsExplicitLayoutKind () { - if (PosArguments == null || PosArguments.Count != 1) + if (pos_args == null || pos_args.Count != 1) return false; - var value = (LayoutKind) System.Enum.Parse (typeof (LayoutKind), ((Constant) PosArguments[0].Expr).GetValue ().ToString ()); + var value = (LayoutKind) System.Enum.Parse (typeof (LayoutKind), ((Constant) pos_args[0].Expr).GetValue ().ToString ()); return value == LayoutKind.Explicit; } public Expression GetParameterDefaultValue () { - if (PosArguments == null) + if (pos_args == null) return null; - return PosArguments[0].Expr; + return pos_args[0].Expr; } public override bool Equals (object obj) @@ -951,16 +968,16 @@ namespace Mono.CSharp { } byte[] cdata; - if (PosArguments == null && named_values == null) { + if (pos_args == null && named_values == null) { cdata = AttributeEncoder.Empty; } else { AttributeEncoder encoder = new AttributeEncoder (); - if (PosArguments != null) { + if (pos_args != null) { var param_types = ctor.Parameters.Types; - for (int j = 0; j < PosArguments.Count; ++j) { + for (int j = 0; j < pos_args.Count; ++j) { var pt = param_types[j]; - var arg_expr = PosArguments[j].Expr; + var arg_expr = pos_args[j].Expr; if (j == 0) { if ((Type == predefined.IndexerName || Type == predefined.Conditional) && arg_expr is Constant) { string v = ((Constant) arg_expr).GetValue () as string; @@ -984,15 +1001,15 @@ namespace Mono.CSharp { "System.AttributeUsage"); } } else if (Type == predefined.MarshalAs) { - if (PosArguments.Count == 1) { - var u_type = (UnmanagedType) System.Enum.Parse (typeof (UnmanagedType), ((Constant) PosArguments[0].Expr).GetValue ().ToString ()); + if (pos_args.Count == 1) { + var u_type = (UnmanagedType) System.Enum.Parse (typeof (UnmanagedType), ((Constant) pos_args[0].Expr).GetValue ().ToString ()); if (u_type == UnmanagedType.ByValArray && !(Owner is FieldBase)) { Error_AttributeEmitError ("Specified unmanaged type is only valid on fields"); } } } else if (Type == predefined.DllImport) { - if (PosArguments.Count == 1 && PosArguments[0].Expr is Constant) { - var value = ((Constant) PosArguments[0].Expr).GetValue () as string; + if (pos_args.Count == 1 && pos_args[0].Expr is Constant) { + var value = ((Constant) pos_args[0].Expr).GetValue () as string; if (string.IsNullOrEmpty (value)) Error_AttributeEmitError ("DllName cannot be empty"); } @@ -1055,8 +1072,8 @@ namespace Mono.CSharp { // Here we are testing attribute arguments for array usage (error 3016) if (Owner.IsClsComplianceRequired ()) { - if (PosArguments != null) - PosArguments.CheckArrayAsAttribute (context.Module.Compiler); + if (pos_args != null) + pos_args.CheckArrayAsAttribute (context.Module.Compiler); if (NamedArguments == null) return; @@ -1067,10 +1084,10 @@ namespace Mono.CSharp { private Expression GetValue () { - if (PosArguments == null || PosArguments.Count < 1) + if (pos_args == null || pos_args.Count < 1) return null; - return PosArguments [0].Expr; + return pos_args[0].Expr; } public string GetString () diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs index e76fd155d1..6a8eb55921 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs @@ -71,7 +71,7 @@ namespace Mono.CSharp get { return tc.Parent.CurrentType; } } - public TypeParameter[] CurrentTypeParameters { + public TypeParameters CurrentTypeParameters { get { return tc.PartialContainer.CurrentTypeParameters; } } @@ -113,9 +113,9 @@ namespace Mono.CSharp public FullNamedExpression LookupNamespaceOrType (string name, int arity, LookupMode mode, Location loc) { if (arity == 0) { - TypeParameter[] tp = CurrentTypeParameters; + var tp = CurrentTypeParameters; if (tp != null) { - TypeParameter t = TypeParameter.FindTypeParameter (tp, name); + TypeParameter t = tp.Find (name); if (t != null) return new TypeParameterExpr (t, loc); } @@ -201,7 +201,7 @@ namespace Mono.CSharp // from classes from the arraylist `type_bases' // protected TypeSpec base_type; - protected FullNamedExpression base_type_expr; // TODO: It's temporary variable + FullNamedExpression base_type_expr; // TODO: It's temporary variable protected TypeSpec[] iface_exprs; protected List type_bases; @@ -213,6 +213,11 @@ namespace Mono.CSharp TypeContainer InTransit; GenericTypeParameterBuilder[] all_tp_builders; + // + // All recursive type parameters put together sharing same + // TypeParameter instances + // + TypeParameters all_type_parameters; public const string DefaultIndexerName = "Item"; @@ -256,6 +261,12 @@ namespace Mono.CSharp #region Properties + public List BaseTypeExpressions { + get { + return type_bases; + } + } + public override TypeSpec CurrentType { get { if (current_type == null) { @@ -263,7 +274,7 @@ namespace Mono.CSharp // // Switch to inflated version as it's used by all expressions // - var targs = CurrentTypeParameters == null ? TypeSpec.EmptyTypes : CurrentTypeParameters.Select (l => l.Type).ToArray (); + var targs = CurrentTypeParameters == null ? TypeSpec.EmptyTypes : CurrentTypeParameters.Types; current_type = spec.MakeGenericType (this, targs); } else { current_type = spec; @@ -274,9 +285,9 @@ namespace Mono.CSharp } } - public override TypeParameter[] CurrentTypeParameters { + public override TypeParameters CurrentTypeParameters { get { - return PartialContainer.type_params; + return PartialContainer.MemberName.TypeParameters; } } @@ -284,7 +295,7 @@ namespace Mono.CSharp get { int total = all_tp_builders.Length; if (CurrentTypeParameters != null) { - return total - CurrentTypeParameters.Length; + return total - CurrentTypeParameters.Count; } return total; } @@ -326,13 +337,19 @@ namespace Mono.CSharp } } + public TypeParameters TypeParametersAll { + get { + return all_type_parameters; + } + } + #endregion public override void Accept (StructuralVisitor visitor) { visitor.Visit (this); } - + public bool AddMember (MemberCore symbol) { return AddToContainer (symbol, symbol.MemberName.Basename); @@ -450,14 +467,14 @@ namespace Mono.CSharp AddTypeContainer (d); } - private void AddMemberToList (MemberCore mc, List alist, bool isexplicit) + private void AddMemberToList (InterfaceMemberBase mc, List alist) { if (ordered_explicit_member_list == null) { ordered_explicit_member_list = new List (); ordered_member_list = new List (); } - if (isexplicit) { + if (mc.IsExplicitImpl) { if (Kind == MemberKind.Interface) { Report.Error (541, mc.Location, "`{0}': explicit interface declaration can only be declared in a class or struct", @@ -482,10 +499,7 @@ namespace Mono.CSharp if (methods == null) methods = new List (); - if (method.MemberName.Left != null) - AddMemberToList (method, methods, true); - else - AddMemberToList (method, methods, false); + AddMemberToList (method, methods); } public void AddConstructor (Constructor c) @@ -550,10 +564,7 @@ namespace Mono.CSharp if (properties == null) properties = new List (); - if (prop.MemberName.Left != null) - AddMemberToList (prop, properties, true); - else - AddMemberToList (prop, properties, false); + AddMemberToList (prop, properties); } public void AddEvent (Event e) @@ -575,10 +586,8 @@ namespace Mono.CSharp orderedAllMembers.Add (i); if (indexers == null) indexers = new List (); - if (i.IsExplicitImpl) - AddMemberToList (i, indexers, true); - else - AddMemberToList (i, indexers, false); + + AddMemberToList (i, indexers); } public void AddOperator (Operator op) @@ -697,8 +706,7 @@ namespace Mono.CSharp TypeParameterSpec[] ITypeDefinition.TypeParameters { get { - // TODO MemberCache: this is going to hurt - return PartialContainer.type_params.Select (l => l.Type).ToArray (); + return PartialContainer.CurrentTypeParameters.Types; } } @@ -1105,21 +1113,64 @@ namespace Mono.CSharp Parent.MemberCache.AddMember (spec); if (IsGeneric) { - string[] param_names = new string[TypeParameters.Length]; - for (int i = 0; i < TypeParameters.Length; i++) - param_names [i] = TypeParameters[i].Name; + var tparam_names = CreateTypeParameters (); - all_tp_builders = TypeBuilder.DefineGenericParameters (param_names); + all_tp_builders = TypeBuilder.DefineGenericParameters (tparam_names); - int offset = CurrentTypeParametersStartIndex; - for (int i = offset; i < all_tp_builders.Length; i++) { - CurrentTypeParameters [i - offset].Define (all_tp_builders [i], spec); - } + if (CurrentTypeParameters != null) + CurrentTypeParameters.Define (all_tp_builders, spec, CurrentTypeParametersStartIndex, this); } return true; } + string[] CreateTypeParameters () + { + string[] names; + int parent_offset = 0; + var parent_all = Parent.all_type_parameters; + if (parent_all != null) { + if (CurrentTypeParameters == null) { + all_type_parameters = Parent.all_type_parameters; + return Parent.all_tp_builders.Select (l => l.Name).ToArray (); + } + + names = new string[parent_all.Count + CurrentTypeParameters.Count]; + all_type_parameters = new TypeParameters (names.Length); + all_type_parameters.Add (Parent.all_type_parameters); + + parent_offset = all_type_parameters.Count; + for (int i = 0; i < parent_offset; ++i) + names[i] = all_type_parameters[i].MemberName.Name; + + } else { + names = new string[CurrentTypeParameters.Count]; + } + + for (int i = 0; i < CurrentTypeParameters.Count; ++i) { + if (all_type_parameters != null) + all_type_parameters.Add (MemberName.TypeParameters[i]); + + var name = CurrentTypeParameters[i].MemberName.Name; + names[parent_offset + i] = name; + for (int ii = 0; ii < parent_offset + i; ++ii) { + if (names[ii] != name) + continue; + + var tp = CurrentTypeParameters[i]; + var conflict = all_type_parameters[ii]; + + tp.WarningParentNameConflict (conflict); + } + } + + if (all_type_parameters == null) + all_type_parameters = CurrentTypeParameters; + + return names; + } + + // // Creates a proxy base method call inside this container for hoisted base member calls // @@ -1161,18 +1212,20 @@ namespace Mono.CSharp // Copy all base generic method type parameters info // var hoisted_tparams = method.GenericDefinition.TypeParameters; - var type_params = new TypeParameter[hoisted_tparams.Length]; + var tparams = new TypeParameters (); + targs = new TypeArguments (); - targs.Arguments = new TypeSpec[type_params.Length]; - for (int i = 0; i < type_params.Length; ++i) { + targs.Arguments = new TypeSpec[hoisted_tparams.Length]; + for (int i = 0; i < hoisted_tparams.Length; ++i) { var tp = hoisted_tparams[i]; - targs.Add (new TypeParameterName (tp.Name, null, Location)); + tparams.Add (new TypeParameter (tp, this, null, new MemberName (tp.Name, Location), null)); + + targs.Add (new SimpleName (tp.Name, Location)); targs.Arguments[i] = tp; - type_params[i] = new TypeParameter (tp, this, null, new MemberName (tp.Name), null); } - member_name = new MemberName (name, targs, Location); - generic_method = new GenericMethod (NamespaceEntry, this, member_name, type_params, + member_name = new MemberName (name, tparams, Location); + generic_method = new GenericMethod (NamespaceEntry, this, member_name, new TypeExpression (method.ReturnType, Location), cloned_params); } else { member_name = new MemberName (name); @@ -1345,6 +1398,8 @@ namespace Mono.CSharp part.spec = spec; part.current_type = current_type; part.TypeBuilder = TypeBuilder; + part.all_type_parameters = all_type_parameters; + part.all_tp_builders = all_tp_builders; } } @@ -1366,9 +1421,13 @@ namespace Mono.CSharp type_defined = true; - // TODO: Driver resolves only first level of namespace, do the rest here for now - if (IsTopLevel && (ModFlags & Modifiers.COMPILER_GENERATED) == 0) { - NamespaceEntry.Resolve (); + // Nested type share same namespace + if (IsTopLevel && !IsCompilerGenerated) { + NamespaceEntry.Define (); + if (partial_parts != null) { + foreach (var part in partial_parts) + part.NamespaceEntry.Define (); + } } if (!DefineBaseTypes ()) { @@ -1389,16 +1448,17 @@ namespace Mono.CSharp if (PartialContainer.CurrentTypeParameters == null || PartialContainer == this) return; - TypeParameter[] tc_names = PartialContainer.CurrentTypeParameters; - for (int i = 0; i < tc_names.Length; ++i) { - if (tc_names [i].Name != type_params [i].Name) { + var tc_names = PartialContainer.CurrentTypeParameters; + for (int i = 0; i < tc_names.Count; ++i) { + var tp = MemberName.TypeParameters[i]; + if (tc_names[i].MemberName.Name != tp.MemberName.Name) { Report.SymbolRelatedToPreviousError (PartialContainer.Location, ""); Report.Error (264, Location, "Partial declarations of `{0}' must have the same type parameter names in the same order", GetSignatureForError ()); break; } - if (tc_names [i].Variance != type_params [i].Variance) { + if (tc_names[i].Variance != tp.Variance) { Report.SymbolRelatedToPreviousError (PartialContainer.Location, ""); Report.Error (1067, Location, "Partial declarations of `{0}' must have the same type parameter variance modifiers", GetSignatureForError ()); @@ -1431,15 +1491,14 @@ namespace Mono.CSharp void UpdateTypeParameterConstraints (TypeContainer part) { - TypeParameter[] current_params = type_params; - for (int i = 0; i < current_params.Length; i++) { - if (current_params [i].AddPartialConstraints (part, part.type_params [i])) + for (int i = 0; i < CurrentTypeParameters.Count; i++) { + if (CurrentTypeParameters[i].AddPartialConstraints (part, part.MemberName.TypeParameters[i])) continue; Report.SymbolRelatedToPreviousError (Location, ""); Report.Error (265, part.Location, "Partial declarations of `{0}' have inconsistent constraints for type parameter `{1}'", - GetSignatureForError (), current_params [i].GetSignatureForError ()); + GetSignatureForError (), CurrentTypeParameters[i].GetSignatureForError ()); } } @@ -1465,15 +1524,18 @@ namespace Mono.CSharp protected virtual bool DoResolveTypeParameters () { - if (CurrentTypeParameters == null) + var tparams = CurrentTypeParameters; + if (tparams == null) return true; if (PartialContainer != this) throw new InternalErrorException (); var base_context = new BaseContext (this); - foreach (TypeParameter type_param in CurrentTypeParameters) { - if (!type_param.ResolveConstraints (base_context)) { + for (int i = 0; i < tparams.Count; ++i) { + var tp = tparams[i]; + + if (!tp.ResolveConstraints (base_context)) { error = true; return false; } @@ -1892,7 +1954,7 @@ namespace Mono.CSharp int current_starts_index = CurrentTypeParametersStartIndex; for (int i = 0; i < all_tp_builders.Length; i++) { if (i < current_starts_index) { - TypeParameters[i].EmitConstraints (all_tp_builders [i]); + all_type_parameters[i].EmitConstraints (all_tp_builders [i]); } else { var tp = CurrentTypeParameters [i - current_starts_index]; tp.CheckGenericConstraints (!IsObsolete); @@ -2238,9 +2300,9 @@ namespace Mono.CSharp e = null; if (arity == 0) { - TypeParameter[] tp = CurrentTypeParameters; + var tp = CurrentTypeParameters; if (tp != null) { - TypeParameter tparam = TypeParameter.FindTypeParameter (tp, name); + TypeParameter tparam = tp.Find (name); if (tparam != null) e = new TypeParameterExpr (tparam, Location.Null); } @@ -2424,9 +2486,8 @@ namespace Mono.CSharp } Constructor c = new Constructor (this, MemberName.Name, mods, - null, ParametersCompiled.EmptyReadOnlyParameters, - new GeneratedBaseInitializer (Location), - Location); + null, ParametersCompiled.EmptyReadOnlyParameters, Location); + c.Initializer = new GeneratedBaseInitializer (Location); AddConstructor (c); c.Block = new ToplevelBlock (Compiler, ParametersCompiled.EmptyReadOnlyParameters, Location); @@ -3068,7 +3129,7 @@ namespace Mono.CSharp name, attrs) { IsInterface = parent.PartialContainer.Kind == MemberKind.Interface; - IsExplicitImpl = (MemberName.Left != null); + IsExplicitImpl = (MemberName.ExplicitInterface != null); explicit_mod_flags = mod; } @@ -3291,7 +3352,7 @@ namespace Mono.CSharp } if (IsExplicitImpl) { - InterfaceType = MemberName.Left.GetTypeExpression ().ResolveAsType (Parent); + InterfaceType = MemberName.ExplicitInterface.ResolveAsType (Parent); if (InterfaceType == null) return false; @@ -3428,7 +3489,6 @@ namespace Mono.CSharp // public string ShortName { get { return MemberName.Name; } - set { SetMemberName (new MemberName (MemberName.Left, value, Location)); } } // diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs index 142f940934..99eae23a82 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs @@ -112,8 +112,8 @@ namespace Mono.CSharp get { return member_context.CurrentType; } } - public TypeParameter[] CurrentTypeParameters { - get { return member_context.CurrentTypeParameters; } + public TypeParameters CurrentTypeParameters { + get { return member_context.CurrentTypeParameters; } } public MemberCore CurrentTypeDefinition { @@ -238,7 +238,7 @@ namespace Mono.CSharp { if (dynamic_site_container == null) { var mc = member_context.CurrentMemberDefinition as MemberBase; - dynamic_site_container = new DynamicSiteClass (CurrentTypeDefinition.Parent.PartialContainer, mc, CurrentTypeParameters); + dynamic_site_container = new DynamicSiteClass (CurrentTypeDefinition.Parent.PartialContainer, mc, member_context.CurrentTypeParameters); CurrentTypeDefinition.Module.AddCompilerGeneratedClass (dynamic_site_container); dynamic_site_container.CreateType (); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs index 6747212a6b..24fedc69d5 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs @@ -37,7 +37,7 @@ namespace Mono.CSharp // // A scope type parameters either VAR or MVAR // - TypeParameter[] CurrentTypeParameters { get; } + TypeParameters CurrentTypeParameters { get; } // // A member definition of the context. For partial types definition use @@ -393,7 +393,7 @@ namespace Mono.CSharp get { return MemberContext.CurrentType; } } - public TypeParameter[] CurrentTypeParameters { + public TypeParameters CurrentTypeParameters { get { return MemberContext.CurrentTypeParameters; } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index 830ee8e54f..4e4a79f545 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -212,22 +212,20 @@ namespace Mono.CSharp //t "extern_alias_directive : EXTERN_ALIAS error", //t "using_directives : using_directive", //t "using_directives : using_directives using_directive", -//t "using_directive : using_alias_directive", -//t "using_directive : using_namespace_directive", -//t "using_alias_directive : USING IDENTIFIER ASSIGN namespace_or_type_name SEMICOLON", -//t "using_alias_directive : USING error", -//t "using_namespace_directive : USING namespace_name SEMICOLON", +//t "using_directive : using_namespace", +//t "using_namespace : USING namespace_or_type_expr SEMICOLON", +//t "using_namespace : USING IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON", +//t "using_namespace : USING error", //t "$$2 :", //t "$$3 :", -//t "namespace_declaration : opt_attributes NAMESPACE qualified_identifier $$2 OPEN_BRACE $$3 opt_extern_alias_directives opt_using_directives opt_namespace_or_type_declarations CLOSE_BRACE opt_semicolon", -//t "qualified_identifier : IDENTIFIER", -//t "qualified_identifier : qualified_identifier DOT IDENTIFIER", -//t "qualified_identifier : error", +//t "namespace_declaration : opt_attributes NAMESPACE namespace_name $$2 OPEN_BRACE $$3 opt_extern_alias_directives opt_using_directives opt_namespace_or_type_declarations CLOSE_BRACE opt_semicolon", +//t "namespace_name : IDENTIFIER", +//t "namespace_name : namespace_name DOT IDENTIFIER", +//t "namespace_name : error", //t "opt_semicolon :", //t "opt_semicolon : SEMICOLON", //t "opt_comma :", //t "opt_comma : COMMA", -//t "namespace_name : namespace_or_type_name", //t "opt_using_directives :", //t "opt_using_directives : using_directives", //t "opt_extern_alias_directives :", @@ -260,7 +258,7 @@ namespace Mono.CSharp //t "attribute_list : attribute_list COMMA attribute", //t "$$6 :", //t "attribute : attribute_name $$6 opt_attribute_arguments", -//t "attribute_name : namespace_or_type_name", +//t "attribute_name : namespace_or_type_expr", //t "opt_attribute_arguments :", //t "opt_attribute_arguments : OPEN_PARENS attribute_arguments CLOSE_PARENS", //t "attribute_arguments :", @@ -521,11 +519,11 @@ namespace Mono.CSharp //t "delegate_declaration : opt_attributes opt_modifiers DELEGATE member_type type_declaration_name OPEN_PARENS $$60 opt_formal_parameter_list CLOSE_PARENS $$61 opt_type_parameter_constraints_clauses $$62 SEMICOLON", //t "opt_nullable :", //t "opt_nullable : INTERR_NULLABLE", -//t "namespace_or_type_name : member_name", -//t "namespace_or_type_name : qualified_alias_member IDENTIFIER opt_type_argument_list", -//t "member_name : type_name", -//t "member_name : namespace_or_type_name DOT IDENTIFIER opt_type_argument_list", -//t "type_name : IDENTIFIER opt_type_argument_list", +//t "namespace_or_type_expr : member_name", +//t "namespace_or_type_expr : qualified_alias_member IDENTIFIER opt_type_argument_list", +//t "member_name : simple_name_expr", +//t "member_name : namespace_or_type_expr DOT IDENTIFIER opt_type_argument_list", +//t "simple_name_expr : IDENTIFIER opt_type_argument_list", //t "opt_type_argument_list :", //t "opt_type_argument_list : OP_GENERICS_LT type_arguments OP_GENERICS_GT", //t "opt_type_argument_list : OP_GENERICS_LT error", @@ -558,8 +556,8 @@ namespace Mono.CSharp //t "parameter_type : VOID", //t "type_expression_or_array : type_expression", //t "type_expression_or_array : type_expression rank_specifiers", -//t "type_expression : namespace_or_type_name opt_nullable", -//t "type_expression : namespace_or_type_name pointer_stars", +//t "type_expression : namespace_or_type_expr opt_nullable", +//t "type_expression : namespace_or_type_expr pointer_stars", //t "type_expression : builtin_types opt_nullable", //t "type_expression : builtin_types pointer_stars", //t "type_expression : VOID pointer_stars", @@ -716,7 +714,7 @@ namespace Mono.CSharp //t "unbound_type_name : qualified_alias_member identifier_inside_body generic_dimension", //t "unbound_type_name : unbound_type_name DOT identifier_inside_body", //t "unbound_type_name : unbound_type_name DOT identifier_inside_body generic_dimension", -//t "unbound_type_name : namespace_or_type_name DOT identifier_inside_body generic_dimension", +//t "unbound_type_name : namespace_or_type_expr DOT identifier_inside_body generic_dimension", //t "generic_dimension : GENERIC_DIMENSION", //t "qualified_alias_member : IDENTIFIER DOUBLE_COLON", //t "sizeof_expression : SIZEOF open_parens_any type CLOSE_PARENS", @@ -974,6 +972,7 @@ namespace Mono.CSharp //t "if_statement : IF open_parens_any boolean_expression error", //t "$$85 :", //t "switch_statement : SWITCH open_parens_any expression CLOSE_PARENS OPEN_BRACE $$85 opt_switch_sections CLOSE_BRACE", +//t "switch_statement : SWITCH open_parens_any expression error", //t "opt_switch_sections :", //t "opt_switch_sections : switch_sections", //t "switch_sections : switch_section", @@ -990,6 +989,7 @@ namespace Mono.CSharp //t "iteration_statement : for_statement", //t "iteration_statement : foreach_statement", //t "while_statement : WHILE open_parens_any boolean_expression CLOSE_PARENS embedded_statement", +//t "while_statement : WHILE open_parens_any boolean_expression error", //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression CLOSE_PARENS SEMICOLON", //t "do_statement : DO embedded_statement error", //t "do_statement : DO embedded_statement WHILE open_parens_any boolean_expression error", @@ -1012,7 +1012,8 @@ namespace Mono.CSharp //t "for_iterator : statement_expression_list", //t "statement_expression_list : statement_expression", //t "statement_expression_list : statement_expression_list COMMA statement_expression", -//t "foreach_statement : FOREACH open_parens_any type IN expression CLOSE_PARENS", +//t "foreach_statement : FOREACH open_parens_any type error", +//t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", //t "$$92 :", //t "foreach_statement : FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS $$92 embedded_statement", //t "foreach_statement : FOREACH open_parens_any type identifier_inside_body error", @@ -1051,6 +1052,7 @@ namespace Mono.CSharp //t "$$94 :", //t "unsafe_statement : UNSAFE $$94 block", //t "lock_statement : LOCK open_parens_any expression CLOSE_PARENS embedded_statement", +//t "lock_statement : LOCK open_parens_any expression error", //t "$$95 :", //t "$$96 :", //t "fixed_statement : FIXED open_parens_any variable_type identifier_inside_body $$95 using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators CLOSE_PARENS $$96 embedded_statement", @@ -1058,6 +1060,7 @@ namespace Mono.CSharp //t "$$98 :", //t "using_statement : USING open_parens_any variable_type identifier_inside_body $$97 using_initialization CLOSE_PARENS $$98 embedded_statement", //t "using_statement : USING open_parens_any expression CLOSE_PARENS embedded_statement", +//t "using_statement : USING open_parens_any expression error", //t "using_initialization : using_or_fixed_variable_initializer opt_using_or_fixed_variable_declarators", //t "using_initialization : error", //t "using_or_fixed_variable_initializer :", @@ -1417,9 +1420,9 @@ case 13: case_13(); break; case 14: -#line 444 "cs-parser.jay" +#line 451 "cs-parser.jay" { - syntax_error (GetLocation (yyVals[-1+yyTop]), "`alias' expected"); /* TODO: better*/ + Error_SyntaxError (yyToken); } break; case 17: @@ -1452,21 +1455,21 @@ case 25: case 26: case_26(); break; -case 27: - case_27(); - break; -case 32: - case_32(); +case 39: + case_39(); break; -case 41: - case_41(); - break; -case 42: -#line 633 "cs-parser.jay" +case 40: +#line 626 "cs-parser.jay" { current_namespace.DeclarationFound = true; } break; +case 48: + case_48(); + break; +case 49: + case_49(); + break; case 50: case_50(); break; @@ -1486,50 +1489,50 @@ case 55: case_55(); break; case 56: - case_56(); +#line 735 "cs-parser.jay" + { yyVal = "event"; savedCloseLocation = GetLocation (yyVals[0+yyTop]); } break; case 57: - case_57(); +#line 736 "cs-parser.jay" + { yyVal = "return"; savedCloseLocation = GetLocation (yyVals[0+yyTop]); } break; case 58: -#line 742 "cs-parser.jay" - { yyVal = "event"; savedCloseLocation = GetLocation (yyVals[0+yyTop]); } + case_58(); break; case 59: -#line 743 "cs-parser.jay" - { yyVal = "return"; savedCloseLocation = GetLocation (yyVals[0+yyTop]); } +#line 753 "cs-parser.jay" + { + yyVal = new List (4) { (Attribute) yyVals[0+yyTop] }; + } break; case 60: case_60(); break; case 61: -#line 760 "cs-parser.jay" +#line 768 "cs-parser.jay" { - yyVal = new List (4) { (Attribute) yyVals[0+yyTop] }; + ++lexer.parsing_block; } break; case 62: case_62(); break; -case 63: -#line 775 "cs-parser.jay" - { - ++lexer.parsing_block; - } - break; case 64: - case_64(); +#line 787 "cs-parser.jay" + { yyVal = null; } + break; +case 65: + case_65(); break; case 66: -#line 802 "cs-parser.jay" +#line 798 "cs-parser.jay" { yyVal = null; } break; case 67: case_67(); break; case 68: -#line 813 "cs-parser.jay" - { yyVal = null; } + case_68(); break; case 69: case_69(); @@ -1538,66 +1541,66 @@ case 70: case_70(); break; case 71: - case_71(); - break; -case 72: - case_72(); - break; -case 73: -#line 857 "cs-parser.jay" +#line 842 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; -case 75: -#line 865 "cs-parser.jay" +case 73: +#line 850 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 76: - case_76(); +case 74: + case_74(); break; -case 77: - case_77(); +case 75: + case_75(); break; -case 78: -#line 891 "cs-parser.jay" +case 76: +#line 876 "cs-parser.jay" { yyVal = null; } break; -case 79: -#line 895 "cs-parser.jay" +case 77: +#line 880 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; -case 80: -#line 899 "cs-parser.jay" +case 78: +#line 884 "cs-parser.jay" { yyVal = Argument.AType.Out; } break; -case 83: -#line 911 "cs-parser.jay" +case 81: +#line 896 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; -case 84: -#line 915 "cs-parser.jay" +case 82: +#line 900 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; -case 95: - case_95(); +case 93: + case_93(); break; -case 96: -#line 945 "cs-parser.jay" +case 94: +#line 930 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; +case 95: + case_95(); + break; +case 96: + case_96(); + break; case 97: case_97(); break; @@ -1608,49 +1611,49 @@ case 99: case_99(); break; case 100: - case_100(); +#line 971 "cs-parser.jay" + { + Error_SyntaxError (yyToken); + } break; case 101: case_101(); break; case 102: -#line 986 "cs-parser.jay" + case_102(); + break; +case 105: +#line 1012 "cs-parser.jay" { - Error_SyntaxError (yyToken); + current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 103: - case_103(); - break; -case 104: - case_104(); - break; -case 107: -#line 1027 "cs-parser.jay" +case 106: +#line 1016 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; +case 107: + case_107(); + break; case 108: -#line 1031 "cs-parser.jay" +#line 1032 "cs-parser.jay" { - current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); + ++lexer.parsing_block; } break; case 109: case_109(); break; case 110: -#line 1047 "cs-parser.jay" - { - ++lexer.parsing_block; - } + case_110(); break; -case 111: - case_111(); +case 113: + case_113(); break; -case 112: - case_112(); +case 114: + case_114(); break; case 115: case_115(); @@ -1659,127 +1662,127 @@ case 116: case_116(); break; case 117: - case_117(); - break; -case 118: - case_118(); - break; -case 119: -#line 1126 "cs-parser.jay" +#line 1111 "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 121: - case_121(); +case 119: + case_119(); break; -case 122: - case_122(); +case 120: + case_120(); break; -case 125: -#line 1156 "cs-parser.jay" +case 123: +#line 1141 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 126: -#line 1160 "cs-parser.jay" +case 124: +#line 1145 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 127: - case_127(); +case 125: + case_125(); break; -case 128: -#line 1173 "cs-parser.jay" +case 126: +#line 1158 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 129: - case_129(); +case 127: + case_127(); break; -case 132: -#line 1192 "cs-parser.jay" +case 130: +#line 1177 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 133: -#line 1196 "cs-parser.jay" +case 131: +#line 1181 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 134: - case_134(); +case 132: + case_132(); break; -case 135: -#line 1212 "cs-parser.jay" +case 133: +#line 1197 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 136: - case_136(); +case 134: + case_134(); + break; +case 135: + case_135(); + break; +case 138: + case_138(); break; -case 137: - case_137(); +case 139: + case_139(); break; case 140: case_140(); break; case 141: - case_141(); +#line 1268 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.All; + } break; case 142: - case_142(); - break; -case 143: -#line 1283 "cs-parser.jay" +#line 1272 "cs-parser.jay" { - valid_param_mod = ParameterModifierType.All; + lexer.ConstraintsParsing = true; } break; +case 143: + case_143(); + break; case 144: -#line 1287 "cs-parser.jay" +#line 1306 "cs-parser.jay" { - lexer.ConstraintsParsing = true; + lexer.parsing_generic_declaration = true; } break; case 145: case_145(); break; case 146: -#line 1321 "cs-parser.jay" +#line 1316 "cs-parser.jay" { - lexer.parsing_generic_declaration = true; + lexer.ConstraintsParsing = true; } break; case 147: case_147(); break; case 148: -#line 1331 "cs-parser.jay" - { - lexer.ConstraintsParsing = true; - } - break; -case 149: - case_149(); + case_148(); break; case 150: - case_150(); - break; -case 152: -#line 1389 "cs-parser.jay" +#line 1374 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; -case 153: -#line 1393 "cs-parser.jay" +case 151: +#line 1378 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; +case 153: + case_153(); + break; +case 154: + case_154(); + break; case 155: case_155(); break; @@ -1796,23 +1799,23 @@ case 159: case_159(); break; case 160: - case_160(); - break; -case 161: - case_161(); - break; -case 162: -#line 1465 "cs-parser.jay" +#line 1450 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; -case 163: -#line 1469 "cs-parser.jay" +case 161: +#line 1454 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); } break; +case 162: + case_162(); + break; +case 163: + case_163(); + break; case 164: case_164(); break; @@ -1826,30 +1829,30 @@ case 167: case_167(); break; case 168: - case_168(); - break; -case 169: - case_169(); - break; -case 170: -#line 1544 "cs-parser.jay" +#line 1529 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 171: - case_171(); +case 169: + case_169(); break; -case 172: -#line 1585 "cs-parser.jay" +case 170: +#line 1570 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; -case 174: -#line 1593 "cs-parser.jay" +case 172: +#line 1578 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; +case 173: + case_173(); + break; +case 174: + case_174(); + break; case 175: case_175(); break; @@ -1872,16 +1875,16 @@ case 181: case_181(); break; case 182: - case_182(); +#line 1671 "cs-parser.jay" + { + Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); + } break; case 183: case_183(); break; case 184: -#line 1686 "cs-parser.jay" - { - Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); - } + case_184(); break; case 185: case_185(); @@ -1893,28 +1896,28 @@ case 187: case_187(); break; case 188: - case_188(); +#line 1725 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; + } break; case 189: case_189(); break; case 190: -#line 1740 "cs-parser.jay" +#line 1754 "cs-parser.jay" { - valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; + lexer.PropertyParsing = false; } break; case 191: case_191(); break; -case 192: -#line 1769 "cs-parser.jay" - { - lexer.PropertyParsing = false; - } +case 196: + case_196(); break; -case 193: - case_193(); +case 197: + case_197(); break; case 198: case_198(); @@ -1925,23 +1928,23 @@ case 199: case 200: case_200(); break; -case 201: - case_201(); - break; case 202: case_202(); break; +case 203: + case_203(); + break; case 204: - case_204(); +#line 1903 "cs-parser.jay" + { + lexer.ConstraintsParsing = true; + } break; case 205: case_205(); break; case 206: -#line 1918 "cs-parser.jay" - { - lexer.ConstraintsParsing = true; - } + case_206(); break; case 207: case_207(); @@ -1950,173 +1953,176 @@ case 208: case_208(); break; case 209: - case_209(); - break; -case 210: - case_210(); - break; -case 211: -#line 1955 "cs-parser.jay" +#line 1940 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; -case 214: -#line 1967 "cs-parser.jay" +case 212: +#line 1952 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; -case 215: -#line 1971 "cs-parser.jay" +case 213: +#line 1956 "cs-parser.jay" { lexer.parsing_modifiers = true; } break; -case 216: -#line 1978 "cs-parser.jay" +case 214: +#line 1963 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; -case 217: -#line 1982 "cs-parser.jay" +case 215: +#line 1967 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; -case 222: -#line 1990 "cs-parser.jay" +case 220: +#line 1975 "cs-parser.jay" { report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; -case 223: -#line 1994 "cs-parser.jay" +case 221: +#line 1979 "cs-parser.jay" { report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; -case 224: -#line 1998 "cs-parser.jay" +case 222: +#line 1983 "cs-parser.jay" { report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; -case 225: -#line 2004 "cs-parser.jay" +case 223: +#line 1989 "cs-parser.jay" { } break; -case 226: - case_226(); +case 224: + case_224(); break; -case 228: -#line 2037 "cs-parser.jay" +case 226: +#line 2022 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; -case 230: - case_230(); +case 228: + case_228(); break; -case 231: -#line 2053 "cs-parser.jay" +case 229: +#line 2038 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; +case 230: + case_230(); + break; case 232: - case_232(); +#line 2084 "cs-parser.jay" + { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } + break; +case 233: +#line 2085 "cs-parser.jay" + { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 234: -#line 2099 "cs-parser.jay" - { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2086 "cs-parser.jay" + { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 235: -#line 2100 "cs-parser.jay" - { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2087 "cs-parser.jay" + { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 236: -#line 2101 "cs-parser.jay" - { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2088 "cs-parser.jay" + { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 237: -#line 2102 "cs-parser.jay" - { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2089 "cs-parser.jay" + { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 238: -#line 2103 "cs-parser.jay" - { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2091 "cs-parser.jay" + { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 239: -#line 2104 "cs-parser.jay" - { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2092 "cs-parser.jay" + { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 240: -#line 2106 "cs-parser.jay" - { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2094 "cs-parser.jay" + { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 241: -#line 2107 "cs-parser.jay" - { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2095 "cs-parser.jay" + { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 242: -#line 2109 "cs-parser.jay" - { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2096 "cs-parser.jay" + { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 243: -#line 2110 "cs-parser.jay" - { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2097 "cs-parser.jay" + { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 244: -#line 2111 "cs-parser.jay" - { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2098 "cs-parser.jay" + { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 245: -#line 2112 "cs-parser.jay" - { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2099 "cs-parser.jay" + { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 246: -#line 2113 "cs-parser.jay" - { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2100 "cs-parser.jay" + { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 247: -#line 2114 "cs-parser.jay" - { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2101 "cs-parser.jay" + { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 248: -#line 2115 "cs-parser.jay" - { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2102 "cs-parser.jay" + { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 249: -#line 2116 "cs-parser.jay" - { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2103 "cs-parser.jay" + { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 250: -#line 2117 "cs-parser.jay" - { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2104 "cs-parser.jay" + { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 251: -#line 2118 "cs-parser.jay" - { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2105 "cs-parser.jay" + { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 252: -#line 2119 "cs-parser.jay" - { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2106 "cs-parser.jay" + { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 253: -#line 2120 "cs-parser.jay" - { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2107 "cs-parser.jay" + { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 254: -#line 2121 "cs-parser.jay" - { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } +#line 2114 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.DefaultValue; + } break; case 255: -#line 2122 "cs-parser.jay" - { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } + case_255(); break; case 256: -#line 2129 "cs-parser.jay" +#line 2133 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } @@ -2125,10 +2131,7 @@ case 257: case_257(); break; case 258: -#line 2148 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.DefaultValue; - } + case_258(); break; case 259: case_259(); @@ -2145,31 +2148,31 @@ case 262: case 263: case_263(); break; -case 264: - case_264(); - break; case 265: - case_265(); - break; -case 267: -#line 2251 "cs-parser.jay" +#line 2241 "cs-parser.jay" { current_block = null; yyVal = null; } break; -case 270: -#line 2263 "cs-parser.jay" +case 268: +#line 2253 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 271: - case_271(); +case 269: + case_269(); break; -case 272: -#line 2273 "cs-parser.jay" +case 270: +#line 2263 "cs-parser.jay" { ++lexer.parsing_block; } break; +case 271: + case_271(); + break; +case 272: + case_272(); + break; case 273: case_273(); break; @@ -2191,54 +2194,54 @@ case 278: case 279: case_279(); break; -case 280: - case_280(); - break; case 281: - case_281(); - break; -case 283: -#line 2382 "cs-parser.jay" +#line 2372 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 284: - case_284(); +case 282: + case_282(); break; -case 287: -#line 2399 "cs-parser.jay" +case 285: +#line 2389 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 288: -#line 2403 "cs-parser.jay" +case 286: +#line 2393 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; -case 289: - case_289(); +case 287: + case_287(); break; -case 290: -#line 2416 "cs-parser.jay" +case 288: +#line 2406 "cs-parser.jay" { ++lexer.parsing_block; } break; -case 291: - case_291(); +case 289: + case_289(); break; -case 292: - case_292(); +case 290: + case_290(); break; -case 293: -#line 2441 "cs-parser.jay" +case 291: +#line 2431 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; +case 294: + case_294(); + break; +case 295: + case_295(); + break; case 296: case_296(); break; @@ -2257,36 +2260,36 @@ case 300: case 301: case_301(); break; -case 302: - case_302(); - break; case 303: case_303(); break; +case 304: + case_304(); + break; case 305: case_305(); break; case 306: case_306(); break; -case 307: - case_307(); - break; case 308: case_308(); break; -case 310: - case_310(); +case 309: + case_309(); break; -case 311: - case_311(); - break; -case 314: -#line 2604 "cs-parser.jay" +case 312: +#line 2594 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[0+yyTop])); } break; +case 314: + case_314(); + break; +case 315: + case_315(); + break; case 316: case_316(); break; @@ -2294,26 +2297,23 @@ case 317: case_317(); break; case 318: - case_318(); +#line 2652 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; + } break; case 319: case_319(); break; case 320: -#line 2662 "cs-parser.jay" +#line 2674 "cs-parser.jay" { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; + lexer.ConstraintsParsing = false; } break; case 321: case_321(); break; -case 322: -#line 2684 "cs-parser.jay" - { - lexer.ConstraintsParsing = false; - } - break; case 323: case_323(); break; @@ -2323,12 +2323,15 @@ case 325: case 327: case_327(); break; -case 329: - case_329(); +case 328: + case_328(); break; case 330: case_330(); break; +case 331: + case_331(); + break; case 332: case_332(); break; @@ -2336,23 +2339,23 @@ case 333: case_333(); break; case 334: - case_334(); +#line 2779 "cs-parser.jay" + { + lexer.parsing_generic_declaration = true; + } break; case 335: case_335(); break; case 336: -#line 2789 "cs-parser.jay" - { - lexer.parsing_generic_declaration = true; - } - break; -case 337: - case_337(); + case_336(); break; case 338: case_338(); break; +case 339: + case_339(); + break; case 340: case_340(); break; @@ -2365,12 +2368,12 @@ case 342: case 343: case_343(); break; -case 344: - case_344(); - break; case 345: case_345(); break; +case 346: + case_346(); + break; case 347: case_347(); break; @@ -2380,24 +2383,21 @@ case 348: case 349: case_349(); break; -case 350: - case_350(); - break; case 351: - case_351(); - break; -case 353: -#line 2910 "cs-parser.jay" +#line 2897 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; -case 354: -#line 2917 "cs-parser.jay" +case 352: +#line 2904 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; +case 354: + case_354(); + break; case 356: case_356(); break; @@ -2405,37 +2405,40 @@ case 358: case_358(); break; case 360: - case_360(); +#line 2942 "cs-parser.jay" + { + yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + } + break; +case 361: + case_361(); break; case 362: -#line 2955 "cs-parser.jay" +#line 2961 "cs-parser.jay" { - yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 363: case_363(); break; case 364: -#line 2975 "cs-parser.jay" +#line 2970 "cs-parser.jay" { - yyVal = new ComposedCast (((MemberName) yyVals[-1+yyTop]).GetTypeExpression (), (ComposedTypeSpecifier) yyVals[0+yyTop]); + yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 365: - case_365(); - break; -case 366: -#line 2984 "cs-parser.jay" +#line 2974 "cs-parser.jay" { - yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); + yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; +case 366: + case_366(); + break; case 367: -#line 2988 "cs-parser.jay" - { - yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); - } + case_367(); break; case 368: case_368(); @@ -2444,98 +2447,98 @@ case 369: case_369(); break; case 370: - case_370(); - break; -case 371: - case_371(); - break; -case 372: -#line 3027 "cs-parser.jay" +#line 3013 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; -case 373: -#line 3028 "cs-parser.jay" +case 371: +#line 3014 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; -case 374: -#line 3029 "cs-parser.jay" +case 372: +#line 3015 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; -case 375: -#line 3030 "cs-parser.jay" +case 373: +#line 3016 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; -case 376: -#line 3031 "cs-parser.jay" +case 374: +#line 3017 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; -case 377: -#line 3032 "cs-parser.jay" +case 375: +#line 3018 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; -case 379: -#line 3037 "cs-parser.jay" +case 377: +#line 3023 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; -case 380: -#line 3038 "cs-parser.jay" +case 378: +#line 3024 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; -case 381: -#line 3039 "cs-parser.jay" +case 379: +#line 3025 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; -case 382: -#line 3040 "cs-parser.jay" +case 380: +#line 3026 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; -case 383: -#line 3041 "cs-parser.jay" +case 381: +#line 3027 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; -case 384: -#line 3042 "cs-parser.jay" +case 382: +#line 3028 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; -case 385: -#line 3043 "cs-parser.jay" +case 383: +#line 3029 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; -case 386: -#line 3044 "cs-parser.jay" +case 384: +#line 3030 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; -case 387: -#line 3045 "cs-parser.jay" +case 385: +#line 3031 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; -case 408: - case_408(); +case 406: + case_406(); break; -case 409: - case_409(); +case 407: + case_407(); break; -case 413: -#line 3092 "cs-parser.jay" +case 411: +#line 3078 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; -case 414: -#line 3096 "cs-parser.jay" +case 412: +#line 3082 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; -case 415: -#line 3097 "cs-parser.jay" +case 413: +#line 3083 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; -case 420: - case_420(); +case 418: + case_418(); break; -case 421: -#line 3130 "cs-parser.jay" +case 419: +#line 3116 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); } break; +case 420: + case_420(); + break; +case 421: + case_421(); + break; case 422: case_422(); break; @@ -2543,51 +2546,51 @@ case 423: case_423(); break; case 424: - case_424(); +#line 3151 "cs-parser.jay" + { + yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); + } break; case 425: case_425(); break; case 426: -#line 3165 "cs-parser.jay" +#line 3159 "cs-parser.jay" { - yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); + yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } break; case 427: case_427(); break; case 428: -#line 3173 "cs-parser.jay" - { - yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); - } + case_428(); break; case 429: - case_429(); - break; -case 430: - case_430(); +#line 3175 "cs-parser.jay" + { yyVal = null; } break; case 431: -#line 3189 "cs-parser.jay" - { yyVal = null; } + case_431(); + break; +case 432: + case_432(); break; case 433: - case_433(); +#line 3198 "cs-parser.jay" + { yyVal = null; } break; case 434: - case_434(); +#line 3202 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 435: -#line 3212 "cs-parser.jay" - { yyVal = null; } + case_435(); break; case 436: -#line 3216 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_436(); break; case 437: case_437(); @@ -2596,29 +2599,29 @@ case 438: case_438(); break; case 439: - case_439(); +#line 3235 "cs-parser.jay" + { + yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); + } break; case 440: case_440(); break; case 441: -#line 3249 "cs-parser.jay" - { - yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); - } + case_441(); break; case 442: case_442(); break; -case 443: - case_443(); - break; -case 444: - case_444(); +case 445: +#line 3263 "cs-parser.jay" + { yyVal = null; } break; case 447: -#line 3277 "cs-parser.jay" - { yyVal = null; } + case_447(); + break; +case 448: + case_448(); break; case 449: case_449(); @@ -2630,44 +2633,44 @@ case 451: case_451(); break; case 452: - case_452(); - break; -case 453: - case_453(); - break; -case 454: -#line 3329 "cs-parser.jay" +#line 3315 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; +case 456: + case_456(); + break; +case 457: + case_457(); + break; case 458: case_458(); break; case 459: case_459(); break; -case 460: - case_460(); - break; case 461: case_461(); break; -case 463: - case_463(); - break; -case 464: -#line 3374 "cs-parser.jay" +case 462: +#line 3360 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } break; -case 465: -#line 3378 "cs-parser.jay" +case 463: +#line 3364 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } break; +case 464: + case_464(); + break; +case 465: + case_465(); + break; case 466: case_466(); break; @@ -2678,41 +2681,41 @@ case 468: case_468(); break; case 469: - case_469(); - break; -case 470: - case_470(); - break; -case 471: -#line 3424 "cs-parser.jay" +#line 3410 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; -case 473: -#line 3432 "cs-parser.jay" +case 471: +#line 3418 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } break; -case 474: - case_474(); +case 472: + case_472(); break; -case 475: - case_475(); +case 473: + case_473(); break; -case 476: -#line 3452 "cs-parser.jay" +case 474: +#line 3438 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; -case 477: -#line 3459 "cs-parser.jay" +case 475: +#line 3445 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; +case 476: + case_476(); + break; +case 477: + case_477(); + break; case 478: case_478(); break; @@ -2729,26 +2732,26 @@ case 482: case_482(); break; case 483: - case_483(); +#line 3511 "cs-parser.jay" + { + ++lexer.parsing_type; + } break; case 484: case_484(); break; case 485: -#line 3525 "cs-parser.jay" - { - ++lexer.parsing_type; - } - break; -case 486: - case_486(); + case_485(); break; -case 487: - case_487(); +case 488: +#line 3538 "cs-parser.jay" + { yyVal = null; } break; case 490: -#line 3552 "cs-parser.jay" - { yyVal = null; } + case_490(); + break; +case 491: + case_491(); break; case 492: case_492(); @@ -2762,45 +2765,45 @@ case 494: case 495: case_495(); break; -case 496: - case_496(); +case 499: + case_499(); break; -case 497: - case_497(); +case 500: + case_500(); break; case 501: case_501(); break; case 502: - case_502(); - break; -case 503: - case_503(); - break; -case 504: -#line 3630 "cs-parser.jay" +#line 3616 "cs-parser.jay" { yyVal = 2; } break; -case 505: -#line 3634 "cs-parser.jay" +case 503: +#line 3620 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; -case 506: -#line 3641 "cs-parser.jay" +case 504: +#line 3627 "cs-parser.jay" { yyVal = null; } break; -case 507: -#line 3645 "cs-parser.jay" +case 505: +#line 3631 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; +case 506: + case_506(); + break; +case 507: + case_507(); + break; case 508: case_508(); break; @@ -2808,19 +2811,19 @@ case 509: case_509(); break; case 510: - case_510(); +#line 3675 "cs-parser.jay" + { + lexer.TypeOfParsing = true; + } break; case 511: case_511(); break; -case 512: -#line 3689 "cs-parser.jay" - { - lexer.TypeOfParsing = true; - } +case 514: + case_514(); break; -case 513: - case_513(); +case 515: + case_515(); break; case 516: case_516(); @@ -2853,154 +2856,151 @@ case 525: case_525(); break; case 526: - case_526(); +#line 3795 "cs-parser.jay" + { + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); + } break; case 527: case_527(); break; case 528: -#line 3809 "cs-parser.jay" +#line 3808 "cs-parser.jay" { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); + start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; case 529: case_529(); break; case 530: -#line 3822 "cs-parser.jay" - { - start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); - } - break; -case 531: - case_531(); - break; -case 532: -#line 3839 "cs-parser.jay" +#line 3825 "cs-parser.jay" { yyVal = ParametersCompiled.Undefined; } break; -case 534: -#line 3847 "cs-parser.jay" +case 532: +#line 3833 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 535: - case_535(); +case 533: + case_533(); break; -case 536: - case_536(); +case 534: + case_534(); break; -case 538: -#line 3873 "cs-parser.jay" +case 536: +#line 3859 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 539: -#line 3877 "cs-parser.jay" +case 537: +#line 3863 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 540: - case_540(); +case 538: + case_538(); break; -case 541: - case_541(); +case 539: + case_539(); break; -case 543: -#line 3905 "cs-parser.jay" +case 541: +#line 3891 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 544: -#line 3909 "cs-parser.jay" +case 542: +#line 3895 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 545: -#line 3913 "cs-parser.jay" +case 543: +#line 3899 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 546: -#line 3917 "cs-parser.jay" +case 544: +#line 3903 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 547: -#line 3921 "cs-parser.jay" +case 545: +#line 3907 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 548: -#line 3925 "cs-parser.jay" +case 546: +#line 3911 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; +case 548: + case_548(); + break; +case 549: + case_549(); + break; case 550: case_550(); break; -case 551: - case_551(); - break; case 552: case_552(); break; -case 554: - case_554(); - break; -case 555: -#line 3957 "cs-parser.jay" +case 553: +#line 3943 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 556: - case_556(); +case 554: + case_554(); break; -case 557: -#line 3966 "cs-parser.jay" +case 555: +#line 3952 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 558: -#line 3970 "cs-parser.jay" +case 556: +#line 3956 "cs-parser.jay" { yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 560: - case_560(); +case 558: + case_558(); + break; +case 559: + case_559(); break; case 561: case_561(); break; +case 562: + case_562(); + break; case 563: case_563(); break; case 564: case_564(); break; -case 565: - case_565(); - break; case 566: case_566(); break; -case 568: - case_568(); +case 567: + case_567(); break; case 569: case_569(); @@ -3023,14 +3023,17 @@ case 579: case 581: case_581(); break; +case 582: +#line 4080 "cs-parser.jay" + { + yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } + break; case 583: case_583(); break; case 584: -#line 4094 "cs-parser.jay" - { - yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_584(); break; case 585: case_585(); @@ -3072,27 +3075,27 @@ case 597: case_597(); break; case 598: - case_598(); +#line 4177 "cs-parser.jay" + { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 599: case_599(); break; -case 600: -#line 4191 "cs-parser.jay" - { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } - break; -case 601: - case_601(); - break; -case 604: -#line 4207 "cs-parser.jay" +case 602: +#line 4193 "cs-parser.jay" { start_block (lexer.Location); } break; +case 603: + case_603(); + break; case 605: case_605(); break; +case 606: + case_606(); + break; case 607: case_607(); break; @@ -3103,62 +3106,62 @@ case 609: case_609(); break; case 610: - case_610(); +#line 4238 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } break; case 611: case_611(); break; case 612: + case_612(); + break; +case 613: #line 4252 "cs-parser.jay" { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 613: - case_613(); - break; case 614: case_614(); break; case 615: -#line 4266 "cs-parser.jay" + case_615(); + break; +case 621: +#line 4277 "cs-parser.jay" { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } break; -case 616: - case_616(); - break; -case 617: - case_617(); +case 622: + case_622(); break; case 623: -#line 4291 "cs-parser.jay" - { - yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); - } + case_623(); break; case 624: case_624(); break; -case 625: - case_625(); - break; case 626: - case_626(); - break; -case 628: -#line 4320 "cs-parser.jay" +#line 4306 "cs-parser.jay" { yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; -case 629: -#line 4333 "cs-parser.jay" +case 627: +#line 4319 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; +case 628: + case_628(); + break; +case 629: + case_629(); + break; case 630: case_630(); break; @@ -3166,28 +3169,28 @@ case 631: case_631(); break; case 632: - case_632(); +#line 4362 "cs-parser.jay" + { yyVal = null; } break; case 633: - case_633(); +#line 4364 "cs-parser.jay" + { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 634: -#line 4376 "cs-parser.jay" - { yyVal = null; } + case_634(); break; case 635: -#line 4378 "cs-parser.jay" - { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } - break; -case 636: - case_636(); - break; -case 637: -#line 4391 "cs-parser.jay" +#line 4377 "cs-parser.jay" { lexer.parsing_modifiers = false; } break; +case 637: + case_637(); + break; +case 638: + case_638(); + break; case 639: case_639(); break; @@ -3230,21 +3233,21 @@ case 651: case 652: case_652(); break; -case 653: - case_653(); - break; case 654: case_654(); break; case 656: - case_656(); - break; -case 658: -#line 4511 "cs-parser.jay" +#line 4497 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; +case 657: + case_657(); + break; +case 658: + case_658(); + break; case 659: case_659(); break; @@ -3264,29 +3267,29 @@ case 664: case_664(); break; case 665: - case_665(); - break; -case 666: - case_666(); - break; -case 667: -#line 4602 "cs-parser.jay" +#line 4588 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; -case 668: -#line 4606 "cs-parser.jay" +case 666: +#line 4592 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); } break; -case 669: -#line 4613 "cs-parser.jay" +case 667: +#line 4599 "cs-parser.jay" { yyVal = Variance.None; } break; +case 668: + case_668(); + break; +case 669: + case_669(); + break; case 670: case_670(); break; @@ -3294,16 +3297,16 @@ case 671: case_671(); break; case 672: - case_672(); +#line 4644 "cs-parser.jay" + { + yyVal = yyVals[0+yyTop]; + } break; case 673: case_673(); break; case 674: -#line 4658 "cs-parser.jay" - { - yyVal = yyVals[0+yyTop]; - } + case_674(); break; case 675: case_675(); @@ -3311,42 +3314,42 @@ case 675: case 676: case_676(); break; -case 677: - case_677(); - break; -case 678: - case_678(); - break; -case 683: -#line 4702 "cs-parser.jay" +case 681: +#line 4688 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 684: -#line 4706 "cs-parser.jay" +case 682: +#line 4692 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 686: - case_686(); +case 684: + case_684(); break; -case 687: - case_687(); +case 685: + case_685(); break; -case 690: -#line 4740 "cs-parser.jay" +case 688: +#line 4726 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; -case 691: -#line 4744 "cs-parser.jay" +case 689: +#line 4730 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; +case 718: + case_718(); + break; +case 719: + case_719(); + break; case 720: case_720(); break; @@ -3356,11 +3359,11 @@ case 721: case 722: case_722(); break; -case 723: - case_723(); +case 725: + case_725(); break; -case 724: - case_724(); +case 726: + case_726(); break; case 727: case_727(); @@ -3369,35 +3372,35 @@ case 728: case_728(); break; case 729: - case_729(); - break; -case 730: - case_730(); - break; -case 731: -#line 4888 "cs-parser.jay" +#line 4874 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 732: -#line 4892 "cs-parser.jay" +case 730: +#line 4878 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; +case 731: + case_731(); + break; case 733: case_733(); break; -case 735: - case_735(); - break; -case 736: -#line 4913 "cs-parser.jay" +case 734: +#line 4899 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } break; +case 736: + case_736(); + break; +case 737: + case_737(); + break; case 738: case_738(); break; @@ -3407,92 +3410,92 @@ case 739: case 740: case_740(); break; -case 741: - case_741(); - break; case 742: case_742(); break; +case 743: + case_743(); + break; case 744: case_744(); break; -case 745: - case_745(); +case 748: + case_748(); break; -case 746: - case_746(); +case 751: + case_751(); break; -case 750: - case_750(); +case 752: + case_752(); break; case 753: - case_753(); - break; -case 754: - case_754(); - break; -case 755: -#line 5038 "cs-parser.jay" +#line 5024 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); } break; -case 756: - case_756(); +case 754: + case_754(); + break; +case 759: + case_759(); break; case 761: case_761(); break; +case 762: + case_762(); + break; case 763: case_763(); break; case 764: - case_764(); +#line 5074 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } break; case 765: - case_765(); +#line 5078 "cs-parser.jay" + { yyVal = yyVals[-1+yyTop]; } break; case 766: -#line 5088 "cs-parser.jay" +#line 5079 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 767: -#line 5092 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } + case_767(); break; case 768: -#line 5093 "cs-parser.jay" - { yyVal = yyVals[-1+yyTop]; } + case_768(); break; case 769: case_769(); break; -case 770: - case_770(); +case 772: + case_772(); break; -case 771: - case_771(); +case 773: + case_773(); break; case 774: case_774(); break; case 775: - case_775(); +#line 5154 "cs-parser.jay" + { + start_block (GetLocation (yyVals[0+yyTop])); + } break; case 776: case_776(); break; case 777: -#line 5167 "cs-parser.jay" - { - start_block (GetLocation (yyVals[0+yyTop])); - } + case_777(); break; case 778: case_778(); break; -case 779: - case_779(); +case 780: + case_780(); break; case 781: case_781(); @@ -3501,20 +3504,20 @@ case 782: case_782(); break; case 783: - case_783(); - break; -case 784: -#line 5211 "cs-parser.jay" +#line 5205 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; -case 785: -#line 5215 "cs-parser.jay" +case 784: +#line 5209 "cs-parser.jay" { yyVal = new SwitchSection ((List) yyVals[-2+yyTop], current_block); } break; +case 785: + case_785(); + break; case 786: case_786(); break; @@ -3522,14 +3525,14 @@ case 787: case_787(); break; case 788: - case_788(); - break; -case 789: -#line 5244 "cs-parser.jay" +#line 5238 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } break; +case 793: + case_793(); + break; case 794: case_794(); break; @@ -3611,8 +3614,8 @@ case 820: case 821: case_821(); break; -case 828: - case_828(); +case 822: + case_822(); break; case 829: case_829(); @@ -3638,15 +3641,15 @@ case 835: case 836: case_836(); break; -case 839: -#line 5536 "cs-parser.jay" +case 837: + case_837(); + break; +case 840: +#line 5561 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } break; -case 840: - case_840(); - break; case 841: case_841(); break; @@ -3659,48 +3662,48 @@ case 843: case 844: case_844(); break; -case 847: -#line 5589 "cs-parser.jay" +case 845: + case_845(); + break; +case 848: +#line 5610 "cs-parser.jay" { yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 848: - case_848(); - break; case 849: -#line 5608 "cs-parser.jay" + case_849(); + break; +case 850: +#line 5629 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; -case 850: - case_850(); - break; case 851: -#line 5626 "cs-parser.jay" + case_851(); + break; +case 852: +#line 5647 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 852: -#line 5633 "cs-parser.jay" +case 853: +#line 5654 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 853: - case_853(); - break; case 854: -#line 5643 "cs-parser.jay" + case_854(); + break; +case 855: +#line 5664 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } break; -case 855: - case_855(); - break; case 856: case_856(); break; @@ -3722,23 +3725,23 @@ case 861: case 862: case_862(); break; +case 863: + case_863(); + break; case 864: case_864(); break; case 865: -#line 5735 "cs-parser.jay" - { - Error_MissingInitializer (lexer.Location); - } - break; -case 866: - case_866(); + case_865(); break; case 867: case_867(); break; case 868: - case_868(); +#line 5769 "cs-parser.jay" + { + Error_MissingInitializer (lexer.Location); + } break; case 869: case_869(); @@ -3759,73 +3762,73 @@ case 874: case_874(); break; case 875: -#line 5836 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_875(); break; case 876: case_876(); break; case 877: -#line 5851 "cs-parser.jay" + case_877(); + break; +case 878: +#line 5870 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; -case 878: - case_878(); - break; case 879: case_879(); break; +case 880: +#line 5885 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } + break; case 881: case_881(); break; case 882: -#line 5896 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } - break; -case 883: - case_883(); + case_882(); break; case 884: case_884(); break; case 885: - case_885(); +#line 5930 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 886: case_886(); break; -case 890: - case_890(); +case 887: + case_887(); break; -case 896: -#line 5955 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } +case 888: + case_888(); + break; +case 889: + case_889(); break; -case 897: - case_897(); +case 893: + case_893(); break; -case 898: -#line 5974 "cs-parser.jay" +case 899: +#line 5989 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; -case 899: - case_899(); - break; case 900: case_900(); break; case 901: - case_901(); +#line 6008 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 902: case_902(); @@ -3845,24 +3848,27 @@ case 906: case 907: case_907(); break; +case 908: + case_908(); + break; case 909: -#line 6118 "cs-parser.jay" + case_909(); + break; +case 910: + case_910(); + break; +case 912: +#line 6152 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; -case 910: -#line 6125 "cs-parser.jay" +case 913: +#line 6159 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; -case 911: - case_911(); - break; -case 913: - case_913(); - break; case 914: case_914(); break; @@ -3872,12 +3878,6 @@ case 916: case 917: case_917(); break; -case 918: -#line 6171 "cs-parser.jay" - { - yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); - } - break; case 919: case_919(); break; @@ -3885,9 +3885,9 @@ case 920: case_920(); break; case 921: -#line 6188 "cs-parser.jay" +#line 6205 "cs-parser.jay" { - yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 922: @@ -3896,92 +3896,104 @@ case 922: case 923: case_923(); break; +case 924: +#line 6222 "cs-parser.jay" + { + yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } + break; case 925: case_925(); break; case 926: case_926(); break; +case 928: + case_928(); + break; case 929: case_929(); break; -case 930: - case_930(); +case 932: + case_932(); break; -case 938: -#line 6312 "cs-parser.jay" - { - module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; - } +case 933: + case_933(); break; -case 939: -#line 6319 "cs-parser.jay" +case 941: +#line 6346 "cs-parser.jay" { - module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; + module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; } break; -case 940: - case_940(); - break; -case 941: - case_941(); - break; case 942: -#line 6336 "cs-parser.jay" +#line 6353 "cs-parser.jay" { - yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], new MemberName (MemberCache.IndexerNameAlias)); + module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; } break; case 943: -#line 6340 "cs-parser.jay" - { - valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; - } + case_943(); break; case 944: case_944(); break; case 945: - case_945(); +#line 6370 "cs-parser.jay" + { + yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); + } break; case 946: - case_946(); +#line 6374 "cs-parser.jay" + { + valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; + } break; case 947: case_947(); break; +case 948: + case_948(); + break; case 949: -#line 6376 "cs-parser.jay" + case_949(); + break; +case 950: + case_950(); + break; +case 952: +#line 6410 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; -case 951: -#line 6384 "cs-parser.jay" +case 954: +#line 6418 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 952: -#line 6388 "cs-parser.jay" +case 955: +#line 6422 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; -case 953: -#line 6395 "cs-parser.jay" +case 956: +#line 6429 "cs-parser.jay" { yyVal = new List (0); } break; -case 955: - case_955(); +case 958: + case_958(); break; -case 956: - case_956(); +case 959: + case_959(); break; -case 957: - case_957(); +case 960: + case_960(); break; #line default } @@ -4042,33 +4054,43 @@ void case_13() { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; - if (s != "alias"){ + 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); - ubag.AddExternAlias (GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop]), lt, GetLocation (yyVals[0+yyTop])); + if (lang_version == LanguageVersion.ISO_1) + FeatureIsNotAvailable (lt.Location, "external alias"); + + lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; + if (lt.Value == QualifiedAliasMember.GlobalAlias) { + RootNamespace.Error_GlobalNamespaceRedefined (report, lt.Location); + } + + var na = new UsingExternAlias (new SimpleMemberName (lt.Value, lt.Location), GetLocation (yyVals[-3+yyTop])); + current_namespace.AddUsing (na); + + lbag.AddLocation (na, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } } void case_17() -#line 454 "cs-parser.jay" +#line 461 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } void case_18() -#line 459 "cs-parser.jay" +#line 469 "cs-parser.jay" { - if (doc_support) - Lexer.doc_state = XmlCommentState.Allowed; + var un = new UsingNamespace ((ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); + current_namespace.AddUsing (un); + + ubag.AddUsing (GetLocation (yyVals[-2+yyTop]), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + lbag.AddLocation (un, GetLocation (yyVals[0+yyTop])); } void case_19() -#line 467 "cs-parser.jay" +#line 477 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { @@ -4076,29 +4098,25 @@ void case_19() "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])); - ubag.AddUsingAlias (GetLocation (yyVals[-4+yyTop]), lt, GetLocation (yyVals[-2+yyTop]), (MemberName) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); - } + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); + current_namespace.AddUsing (un); + ubag.AddUsingAlias (GetLocation (yyVals[-4+yyTop]), lt, GetLocation (yyVals[-2+yyTop]), (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); + + lbag.AddLocation (un, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + } void case_20() -#line 478 "cs-parser.jay" +#line 491 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; - } + } void case_21() -#line 486 "cs-parser.jay" -{ - current_namespace.AddUsing ((MemberName) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); - ubag.AddUsing (GetLocation (yyVals[-2+yyTop]), (MemberName) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); - } - -void case_22() -#line 499 "cs-parser.jay" +#line 504 "cs-parser.jay" { Attributes attrs = (Attributes) yyVals[-2+yyTop]; - MemberName name = (MemberName) yyVals[0+yyTop]; + var name = (MemberName) yyVals[0+yyTop]; if (attrs != null) { bool valid_global_attrs = true; if ((current_namespace.DeclarationFound || current_namespace != file.NamespaceContainer)) { @@ -4127,16 +4145,16 @@ void case_22() ubag.DeclareNamespace (GetLocation (yyVals[-1+yyTop]), name); } -void case_23() -#line 530 "cs-parser.jay" +void case_22() +#line 535 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; ubag.OpenNamespace (GetLocation (yyVals[0+yyTop])); } -void case_24() -#line 536 "cs-parser.jay" +void case_23() +#line 541 "cs-parser.jay" { current_namespace = current_namespace.Parent; current_class = current_namespace.SlaveDeclSpace; @@ -4148,15 +4166,15 @@ void case_24() ubag.EndNamespace (); } -void case_25() -#line 550 "cs-parser.jay" +void case_24() +#line 555 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName (lt.Value, lt.Location); } -void case_26() -#line 555 "cs-parser.jay" +void case_25() +#line 560 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], lt.Value, lt.Location) { @@ -4164,26 +4182,15 @@ void case_26() }; } -void case_27() -#line 562 "cs-parser.jay" +void case_26() +#line 567 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new MemberName ("", lexer.Location); } -void case_32() -#line 580 "cs-parser.jay" -{ - MemberName name = (MemberName) yyVals[0+yyTop]; - - if (name.TypeArguments != null) - syntax_error (lexer.Location, "namespace name expected"); - - yyVal = name; - } - -void case_41() -#line 612 "cs-parser.jay" +void case_39() +#line 605 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { TypeContainer ds = (TypeContainer)yyVals[0+yyTop]; @@ -4203,8 +4210,8 @@ void case_41() current_namespace.DeclarationFound = true; } -void case_50() -#line 662 "cs-parser.jay" +void case_48() +#line 655 "cs-parser.jay" { var sect = (List) yyVals[0+yyTop]; yyVal = new Attributes (sect); @@ -4216,8 +4223,8 @@ void case_50() } } -void case_51() -#line 673 "cs-parser.jay" +void case_49() +#line 666 "cs-parser.jay" { Attributes attrs = yyVals[-1+yyTop] as Attributes; var sect = (List) yyVals[0+yyTop]; @@ -4231,22 +4238,22 @@ void case_51() yyVal = attrs; } -void case_52() -#line 689 "cs-parser.jay" +void case_50() +#line 682 "cs-parser.jay" { lexer.parsing_attribute_section = true; savedOpenLocation = GetLocation (yyVals[0+yyTop]); } -void case_53() -#line 694 "cs-parser.jay" +void case_51() +#line 687 "cs-parser.jay" { lexer.parsing_attribute_section = false; yyVal = yyVals[0+yyTop]; } -void case_54() -#line 702 "cs-parser.jay" +void case_52() +#line 695 "cs-parser.jay" { current_attr_target = (string) yyVals[-1+yyTop]; if (current_attr_target == "assembly" || current_attr_target == "module") { @@ -4254,8 +4261,8 @@ void case_54() } } -void case_55() -#line 709 "cs-parser.jay" +void case_53() +#line 702 "cs-parser.jay" { /* when attribute target is invalid*/ if (current_attr_target == string.Empty) @@ -4272,8 +4279,8 @@ void case_55() } } -void case_56() -#line 725 "cs-parser.jay" +void case_54() +#line 718 "cs-parser.jay" { yyVal = yyVals[-2+yyTop]; if (yyVals[-1+yyTop] != null) { @@ -4283,16 +4290,16 @@ void case_56() } } -void case_57() -#line 737 "cs-parser.jay" +void case_55() +#line 730 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = CheckAttributeTarget (lt.Value, lt.Location); savedCloseLocation = GetLocation (yyVals[0+yyTop]); } -void case_60() -#line 745 "cs-parser.jay" +void case_58() +#line 738 "cs-parser.jay" { if (yyToken == Token.IDENTIFIER) { Error_SyntaxError (yyToken); @@ -4303,8 +4310,8 @@ void case_60() } } -void case_62() -#line 762 "cs-parser.jay" +void case_60() +#line 755 "cs-parser.jay" { var attrs = (List) yyVals[-2+yyTop]; attrs.Add ((Attribute) yyVals[0+yyTop]); @@ -4313,53 +4320,45 @@ void case_62() yyVal = attrs; } -void case_64() -#line 777 "cs-parser.jay" +void case_62() +#line 770 "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"); + + var tne = (ATypeNameExpression) yyVals[-2+yyTop]; + if (tne.HasTypeArguments) { + report.Error (404, tne.Location, "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)); - if (arguments != null) { - attributeArgumentCommas.Insert (0, savedAttrParenOpenLocation); - attributeArgumentCommas.Add (savedAttrParenCloseLocation); - lbag.AddLocation (yyVal, attributeArgumentCommas); - attributeArgumentCommas.Clear (); - } + yyVal = new Attribute (current_attr_target, tne, (Arguments[]) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), lexer.IsEscapedIdentifier (tne)); } -void case_67() -#line 804 "cs-parser.jay" +void case_65() +#line 789 "cs-parser.jay" { savedAttrParenOpenLocation = GetLocation (yyVals[-2+yyTop]); savedAttrParenCloseLocation = GetLocation (yyVals[0+yyTop]); yyVal = yyVals[-1+yyTop]; } -void case_69() -#line 815 "cs-parser.jay" +void case_67() +#line 800 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); yyVal = new Arguments [] { a, null }; } -void case_70() -#line 821 "cs-parser.jay" +void case_68() +#line 806 "cs-parser.jay" { Arguments a = new Arguments (4); a.Add ((Argument) yyVals[0+yyTop]); yyVal = new Arguments [] { null, a }; } -void case_71() -#line 827 "cs-parser.jay" +void case_69() +#line 812 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] != null) { @@ -4375,8 +4374,8 @@ void case_71() attributeArgumentCommas.Add (GetLocation (yyVals[-1+yyTop])); } -void case_72() -#line 842 "cs-parser.jay" +void case_70() +#line 827 "cs-parser.jay" { Arguments[] o = (Arguments[]) yyVals[-2+yyTop]; if (o [1] == null) { @@ -4387,8 +4386,8 @@ void case_72() attributeArgumentCommas.Add (GetLocation (yyVals[-1+yyTop])); } -void case_76() -#line 867 "cs-parser.jay" +void case_74() +#line 852 "cs-parser.jay" { --lexer.parsing_block; var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; @@ -4396,8 +4395,8 @@ void case_76() lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); } -void case_77() -#line 877 "cs-parser.jay" +void case_75() +#line 862 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "named argument"); @@ -4410,8 +4409,8 @@ void case_77() lbag.AddLocation (yyVal, GetLocation(yyVals[-2+yyTop])); } -void case_95() -#line 930 "cs-parser.jay" +void case_93() +#line 915 "cs-parser.jay" { report.Error (1519, lexer.Location, "Unexpected symbol `{0}' in class, struct, or interface member declaration", GetSymbolName (yyToken)); @@ -4419,16 +4418,16 @@ void case_95() lexer.parsing_generic_declaration = false; } -void case_97() -#line 947 "cs-parser.jay" +void case_95() +#line 932 "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]); lbag.AddMember (current_class, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); } -void case_98() -#line 954 "cs-parser.jay" +void case_96() +#line 939 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -4441,15 +4440,15 @@ void case_98() lexer.parsing_modifiers = true; } -void case_99() -#line 966 "cs-parser.jay" +void case_97() +#line 951 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_100() -#line 971 "cs-parser.jay" +void case_98() +#line 956 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); --lexer.parsing_declaration; @@ -4457,16 +4456,16 @@ void case_100() Lexer.doc_state = XmlCommentState.Allowed; } -void case_101() -#line 978 "cs-parser.jay" +void case_99() +#line 963 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) current_class.OptionalSemicolon = GetLocation (yyVals[-1+yyTop]); yyVal = pop_current_class (); } -void case_103() -#line 993 "cs-parser.jay" +void case_101() +#line 978 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var mod = (Modifiers) yyVals[-3+yyTop]; @@ -4480,8 +4479,8 @@ void case_103() yyVal = current_field; } -void case_104() -#line 1006 "cs-parser.jay" +void case_102() +#line 991 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4493,31 +4492,31 @@ void case_104() current_field = null; } -void case_109() -#line 1036 "cs-parser.jay" +void case_107() +#line 1021 "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])); } -void case_111() -#line 1049 "cs-parser.jay" +void case_109() +#line 1034 "cs-parser.jay" { --lexer.parsing_block; yyVal = new ConstInitializer (current_field, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_112() -#line 1055 "cs-parser.jay" +void case_110() +#line 1040 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); yyVal = null; } -void case_115() -#line 1070 "cs-parser.jay" +void case_113() +#line 1055 "cs-parser.jay" { lexer.parsing_generic_declaration = false; @@ -4531,8 +4530,8 @@ void case_115() yyVal = current_field; } -void case_116() -#line 1085 "cs-parser.jay" +void case_114() +#line 1070 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4544,8 +4543,8 @@ void case_116() current_field = null; } -void case_117() -#line 1098 "cs-parser.jay" +void case_115() +#line 1083 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "fixed size buffers"); @@ -4557,8 +4556,8 @@ void case_117() current_container.AddField (current_field); } -void case_118() -#line 1109 "cs-parser.jay" +void case_116() +#line 1094 "cs-parser.jay" { if (doc_support) { current_field.DocComment = Lexer.consume_doc_comment (); @@ -4571,16 +4570,16 @@ void case_118() current_field = null; } -void case_121() -#line 1132 "cs-parser.jay" +void case_119() +#line 1117 "cs-parser.jay" { ++lexer.parsing_block; current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; start_block (GetLocation (yyVals[0+yyTop])); } -void case_122() -#line 1138 "cs-parser.jay" +void case_120() +#line 1123 "cs-parser.jay" { --lexer.parsing_block; current_field.Initializer = (Expression) yyVals[0+yyTop]; @@ -4589,16 +4588,16 @@ void case_122() current_local_parameters = null; } -void case_127() -#line 1165 "cs-parser.jay" +void case_125() +#line 1150 "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])); } -void case_129() -#line 1175 "cs-parser.jay" +void case_127() +#line 1160 "cs-parser.jay" { --lexer.parsing_block; var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; @@ -4606,39 +4605,39 @@ void case_129() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_134() -#line 1201 "cs-parser.jay" +void case_132() +#line 1186 "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])); } -void case_136() -#line 1214 "cs-parser.jay" +void case_134() +#line 1199 "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])); } -void case_137() -#line 1220 "cs-parser.jay" +void case_135() +#line 1205 "cs-parser.jay" { report.Error (443, lexer.Location, "Value or constant expected"); yyVal = null; } -void case_140() -#line 1230 "cs-parser.jay" +void case_138() +#line 1215 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); yyVal = null; } -void case_141() -#line 1239 "cs-parser.jay" +void case_139() +#line 1224 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.NotAllowed; @@ -4649,8 +4648,8 @@ void case_141() current_container.AddMethod (m); } -void case_142() -#line 1249 "cs-parser.jay" +void case_140() +#line 1234 "cs-parser.jay" { Method method = (Method) yyVals[-2+yyTop]; method.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -4677,8 +4676,8 @@ void case_142() Lexer.doc_state = XmlCommentState.Allowed; } -void case_145() -#line 1289 "cs-parser.jay" +void case_143() +#line 1274 "cs-parser.jay" { lexer.ConstraintsParsing = false; valid_param_mod = 0; @@ -4686,7 +4685,7 @@ void case_145() current_local_parameters = (ParametersCompiled) yyVals[-3+yyTop]; GenericMethod generic = null; - if (name.TypeArguments != null) { + if (name.TypeParameters != null) { generic = new GenericMethod (current_namespace, current_class, name, (FullNamedExpression) yyVals[-7+yyTop], current_local_parameters); @@ -4706,15 +4705,15 @@ void case_145() yyVal = method; } -void case_147() -#line 1324 "cs-parser.jay" +void case_145() +#line 1309 "cs-parser.jay" { lexer.parsing_generic_declaration = false; valid_param_mod = ParameterModifierType.All; } -void case_149() -#line 1333 "cs-parser.jay" +void case_147() +#line 1318 "cs-parser.jay" { lexer.ConstraintsParsing = false; valid_param_mod = 0; @@ -4722,12 +4721,12 @@ void case_149() MemberName name = (MemberName) yyVals[-6+yyTop]; current_local_parameters = (ParametersCompiled) yyVals[-3+yyTop]; - if (yyVals[-1+yyTop] != null && name.TypeArguments == null) + if (yyVals[-1+yyTop] != null && name.TypeParameters == null) report.Error (80, lexer.Location, "Constraints are not allowed on non-generic declarations"); GenericMethod generic = null; - if (name.TypeArguments != null) { + if (name.TypeParameters != null) { generic = new GenericMethod (current_namespace, current_class, name, new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-8+yyTop])), current_local_parameters); @@ -4749,8 +4748,8 @@ void case_149() yyVal = method; } -void case_150() -#line 1370 "cs-parser.jay" +void case_148() +#line 1355 "cs-parser.jay" { MemberName name = (MemberName) yyVals[-3+yyTop]; report.Error (1585, name.Location, @@ -4767,16 +4766,16 @@ void case_150() yyVal = method; } -void case_155() -#line 1399 "cs-parser.jay" +void case_153() +#line 1384 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); lbag.AddLocation (yyVal, parameterListCommas); } -void case_156() -#line 1405 "cs-parser.jay" +void case_154() +#line 1390 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add ((Parameter) yyVals[0+yyTop]); @@ -4786,8 +4785,8 @@ void case_156() lbag.AddLocation (yyVal, parameterListCommas); } -void case_157() -#line 1414 "cs-parser.jay" +void case_155() +#line 1399 "cs-parser.jay" { var pars_list = (List) yyVals[-2+yyTop]; pars_list.Add (new ArglistParameter (GetLocation (yyVals[0+yyTop]))); @@ -4797,8 +4796,8 @@ void case_157() lbag.AddLocation (yyVal, parameterListCommas); } -void case_158() -#line 1423 "cs-parser.jay" +void case_156() +#line 1408 "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"); @@ -4807,8 +4806,8 @@ void case_158() lbag.AddLocation (yyVal, parameterListCommas); } -void case_159() -#line 1431 "cs-parser.jay" +void case_157() +#line 1416 "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"); @@ -4822,8 +4821,8 @@ void case_159() lbag.AddLocation (yyVal, parameterListCommas); } -void case_160() -#line 1444 "cs-parser.jay" +void case_158() +#line 1429 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -4831,8 +4830,8 @@ void case_160() lbag.AddLocation (yyVal, parameterListCommas); } -void case_161() -#line 1451 "cs-parser.jay" +void case_159() +#line 1436 "cs-parser.jay" { report.Error (257, GetLocation (yyVals[-2+yyTop]), "An __arglist parameter must be the last parameter in a formal parameter list"); @@ -4845,15 +4844,15 @@ void case_161() lbag.AddLocation (yyVal, parameterListCommas); } -void case_164() -#line 1471 "cs-parser.jay" +void case_162() +#line 1456 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = ParametersCompiled.EmptyReadOnlyParameters; } -void case_165() -#line 1479 "cs-parser.jay" +void case_163() +#line 1464 "cs-parser.jay" { parameters_bucket.Clear (); Parameter p = (Parameter) yyVals[0+yyTop]; @@ -4863,8 +4862,8 @@ void case_165() yyVal = parameters_bucket; } -void case_166() -#line 1488 "cs-parser.jay" +void case_164() +#line 1473 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter) yyVals[0+yyTop]; @@ -4883,16 +4882,16 @@ void case_166() yyVal = yyVals[-2+yyTop]; } -void case_167() -#line 1512 "cs-parser.jay" +void case_165() +#line 1497 "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); lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_168() -#line 1521 "cs-parser.jay" +void case_166() +#line 1506 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; report.Error (1552, lt.Location, "Array type specifier, [], must appear before parameter name"); @@ -4900,8 +4899,8 @@ void case_168() lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_169() -#line 1531 "cs-parser.jay" +void case_167() +#line 1516 "cs-parser.jay" { Error_SyntaxError (yyToken); Location l = GetLocation (yyVals[0+yyTop]); @@ -4909,8 +4908,8 @@ void case_169() lbag.AddLocation (yyVal, parameterModifierLocation); } -void case_171() -#line 1546 "cs-parser.jay" +void case_169() +#line 1531 "cs-parser.jay" { --lexer.parsing_block; if (lang_version <= LanguageVersion.V_3) { @@ -4948,8 +4947,8 @@ void case_171() ((Parameter) yyVal).DefaultValue = new DefaultParameterValueExpression ((Expression) yyVals[0+yyTop]); } -void case_175() -#line 1595 "cs-parser.jay" +void case_173() +#line 1580 "cs-parser.jay" { Parameter.Modifier p2 = (Parameter.Modifier)yyVals[0+yyTop]; Parameter.Modifier mod = (Parameter.Modifier)yyVals[-1+yyTop] | p2; @@ -4971,8 +4970,8 @@ void case_175() yyVal = mod; } -void case_176() -#line 1619 "cs-parser.jay" +void case_174() +#line 1604 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Ref) == 0) Error_ParameterModifierNotValid ("ref", GetLocation (yyVals[0+yyTop])); @@ -4980,8 +4979,8 @@ void case_176() yyVal = Parameter.Modifier.REF; } -void case_177() -#line 1626 "cs-parser.jay" +void case_175() +#line 1611 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Out) == 0) Error_ParameterModifierNotValid ("out", GetLocation (yyVals[0+yyTop])); @@ -4989,8 +4988,8 @@ void case_177() yyVal = Parameter.Modifier.OUT; } -void case_178() -#line 1633 "cs-parser.jay" +void case_176() +#line 1618 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.This) == 0) Error_ParameterModifierNotValid ("this", GetLocation (yyVals[0+yyTop])); @@ -5001,16 +5000,16 @@ void case_178() yyVal = Parameter.Modifier.This; } -void case_179() -#line 1646 "cs-parser.jay" +void case_177() +#line 1631 "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); lbag.AddLocation (yyVal, savedLocation); } -void case_180() -#line 1652 "cs-parser.jay" +void case_178() +#line 1637 "cs-parser.jay" { report.Error (1751, GetLocation (yyVals[-4+yyTop]), "Cannot specify a default value for a parameter array"); @@ -5019,23 +5018,23 @@ void case_180() lbag.AddLocation (yyVal, savedLocation); } -void case_181() -#line 1660 "cs-parser.jay" +void case_179() +#line 1645 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_182() -#line 1668 "cs-parser.jay" +void case_180() +#line 1653 "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"); savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_183() -#line 1674 "cs-parser.jay" +void case_181() +#line 1659 "cs-parser.jay" { Parameter.Modifier mod = (Parameter.Modifier)yyVals[0+yyTop]; if ((mod & Parameter.Modifier.This) != 0) { @@ -5046,22 +5045,22 @@ void case_183() savedLocation = GetLocation (yyVals[-1+yyTop]); } -void case_185() -#line 1691 "cs-parser.jay" +void case_183() +#line 1676 "cs-parser.jay" { if ((valid_param_mod & ParameterModifierType.Arglist) == 0) report.Error (1669, GetLocation (yyVals[0+yyTop]), "__arglist is not valid in this context"); } -void case_186() -#line 1702 "cs-parser.jay" +void case_184() +#line 1687 "cs-parser.jay" { if (doc_support) tmpComment = Lexer.consume_doc_comment (); } -void case_187() -#line 1707 "cs-parser.jay" +void case_185() +#line 1692 "cs-parser.jay" { var type = (FullNamedExpression) yyVals[-3+yyTop]; current_property = new Property (current_class, type, (Modifiers) yyVals[-4+yyTop], @@ -5076,8 +5075,8 @@ void case_187() lexer.PropertyParsing = true; } -void case_188() -#line 1721 "cs-parser.jay" +void case_186() +#line 1706 "cs-parser.jay" { lexer.PropertyParsing = false; @@ -5085,15 +5084,15 @@ void case_188() current_property.DocComment = ConsumeStoredComment (); } -void case_189() -#line 1728 "cs-parser.jay" +void case_187() +#line 1713 "cs-parser.jay" { lbag.AppendToMember (current_property, GetLocation (yyVals[0+yyTop])); current_property = null; } -void case_191() -#line 1742 "cs-parser.jay" +void case_189() +#line 1727 "cs-parser.jay" { valid_param_mod = 0; var type = (FullNamedExpression) yyVals[-6+yyTop]; @@ -5119,8 +5118,8 @@ void case_191() lexer.PropertyParsing = true; } -void case_193() -#line 1771 "cs-parser.jay" +void case_191() +#line 1756 "cs-parser.jay" { if (current_property.AccessorFirst != null && current_property.AccessorFirst.Block == null) ((Indexer) current_property).ParameterInfo.CheckParameters (current_property); @@ -5132,8 +5131,8 @@ void case_193() current_property = null; } -void case_198() -#line 1790 "cs-parser.jay" +void case_196() +#line 1775 "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 ()); @@ -5145,8 +5144,8 @@ void case_198() } } -void case_199() -#line 1804 "cs-parser.jay" +void case_197() +#line 1789 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5168,8 +5167,8 @@ void case_199() lexer.PropertyParsing = false; } -void case_200() -#line 1825 "cs-parser.jay" +void case_198() +#line 1810 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Get.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5191,8 +5190,8 @@ void case_200() Lexer.doc_state = XmlCommentState.NotAllowed; } -void case_201() -#line 1849 "cs-parser.jay" +void case_199() +#line 1834 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone && lang_version == LanguageVersion.ISO_1) { FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "access modifiers on properties"); @@ -5219,8 +5218,8 @@ void case_201() lexer.PropertyParsing = false; } -void case_202() -#line 1875 "cs-parser.jay" +void case_200() +#line 1860 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { current_property.Set.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5242,30 +5241,30 @@ void case_202() Lexer.doc_state = XmlCommentState.NotAllowed; } -void case_204() -#line 1900 "cs-parser.jay" +void case_202() +#line 1885 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } -void case_205() -#line 1905 "cs-parser.jay" +void case_203() +#line 1890 "cs-parser.jay" { Error_SyntaxError (1043, yyToken, "Invalid accessor body"); yyVal = null; } -void case_207() -#line 1920 "cs-parser.jay" +void case_205() +#line 1905 "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, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); } -void case_208() -#line 1927 "cs-parser.jay" +void case_206() +#line 1912 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -5279,16 +5278,16 @@ void case_208() lexer.parsing_modifiers = true; } -void case_209() -#line 1940 "cs-parser.jay" +void case_207() +#line 1925 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_210() -#line 1946 "cs-parser.jay" +void case_208() +#line 1931 "cs-parser.jay" { if (yyVals[0+yyTop] != null) current_class.OptionalSemicolon = GetLocation (yyVals[0+yyTop]); @@ -5296,8 +5295,8 @@ void case_210() yyVal = pop_current_class (); } -void case_226() -#line 2006 "cs-parser.jay" +void case_224() +#line 1991 "cs-parser.jay" { OperatorDeclaration decl = (OperatorDeclaration) yyVals[-2+yyTop]; if (decl != null) { @@ -5326,15 +5325,15 @@ void case_226() current_local_parameters = null; } -void case_230() -#line 2043 "cs-parser.jay" +void case_228() +#line 2028 "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])); } -void case_232() -#line 2055 "cs-parser.jay" +void case_230() +#line 2040 "cs-parser.jay" { valid_param_mod = 0; @@ -5375,8 +5374,8 @@ void case_232() lbag.AddLocation (yyVal, GetLocation (yyVals[-5+yyTop]), savedOperatorLocation, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_257() -#line 2131 "cs-parser.jay" +void case_255() +#line 2116 "cs-parser.jay" { valid_param_mod = 0; @@ -5392,8 +5391,8 @@ void case_257() lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_259() -#line 2150 "cs-parser.jay" +void case_257() +#line 2135 "cs-parser.jay" { valid_param_mod = 0; @@ -5409,24 +5408,24 @@ void case_259() lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_260() -#line 2165 "cs-parser.jay" +void case_258() +#line 2150 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; yyVal = new OperatorDeclaration (Operator.OpType.Implicit, null, GetLocation (yyVals[-1+yyTop])); } -void case_261() -#line 2171 "cs-parser.jay" +void case_259() +#line 2156 "cs-parser.jay" { Error_SyntaxError (yyToken); current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; yyVal = new OperatorDeclaration (Operator.OpType.Explicit, null, GetLocation (yyVals[-1+yyTop])); } -void case_262() -#line 2181 "cs-parser.jay" +void case_260() +#line 2166 "cs-parser.jay" { Constructor c = (Constructor) yyVals[-1+yyTop]; c.Block = (ToplevelBlock) yyVals[0+yyTop]; @@ -5441,8 +5440,8 @@ void case_262() Lexer.doc_state = XmlCommentState.Allowed; } -void case_263() -#line 2200 "cs-parser.jay" +void case_261() +#line 2185 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -5452,29 +5451,16 @@ void case_263() valid_param_mod = ParameterModifierType.All; } -void case_264() -#line 2209 "cs-parser.jay" +void case_262() +#line 2194 "cs-parser.jay" { valid_param_mod = 0; - current_local_parameters = (ParametersCompiled) yyVals[-1+yyTop]; + 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); - } - -void case_265() -#line 2220 "cs-parser.jay" -{ - var lt = (Tokenizer.LocatedToken) yyVals[-6+yyTop]; - var mods = (Modifiers) yyVals[-7+yyTop]; - ConstructorInitializer ci = (ConstructorInitializer) yyVals[0+yyTop]; + var lt = (Tokenizer.LocatedToken) yyVals[-4+yyTop]; + var mods = (Modifiers) yyVals[-5+yyTop]; + var c = new Constructor (current_class, lt.Value, mods, (Attributes) yyVals[-6+yyTop], current_local_parameters, lt.Location); - Constructor c = new Constructor (current_class, lt.Value, mods, - (Attributes) yyVals[-8+yyTop], current_local_parameters, ci, lt.Location); - if (lt.Value != current_container.MemberName.Name) { report.Error (1520, c.Location, "Class, struct, or interface method must have a return type"); } else if ((mods & Modifiers.STATIC) != 0) { @@ -5483,43 +5469,61 @@ void case_265() "`{0}': static constructor cannot have an access modifier", c.GetSignatureForError ()); } - if (ci != null) { + } + + lbag.AddMember (c, mod_locations, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); + yyVal = c; + + /**/ + /* start block here, so possible anonymous methods inside*/ + /* constructor initializer can get correct parent block*/ + /**/ + start_block (lexer.Location); + } + +void case_263() +#line 2222 "cs-parser.jay" +{ + if (yyVals[0+yyTop] != null) { + var c = (Constructor) yyVals[-1+yyTop]; + c.Initializer = (ConstructorInitializer) yyVals[0+yyTop]; + + if (c.IsStatic) { report.Error (514, c.Location, "`{0}': static constructor cannot have an explicit `this' or `base' constructor call", c.GetSignatureForError ()); - } + lbag.AddMember (c, GetModifierLocations (), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } - - lbag.AddMember (c, GetModifierLocations (), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); - yyVal = c; + + yyVal = yyVals[-1+yyTop]; } -void case_271() -#line 2265 "cs-parser.jay" +void case_269() +#line 2255 "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])); } -void case_273() -#line 2275 "cs-parser.jay" +void case_271() +#line 2265 "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])); } -void case_274() -#line 2281 "cs-parser.jay" +void case_272() +#line 2271 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_275() -#line 2289 "cs-parser.jay" +void case_273() +#line 2279 "cs-parser.jay" { if (doc_support) { tmpComment = Lexer.consume_doc_comment (); @@ -5529,8 +5533,8 @@ void case_275() current_local_parameters = ParametersCompiled.EmptyReadOnlyParameters; } -void case_276() -#line 2298 "cs-parser.jay" +void case_274() +#line 2288 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; if (lt.Value != current_container.MemberName.Name){ @@ -5551,13 +5555,13 @@ void case_276() current_local_parameters = null; } -void case_277() -#line 2323 "cs-parser.jay" +void case_275() +#line 2313 "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) { + if (current_event_field.MemberName.ExplicitInterface != null) { report.Error (71, current_event_field.Location, "`{0}': An explicit interface implementation of an event must use property syntax", current_event_field.GetSignatureForError ()); } @@ -5565,8 +5569,8 @@ void case_277() yyVal = current_event_field; } -void case_278() -#line 2337 "cs-parser.jay" +void case_276() +#line 2327 "cs-parser.jay" { if (doc_support) { current_event_field.DocComment = Lexer.consume_doc_comment (); @@ -5577,8 +5581,8 @@ void case_278() current_event_field = null; } -void case_279() -#line 2350 "cs-parser.jay" +void case_277() +#line 2340 "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); @@ -5587,8 +5591,8 @@ void case_279() lexer.EventParsing = true; } -void case_280() -#line 2358 "cs-parser.jay" +void case_278() +#line 2348 "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"); @@ -5596,8 +5600,8 @@ void case_280() lexer.EventParsing = false; } -void case_281() -#line 2365 "cs-parser.jay" +void case_279() +#line 2355 "cs-parser.jay" { if (doc_support) { current_event.DocComment = Lexer.consume_doc_comment (); @@ -5609,23 +5613,23 @@ void case_281() current_local_parameters = null; } -void case_284() -#line 2384 "cs-parser.jay" +void case_282() +#line 2374 "cs-parser.jay" { --lexer.parsing_block; current_event_field.Initializer = (Expression) yyVals[0+yyTop]; } -void case_289() -#line 2408 "cs-parser.jay" +void case_287() +#line 2398 "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])); } -void case_291() -#line 2418 "cs-parser.jay" +void case_289() +#line 2408 "cs-parser.jay" { --lexer.parsing_block; var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; @@ -5633,8 +5637,8 @@ void case_291() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_292() -#line 2427 "cs-parser.jay" +void case_290() +#line 2417 "cs-parser.jay" { if (current_container.Kind == MemberKind.Interface) { report.Error (68, lexer.Location, "`{0}': event in interface cannot have an initializer", @@ -5647,29 +5651,29 @@ void case_292() } } -void case_296() -#line 2448 "cs-parser.jay" +void case_294() +#line 2438 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } -void case_297() -#line 2453 "cs-parser.jay" +void case_295() +#line 2443 "cs-parser.jay" { report.Error (65, lexer.Location, "`{0}': event property must have both add and remove accessors", current_event.GetSignatureForError ()); } -void case_298() -#line 2458 "cs-parser.jay" +void case_296() +#line 2448 "cs-parser.jay" { report.Error (1055, GetLocation (yyVals[0+yyTop]), "An add or remove accessor expected"); yyVal = null; } -void case_299() -#line 2466 "cs-parser.jay" +void case_297() +#line 2456 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -5682,8 +5686,8 @@ void case_299() lexer.EventParsing = false; } -void case_300() -#line 2478 "cs-parser.jay" +void case_298() +#line 2468 "cs-parser.jay" { lexer.EventParsing = true; @@ -5697,8 +5701,8 @@ void case_300() current_local_parameters = null; } -void case_301() -#line 2494 "cs-parser.jay" +void case_299() +#line 2484 "cs-parser.jay" { if (yyVals[-1+yyTop] != ModifierNone) { report.Error (1609, GetLocation (yyVals[-1+yyTop]), "Modifiers cannot be placed on event accessor declarations"); @@ -5711,8 +5715,8 @@ void case_301() lexer.EventParsing = false; } -void case_302() -#line 2506 "cs-parser.jay" +void case_300() +#line 2496 "cs-parser.jay" { lexer.EventParsing = true; @@ -5726,22 +5730,22 @@ void case_302() current_local_parameters = null; } -void case_303() -#line 2522 "cs-parser.jay" +void case_301() +#line 2512 "cs-parser.jay" { report.Error (73, lexer.Location, "An add or remove accessor must have a body"); yyVal = null; } -void case_305() -#line 2535 "cs-parser.jay" +void case_303() +#line 2525 "cs-parser.jay" { if (doc_support) enumTypeComment = Lexer.consume_doc_comment (); } -void case_306() -#line 2540 "cs-parser.jay" +void case_304() +#line 2530 "cs-parser.jay" { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; @@ -5759,16 +5763,16 @@ void case_306() } } -void case_307() -#line 2557 "cs-parser.jay" +void case_305() +#line 2547 "cs-parser.jay" { /* here will be evaluated after CLOSE_BLACE is consumed.*/ if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_308() -#line 2563 "cs-parser.jay" +void case_306() +#line 2553 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-1+yyTop])); if (yyVals[0+yyTop] != null) { @@ -5783,8 +5787,8 @@ void case_308() yyVal = pop_current_class (); } -void case_310() -#line 2581 "cs-parser.jay" +void case_308() +#line 2571 "cs-parser.jay" { var te = yyVals[0+yyTop] as TypeExpression; if (te == null || !EnumSpec.IsValidUnderlyingType (te.Type)) { @@ -5796,22 +5800,22 @@ void case_310() } } -void case_311() -#line 2592 "cs-parser.jay" +void case_309() +#line 2582 "cs-parser.jay" { Error_TypeExpected (GetLocation (yyVals[-1+yyTop])); yyVal = null; } -void case_316() -#line 2610 "cs-parser.jay" +void case_314() +#line 2600 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } -void case_317() -#line 2618 "cs-parser.jay" +void case_315() +#line 2608 "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]); @@ -5825,8 +5829,8 @@ void case_317() yyVal = em; } -void case_318() -#line 2631 "cs-parser.jay" +void case_316() +#line 2621 "cs-parser.jay" { ++lexer.parsing_block; if (doc_support) { @@ -5835,8 +5839,8 @@ void case_318() } } -void case_319() -#line 2639 "cs-parser.jay" +void case_317() +#line 2629 "cs-parser.jay" { --lexer.parsing_block; @@ -5851,8 +5855,8 @@ void case_319() yyVal = em; } -void case_321() -#line 2664 "cs-parser.jay" +void case_319() +#line 2654 "cs-parser.jay" { valid_param_mod = 0; @@ -5871,8 +5875,8 @@ void case_321() lexer.ConstraintsParsing = true; } -void case_323() -#line 2686 "cs-parser.jay" +void case_321() +#line 2676 "cs-parser.jay" { if (doc_support) { current_delegate.DocComment = Lexer.consume_doc_comment (); @@ -5887,8 +5891,8 @@ void case_323() current_delegate = null; } -void case_325() -#line 2704 "cs-parser.jay" +void case_323() +#line 2694 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types"); @@ -5896,33 +5900,33 @@ void case_325() yyVal = ComposedTypeSpecifier.CreateNullable (GetLocation (yyVals[0+yyTop])); } -void case_327() -#line 2715 "cs-parser.jay" +void case_325() +#line 2705 "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); + yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[0+yyTop], lt1.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_329() -#line 2726 "cs-parser.jay" +void case_327() +#line 2717 "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) { - DotLocation = GetLocation (yyVals[-2+yyTop]) - }; + yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); + lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_330() -#line 2736 "cs-parser.jay" +void case_328() +#line 2726 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; - yyVal = new MemberName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); + yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } -void case_332() -#line 2748 "cs-parser.jay" +void case_330() +#line 2738 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -5934,15 +5938,15 @@ void case_332() yyVal = yyVals[-1+yyTop];; } -void case_333() -#line 2759 "cs-parser.jay" +void case_331() +#line 2749 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = new TypeArguments (); } -void case_334() -#line 2767 "cs-parser.jay" +void case_332() +#line 2757 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -5950,8 +5954,8 @@ void case_334() locationListStack.Push (new List ()); } -void case_335() -#line 2774 "cs-parser.jay" +void case_333() +#line 2764 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -5959,73 +5963,73 @@ void case_335() locationListStack.Peek ().Add (GetLocation (yyVals[-1+yyTop])); } -void case_337() -#line 2791 "cs-parser.jay" +void case_335() +#line 2781 "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); + yyVal = new MemberName (lt.Value, (TypeParameters)yyVals[0+yyTop], lt.Location); } -void case_338() -#line 2800 "cs-parser.jay" +void case_336() +#line 2790 "cs-parser.jay" { MemberName mn = (MemberName)yyVals[0+yyTop]; - if (mn.TypeArguments != null) + if (mn.TypeParameters != null) syntax_error (mn.Location, string.Format ("Member `{0}' cannot declare type arguments", mn.GetSignatureForError ())); } -void case_340() -#line 2811 "cs-parser.jay" +void case_338() +#line 2801 "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); + yyVal = new MemberName (lt.Value, (TypeParameters) yyVals[0+yyTop], (ATypeNameExpression) yyVals[-2+yyTop], lt.Location); } -void case_341() -#line 2820 "cs-parser.jay" +void case_339() +#line 2810 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeContainer.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); } -void case_342() -#line 2825 "cs-parser.jay" +void case_340() +#line 2815 "cs-parser.jay" { lexer.parsing_generic_declaration = false; - yyVal = new MemberName ((MemberName) yyVals[-1+yyTop], TypeContainer.DefaultIndexerName, null, GetLocation (yyVals[0+yyTop])); + yyVal = new MemberName (TypeContainer.DefaultIndexerName, null, (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } -void case_343() -#line 2833 "cs-parser.jay" +void case_341() +#line 2823 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; - yyVal = new MemberName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); + yyVal = new SimpleName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_344() -#line 2839 "cs-parser.jay" +void case_342() +#line 2829 "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); + + yyVal = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) yyVals[-1+yyTop], lt1.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_345() -#line 2847 "cs-parser.jay" +void case_343() +#line 2837 "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); + yyVal = new MemberAccess ((ATypeNameExpression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_347() -#line 2857 "cs-parser.jay" +void case_345() +#line 2847 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -6034,97 +6038,93 @@ void case_347() lbag.AppendTo (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_348() -#line 2868 "cs-parser.jay" +void case_346() +#line 2858 "cs-parser.jay" { - TypeArguments type_args = new TypeArguments (); - type_args.Add ((FullNamedExpression)yyVals[0+yyTop]); - yyVal = type_args; + var tparams = new TypeParameters (); + tparams.Add ((TypeParameter)yyVals[0+yyTop]); + yyVal = tparams; } -void case_349() -#line 2874 "cs-parser.jay" +void case_347() +#line 2864 "cs-parser.jay" { - TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; - type_args.Add ((FullNamedExpression)yyVals[0+yyTop]); - yyVal = type_args; - lbag.AppendTo (type_args, GetLocation (yyVals[-1+yyTop])); + var tparams = (TypeParameters) yyVals[-2+yyTop]; + tparams.Add ((TypeParameter)yyVals[0+yyTop]); + yyVal = tparams; + lbag.AddLocation (yyVals[0+yyTop], GetLocation (yyVals[0+yyTop])); } -void case_350() -#line 2884 "cs-parser.jay" +void case_348() +#line 2874 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop]; - var variance = (Variance) yyVals[-1+yyTop]; - yyVal = new TypeParameterName (lt.Value, (Attributes)yyVals[-2+yyTop], variance, lt.Location); - if (variance != Variance.None) - lbag.AddLocation (yyVal, savedLocation); + yyVal = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)yyVals[-2+yyTop], (Variance) yyVals[-1+yyTop]); } -void case_351() -#line 2892 "cs-parser.jay" +void case_349() +#line 2879 "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); + yyVal = new TypeParameter (MemberName.Null, null, Variance.None); } -void case_356() -#line 2926 "cs-parser.jay" +void case_354() +#line 2913 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_358() -#line 2935 "cs-parser.jay" +void case_356() +#line 2922 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_360() -#line 2944 "cs-parser.jay" +void case_358() +#line 2931 "cs-parser.jay" { report.Error (1536, GetLocation (yyVals[0+yyTop]), "Invalid parameter type `void'"); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_363() -#line 2960 "cs-parser.jay" +void case_361() +#line 2947 "cs-parser.jay" { - MemberName name = (MemberName) yyVals[-1+yyTop]; - if (yyVals[0+yyTop] != null) { - yyVal = new ComposedCast (name.GetTypeExpression (), (ComposedTypeSpecifier) yyVals[0+yyTop]); + yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } else { - if (name.Left == null && name.Name == "var") - yyVal = new VarExpr (name.Location); + var sn = yyVals[-1+yyTop] as SimpleName; + if (sn != null && sn.Name == "var") + yyVal = new VarExpr (sn.Location); else - yyVal = name.GetTypeExpression (); + yyVal = yyVals[-1+yyTop]; } } -void case_365() -#line 2977 "cs-parser.jay" +void case_363() +#line 2963 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_368() -#line 2993 "cs-parser.jay" +void case_366() +#line 2979 "cs-parser.jay" { var types = new List (2); types.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = types; } -void case_369() -#line 2999 "cs-parser.jay" +void case_367() +#line 2985 "cs-parser.jay" { var types = (List) yyVals[-2+yyTop]; types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6132,8 +6132,8 @@ void case_369() yyVal = types; } -void case_370() -#line 3009 "cs-parser.jay" +void case_368() +#line 2995 "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 ()); @@ -6141,36 +6141,36 @@ void case_370() yyVal = yyVals[0+yyTop]; } -void case_371() -#line 3016 "cs-parser.jay" +void case_369() +#line 3002 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } -void case_408() -#line 3078 "cs-parser.jay" +void case_406() +#line 3064 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } -void case_409() -#line 3082 "cs-parser.jay" +void case_407() +#line 3068 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); } -void case_420() -#line 3123 "cs-parser.jay" +void case_418() +#line 3109 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_422() -#line 3135 "cs-parser.jay" +void case_420() +#line 3121 "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) { @@ -6178,8 +6178,8 @@ void case_422() }; } -void case_423() -#line 3142 "cs-parser.jay" +void case_421() +#line 3128 "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) { @@ -6187,8 +6187,8 @@ void case_423() }; } -void case_424() -#line 3149 "cs-parser.jay" +void case_422() +#line 3135 "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) { @@ -6196,8 +6196,8 @@ void case_424() }; } -void case_425() -#line 3156 "cs-parser.jay" +void case_423() +#line 3142 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6206,29 +6206,29 @@ void case_425() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_427() -#line 3166 "cs-parser.jay" +void case_425() +#line 3152 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_429() -#line 3174 "cs-parser.jay" +void case_427() +#line 3160 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_430() -#line 3182 "cs-parser.jay" +void case_428() +#line 3168 "cs-parser.jay" { yyVal = new Invocation ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_433() -#line 3195 "cs-parser.jay" +void case_431() +#line 3181 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = CollectionOrObjectInitializers.Empty; @@ -6239,23 +6239,23 @@ void case_433() } } -void case_434() -#line 3205 "cs-parser.jay" +void case_432() +#line 3191 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_437() -#line 3221 "cs-parser.jay" +void case_435() +#line 3207 "cs-parser.jay" { var a = new List (); a.Add ((Expression) yyVals[0+yyTop]); yyVal = a; } -void case_438() -#line 3227 "cs-parser.jay" +void case_436() +#line 3213 "cs-parser.jay" { var a = (List)yyVals[-2+yyTop]; a.Add ((Expression) yyVals[0+yyTop]); @@ -6263,23 +6263,23 @@ void case_438() yyVal = a; } -void case_439() -#line 3233 "cs-parser.jay" +void case_437() +#line 3219 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } -void case_440() -#line 3241 "cs-parser.jay" +void case_438() +#line 3227 "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])); } -void case_442() -#line 3250 "cs-parser.jay" +void case_440() +#line 3236 "cs-parser.jay" { CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName; if (csn == null) @@ -6288,8 +6288,8 @@ void case_442() yyVal = new CompletionElementInitializer (csn.Prefix, csn.Location); } -void case_443() -#line 3258 "cs-parser.jay" +void case_441() +#line 3244 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = null; @@ -6297,23 +6297,23 @@ void case_443() yyVal = new CollectionElementInitializer ((List)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_444() -#line 3265 "cs-parser.jay" +void case_442() +#line 3251 "cs-parser.jay" { report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); yyVal = null; } -void case_449() -#line 3283 "cs-parser.jay" +void case_447() +#line 3269 "cs-parser.jay" { Arguments list = new Arguments (4); list.Add ((Argument) yyVals[0+yyTop]); yyVal = list; } -void case_450() -#line 3289 "cs-parser.jay" +void case_448() +#line 3275 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; if (list [list.Count - 1] is NamedArgument) @@ -6324,8 +6324,8 @@ void case_450() yyVal = list; } -void case_451() -#line 3299 "cs-parser.jay" +void case_449() +#line 3285 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; NamedArgument a = (NamedArgument) yyVals[0+yyTop]; @@ -6341,65 +6341,65 @@ void case_451() yyVal = list; } -void case_452() -#line 3314 "cs-parser.jay" +void case_450() +#line 3300 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[0+yyTop]), "An argument is missing"); yyVal = yyVals[-1+yyTop]; } -void case_453() -#line 3319 "cs-parser.jay" +void case_451() +#line 3305 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } -void case_458() -#line 3340 "cs-parser.jay" +void case_456() +#line 3326 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_459() -#line 3345 "cs-parser.jay" +void case_457() +#line 3331 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_460() -#line 3350 "cs-parser.jay" +void case_458() +#line 3336 "cs-parser.jay" { yyVal = new Argument (new Arglist ((Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_461() -#line 3355 "cs-parser.jay" +void case_459() +#line 3341 "cs-parser.jay" { yyVal = new Argument (new Arglist (GetLocation (yyVals[-2+yyTop]))); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_463() -#line 3367 "cs-parser.jay" +void case_461() +#line 3353 "cs-parser.jay" { yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_466() -#line 3383 "cs-parser.jay" +void case_464() +#line 3369 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_467() -#line 3389 "cs-parser.jay" +void case_465() +#line 3375 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6407,23 +6407,23 @@ void case_467() yyVal = list; } -void case_468() -#line 3395 "cs-parser.jay" +void case_466() +#line 3381 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } -void case_469() -#line 3403 "cs-parser.jay" +void case_467() +#line 3389 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); yyVal = args; } -void case_470() -#line 3409 "cs-parser.jay" +void case_468() +#line 3395 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) @@ -6434,22 +6434,22 @@ void case_470() yyVal = args; } -void case_474() -#line 3437 "cs-parser.jay" +void case_472() +#line 3423 "cs-parser.jay" { yyVal = new ElementAccess (new BaseThis (GetLocation (yyVals[-3+yyTop])), (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_475() -#line 3442 "cs-parser.jay" +void case_473() +#line 3428 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); } -void case_478() -#line 3464 "cs-parser.jay" +void case_476() +#line 3450 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (lang_version <= LanguageVersion.ISO_2) @@ -6463,8 +6463,8 @@ void case_478() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_479() -#line 3477 "cs-parser.jay" +void case_477() +#line 3463 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); @@ -6472,8 +6472,8 @@ void case_479() yyVal = new NewInitialize ((FullNamedExpression) yyVals[-1+yyTop], null, (CollectionOrObjectInitializers) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_480() -#line 3489 "cs-parser.jay" +void case_478() +#line 3475 "cs-parser.jay" { yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (List) yyVals[-3+yyTop], new ComposedTypeSpecifier (((List) yyVals[-3+yyTop]).Count, GetLocation (yyVals[-4+yyTop])) { @@ -6482,8 +6482,8 @@ void case_480() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_481() -#line 3497 "cs-parser.jay" +void case_479() +#line 3483 "cs-parser.jay" { if (yyVals[0+yyTop] == null) report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); @@ -6491,8 +6491,8 @@ void case_481() yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-2+yyTop], (ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); } -void case_482() -#line 3504 "cs-parser.jay" +void case_480() +#line 3490 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays"); @@ -6500,29 +6500,29 @@ void case_482() yyVal = new ImplicitlyTypedArrayCreation ((ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_483() -#line 3511 "cs-parser.jay" +void case_481() +#line 3497 "cs-parser.jay" { report.Error (178, GetLocation (yyVals[-1+yyTop]), "Invalid rank specifier, expecting `,' or `]'"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], null, GetLocation (yyVals[-6+yyTop])); } -void case_484() -#line 3516 "cs-parser.jay" +void case_482() +#line 3502 "cs-parser.jay" { Error_SyntaxError (1526, yyToken, "Unexpected symbol"); yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_486() -#line 3527 "cs-parser.jay" +void case_484() +#line 3513 "cs-parser.jay" { --lexer.parsing_type; yyVal = yyVals[0+yyTop]; } -void case_487() -#line 3535 "cs-parser.jay" +void case_485() +#line 3521 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); @@ -6533,16 +6533,16 @@ void case_487() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_492() -#line 3558 "cs-parser.jay" +void case_490() +#line 3544 "cs-parser.jay" { var a = new List (4); a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); yyVal = a; } -void case_493() -#line 3564 "cs-parser.jay" +void case_491() +#line 3550 "cs-parser.jay" { var a = (List) yyVals[-2+yyTop]; a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -6551,60 +6551,60 @@ void case_493() yyVal = a; } -void case_494() -#line 3575 "cs-parser.jay" +void case_492() +#line 3561 "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])); } -void case_495() -#line 3581 "cs-parser.jay" +void case_493() +#line 3567 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (new SimpleName (lt.Value, lt.Location), lt.Value, lt.Location); } -void case_496() -#line 3587 "cs-parser.jay" +void case_494() +#line 3573 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } -void case_497() -#line 3592 "cs-parser.jay" +void case_495() +#line 3578 "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; } -void case_501() -#line 3607 "cs-parser.jay" +void case_499() +#line 3593 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_502() -#line 3615 "cs-parser.jay" +void case_500() +#line 3601 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_503() -#line 3620 "cs-parser.jay" +void case_501() +#line 3606 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_508() -#line 3650 "cs-parser.jay" +void case_506() +#line 3636 "cs-parser.jay" { var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); ai.VariableDeclaration = current_variable; @@ -6612,8 +6612,8 @@ void case_508() yyVal = ai; } -void case_509() -#line 3657 "cs-parser.jay" +void case_507() +#line 3643 "cs-parser.jay" { var ai = new ArrayInitializer ((List) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); ai.VariableDeclaration = current_variable; @@ -6625,16 +6625,16 @@ void case_509() yyVal = ai; } -void case_510() -#line 3671 "cs-parser.jay" +void case_508() +#line 3657 "cs-parser.jay" { var list = new List (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_511() -#line 3677 "cs-parser.jay" +void case_509() +#line 3663 "cs-parser.jay" { var list = (List) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6642,31 +6642,31 @@ void case_511() yyVal = list; } -void case_513() -#line 3691 "cs-parser.jay" +void case_511() +#line 3677 "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])); } -void case_516() -#line 3702 "cs-parser.jay" +void case_514() +#line 3688 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } -void case_517() -#line 3710 "cs-parser.jay" +void case_515() +#line 3696 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (int) yyVals[0+yyTop], lt.Location); } -void case_518() -#line 3716 "cs-parser.jay" +void case_516() +#line 3702 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6675,8 +6675,8 @@ void case_518() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_519() -#line 3724 "cs-parser.jay" +void case_517() +#line 3710 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6685,8 +6685,8 @@ void case_519() }; } -void case_520() -#line 3732 "cs-parser.jay" +void case_518() +#line 3718 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6695,21 +6695,21 @@ void case_520() }; } -void case_521() -#line 3740 "cs-parser.jay" +void case_519() +#line 3726 "cs-parser.jay" { - var te = ((MemberName) yyVals[-3+yyTop]).GetTypeExpression (); - if (te.HasTypeArguments) + var tne = (ATypeNameExpression) yyVals[-3+yyTop]; + if (tne.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) { + yyVal = new MemberAccess (tne, lt.Value, (int) yyVals[0+yyTop], lt.Location) { DotLocation = GetLocation (yyVals[-2+yyTop]) - }; + }; } -void case_522() -#line 3754 "cs-parser.jay" +void case_520() +#line 3740 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); @@ -6717,8 +6717,8 @@ void case_522() yyVal = yyVals[0+yyTop]; } -void case_523() -#line 3764 "cs-parser.jay" +void case_521() +#line 3750 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) @@ -6727,36 +6727,36 @@ void case_523() yyVal = lt; } -void case_524() -#line 3775 "cs-parser.jay" +void case_522() +#line 3761 "cs-parser.jay" { yyVal = new SizeOf ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_525() -#line 3783 "cs-parser.jay" +void case_523() +#line 3769 "cs-parser.jay" { yyVal = new CheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_526() -#line 3791 "cs-parser.jay" +void case_524() +#line 3777 "cs-parser.jay" { yyVal = new UnCheckedExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_527() -#line 3799 "cs-parser.jay" +void case_525() +#line 3785 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess (new Indirection ((Expression) yyVals[-3+yyTop], GetLocation (yyVals[-2+yyTop])), lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); } -void case_529() -#line 3811 "cs-parser.jay" +void case_527() +#line 3797 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { @@ -6766,8 +6766,8 @@ void case_529() } } -void case_531() -#line 3824 "cs-parser.jay" +void case_529() +#line 3810 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); @@ -6778,8 +6778,8 @@ void case_531() } } -void case_535() -#line 3849 "cs-parser.jay" +void case_533() +#line 3835 "cs-parser.jay" { valid_param_mod = 0; yyVal = yyVals[-1+yyTop]; @@ -6787,8 +6787,8 @@ void case_535() savedCloseLocation = GetLocation (yyVals[-2+yyTop]); } -void case_536() -#line 3859 "cs-parser.jay" +void case_534() +#line 3845 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); @@ -6797,15 +6797,15 @@ void case_536() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_540() -#line 3879 "cs-parser.jay" +void case_538() +#line 3865 "cs-parser.jay" { yyVal = new Cast ((FullNamedExpression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_541() -#line 3884 "cs-parser.jay" +void case_539() +#line 3870 "cs-parser.jay" { if (!async_block) { report.Error (1992, GetLocation (yyVals[-1+yyTop]), @@ -6817,134 +6817,134 @@ void case_541() yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_550() -#line 3931 "cs-parser.jay" +void case_548() +#line 3917 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_551() -#line 3936 "cs-parser.jay" +void case_549() +#line 3922 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_552() -#line 3941 "cs-parser.jay" +void case_550() +#line 3927 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_554() -#line 3950 "cs-parser.jay" +void case_552() +#line 3936 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_556() -#line 3959 "cs-parser.jay" +void case_554() +#line 3945 "cs-parser.jay" { /* Shift/Reduce conflict*/ yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_560() -#line 3976 "cs-parser.jay" +void case_558() +#line 3962 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_561() -#line 3981 "cs-parser.jay" +void case_559() +#line 3967 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_563() -#line 3990 "cs-parser.jay" +void case_561() +#line 3976 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_564() -#line 3995 "cs-parser.jay" +void case_562() +#line 3981 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_565() -#line 4000 "cs-parser.jay" +void case_563() +#line 3986 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_566() -#line 4005 "cs-parser.jay" +void case_564() +#line 3991 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_568() -#line 4014 "cs-parser.jay" +void case_566() +#line 4000 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_569() -#line 4019 "cs-parser.jay" +void case_567() +#line 4005 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_571() -#line 4028 "cs-parser.jay" +void case_569() +#line 4014 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_573() -#line 4037 "cs-parser.jay" +void case_571() +#line 4023 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_575() -#line 4046 "cs-parser.jay" +void case_573() +#line 4032 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_577() -#line 4055 "cs-parser.jay" +void case_575() +#line 4041 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_579() -#line 4064 "cs-parser.jay" +void case_577() +#line 4050 "cs-parser.jay" { yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_581() -#line 4073 "cs-parser.jay" +void case_579() +#line 4059 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); @@ -6952,85 +6952,85 @@ void case_581() yyVal = new Nullable.NullCoalescingOperator ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_583() -#line 4084 "cs-parser.jay" +void case_581() +#line 4070 "cs-parser.jay" { yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-4+yyTop]), (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_585() -#line 4096 "cs-parser.jay" +void case_583() +#line 4082 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_586() -#line 4101 "cs-parser.jay" +void case_584() +#line 4087 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_587() -#line 4106 "cs-parser.jay" +void case_585() +#line 4092 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_588() -#line 4111 "cs-parser.jay" +void case_586() +#line 4097 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_589() -#line 4116 "cs-parser.jay" +void case_587() +#line 4102 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_590() -#line 4121 "cs-parser.jay" +void case_588() +#line 4107 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_591() -#line 4126 "cs-parser.jay" +void case_589() +#line 4112 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_592() -#line 4131 "cs-parser.jay" +void case_590() +#line 4117 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_593() -#line 4136 "cs-parser.jay" +void case_591() +#line 4122 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_594() -#line 4141 "cs-parser.jay" +void case_592() +#line 4127 "cs-parser.jay" { yyVal = new CompoundAssign ( Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_595() -#line 4149 "cs-parser.jay" +void case_593() +#line 4135 "cs-parser.jay" { var pars = new List (4); pars.Add ((Parameter) yyVals[0+yyTop]); @@ -7038,8 +7038,8 @@ void case_595() yyVal = pars; } -void case_596() -#line 4156 "cs-parser.jay" +void case_594() +#line 4142 "cs-parser.jay" { var pars = (List) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; @@ -7053,39 +7053,39 @@ void case_596() yyVal = pars; } -void case_597() -#line 4172 "cs-parser.jay" +void case_595() +#line 4158 "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); } -void case_598() -#line 4178 "cs-parser.jay" +void case_596() +#line 4164 "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); } -void case_599() -#line 4184 "cs-parser.jay" +void case_597() +#line 4170 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } -void case_601() -#line 4192 "cs-parser.jay" +void case_599() +#line 4178 "cs-parser.jay" { var pars_list = (List) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); lbag.AddLocation (yyVal, parameterListCommas); } -void case_605() -#line 4209 "cs-parser.jay" +void case_603() +#line 4195 "cs-parser.jay" { Block b = end_block (lexer.Location); b.IsCompilerGenerated = true; @@ -7093,94 +7093,94 @@ void case_605() yyVal = b; } -void case_607() -#line 4220 "cs-parser.jay" +void case_605() +#line 4206 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = EmptyExpression.Null; } -void case_608() -#line 4228 "cs-parser.jay" +void case_606() +#line 4214 "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); } -void case_609() -#line 4234 "cs-parser.jay" +void case_607() +#line 4220 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_610() -#line 4239 "cs-parser.jay" +void case_608() +#line 4225 "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); } -void case_611() -#line 4245 "cs-parser.jay" +void case_609() +#line 4231 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_613() -#line 4254 "cs-parser.jay" +void case_611() +#line 4240 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop])); } -void case_614() -#line 4259 "cs-parser.jay" +void case_612() +#line 4245 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_616() -#line 4268 "cs-parser.jay" +void case_614() +#line 4254 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop])); } -void case_617() -#line 4273 "cs-parser.jay" +void case_615() +#line 4259 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-7+yyTop]), GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_624() -#line 4296 "cs-parser.jay" +void case_622() +#line 4282 "cs-parser.jay" { yyVal = new RefValueExpr ((Expression) yyVals[-3+yyTop], (FullNamedExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_625() -#line 4301 "cs-parser.jay" +void case_623() +#line 4287 "cs-parser.jay" { yyVal = new RefTypeExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_626() -#line 4306 "cs-parser.jay" +void case_624() +#line 4292 "cs-parser.jay" { yyVal = new MakeRefExpr ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_630() -#line 4335 "cs-parser.jay" +void case_628() +#line 4321 "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]); @@ -7192,8 +7192,8 @@ void case_630() lbag.AddMember (current_class, GetModifierLocations (), GetLocation (yyVals[-2+yyTop])); } -void case_631() -#line 4347 "cs-parser.jay" +void case_629() +#line 4333 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -7207,16 +7207,16 @@ void case_631() lexer.parsing_modifiers = true; } -void case_632() -#line 4360 "cs-parser.jay" +void case_630() +#line 4346 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } -void case_633() -#line 4366 "cs-parser.jay" +void case_631() +#line 4352 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); if (yyVals[0+yyTop] != null) @@ -7224,16 +7224,16 @@ void case_633() yyVal = pop_current_class (); } -void case_636() -#line 4383 "cs-parser.jay" +void case_634() +#line 4369 "cs-parser.jay" { mod_locations = null; yyVal = ModifierNone; lexer.parsing_modifiers = false; } -void case_639() -#line 4397 "cs-parser.jay" +void case_637() +#line 4383 "cs-parser.jay" { var m1 = (Modifiers) yyVals[-1+yyTop]; var m2 = (Modifiers) yyVals[0+yyTop]; @@ -7250,8 +7250,8 @@ void case_639() yyVal = m1 | m2; } -void case_640() -#line 4416 "cs-parser.jay" +void case_638() +#line 4402 "cs-parser.jay" { yyVal = Modifiers.NEW; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7260,92 +7260,92 @@ void case_640() report.Error (1530, GetLocation (yyVals[0+yyTop]), "Keyword `new' is not allowed on namespace elements"); } -void case_641() -#line 4424 "cs-parser.jay" +void case_639() +#line 4410 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_642() -#line 4429 "cs-parser.jay" +void case_640() +#line 4415 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_643() -#line 4434 "cs-parser.jay" +void case_641() +#line 4420 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_644() -#line 4439 "cs-parser.jay" +void case_642() +#line 4425 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_645() -#line 4444 "cs-parser.jay" +void case_643() +#line 4430 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_646() -#line 4449 "cs-parser.jay" +void case_644() +#line 4435 "cs-parser.jay" { yyVal = Modifiers.SEALED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_647() -#line 4454 "cs-parser.jay" +void case_645() +#line 4440 "cs-parser.jay" { yyVal = Modifiers.STATIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_648() -#line 4459 "cs-parser.jay" +void case_646() +#line 4445 "cs-parser.jay" { yyVal = Modifiers.READONLY; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_649() -#line 4464 "cs-parser.jay" +void case_647() +#line 4450 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_650() -#line 4469 "cs-parser.jay" +void case_648() +#line 4455 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_651() -#line 4474 "cs-parser.jay" +void case_649() +#line 4460 "cs-parser.jay" { yyVal = Modifiers.EXTERN; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_652() -#line 4479 "cs-parser.jay" +void case_650() +#line 4465 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_653() -#line 4484 "cs-parser.jay" +void case_651() +#line 4470 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7353,37 +7353,37 @@ void case_653() Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_654() -#line 4491 "cs-parser.jay" +void case_652() +#line 4477 "cs-parser.jay" { yyVal = Modifiers.ASYNC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_656() -#line 4500 "cs-parser.jay" +void case_654() +#line 4486 "cs-parser.jay" { lbag.AppendToMember (current_class, GetLocation (yyVals[-1+yyTop])); current_container.AddBasesForPart (current_class, (List) yyVals[0+yyTop]); } -void case_659() -#line 4513 "cs-parser.jay" +void case_657() +#line 4499 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_660() -#line 4521 "cs-parser.jay" +void case_658() +#line 4507 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((Constraints) yyVals[0+yyTop]); yyVal = constraints; } -void case_661() -#line 4527 "cs-parser.jay" +void case_659() +#line 4513 "cs-parser.jay" { var constraints = (List) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; @@ -7400,24 +7400,24 @@ void case_661() yyVal = constraints; } -void case_662() -#line 4546 "cs-parser.jay" +void case_660() +#line 4532 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_663() -#line 4555 "cs-parser.jay" +void case_661() +#line 4541 "cs-parser.jay" { var constraints = new List (1); constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = constraints; } -void case_664() -#line 4561 "cs-parser.jay" +void case_662() +#line 4547 "cs-parser.jay" { var constraints = (List) yyVals[-2+yyTop]; var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; @@ -7442,8 +7442,8 @@ void case_664() yyVal = constraints; } -void case_665() -#line 4588 "cs-parser.jay" +void case_663() +#line 4574 "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 ()); @@ -7451,15 +7451,15 @@ void case_665() yyVal = yyVals[0+yyTop]; } -void case_666() -#line 4595 "cs-parser.jay" +void case_664() +#line 4581 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Constructor, GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_670() -#line 4615 "cs-parser.jay" +void case_668() +#line 4601 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (lexer.Location, "generic type variance"); @@ -7467,57 +7467,57 @@ void case_670() yyVal = yyVals[0+yyTop]; } -void case_671() -#line 4625 "cs-parser.jay" +void case_669() +#line 4611 "cs-parser.jay" { yyVal = Variance.Covariant; savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_672() -#line 4630 "cs-parser.jay" +void case_670() +#line 4616 "cs-parser.jay" { yyVal = Variance.Contravariant; savedLocation = GetLocation (yyVals[0+yyTop]); } -void case_673() -#line 4651 "cs-parser.jay" +void case_671() +#line 4637 "cs-parser.jay" { ++lexer.parsing_block; start_block (GetLocation (yyVals[0+yyTop])); } -void case_675() -#line 4663 "cs-parser.jay" +void case_673() +#line 4649 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_676() -#line 4668 "cs-parser.jay" +void case_674() +#line 4654 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (lexer.Location); } -void case_677() -#line 4677 "cs-parser.jay" +void case_675() +#line 4663 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } -void case_678() -#line 4682 "cs-parser.jay" +void case_676() +#line 4668 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_686() -#line 4710 "cs-parser.jay" +void case_684() +#line 4696 "cs-parser.jay" { Error_SyntaxError (yyToken); var lt =(Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -7526,43 +7526,43 @@ void case_686() yyVal = null; } -void case_687() -#line 4719 "cs-parser.jay" +void case_685() +#line 4705 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_720() -#line 4783 "cs-parser.jay" +void case_718() +#line 4769 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_721() -#line 4788 "cs-parser.jay" +void case_719() +#line 4774 "cs-parser.jay" { report.Error (1023, GetLocation (yyVals[0+yyTop]), "An embedded statement may not be a declaration or labeled statement"); yyVal = null; } -void case_722() -#line 4793 "cs-parser.jay" +void case_720() +#line 4779 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_723() -#line 4801 "cs-parser.jay" +void case_721() +#line 4787 "cs-parser.jay" { /* Uses lexer.Location because semicolon location is not kept in quick mode*/ yyVal = new EmptyStatement (lexer.Location); } -void case_724() -#line 4809 "cs-parser.jay" +void case_722() +#line 4795 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); @@ -7571,8 +7571,8 @@ void case_724() current_block.AddStatement (labeled); } -void case_727() -#line 4822 "cs-parser.jay" +void case_725() +#line 4808 "cs-parser.jay" { if (yyVals[-1+yyTop] is VarExpr) yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); @@ -7580,8 +7580,8 @@ void case_727() yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_728() -#line 4838 "cs-parser.jay" +void case_726() +#line 4824 "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*/ @@ -7612,8 +7612,8 @@ void case_728() } } -void case_729() -#line 4868 "cs-parser.jay" +void case_727() +#line 4854 "cs-parser.jay" { ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; @@ -7625,8 +7625,8 @@ void case_729() } } -void case_730() -#line 4879 "cs-parser.jay" +void case_728() +#line 4865 "cs-parser.jay" { if (yyVals[0+yyTop] == null) yyVal = yyVals[-1+yyTop]; @@ -7634,22 +7634,22 @@ void case_730() yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_733() -#line 4894 "cs-parser.jay" +void case_731() +#line 4880 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_735() -#line 4903 "cs-parser.jay" +void case_733() +#line 4889 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_738() -#line 4919 "cs-parser.jay" +void case_736() +#line 4905 "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"); @@ -7657,8 +7657,8 @@ void case_738() } } -void case_739() -#line 4929 "cs-parser.jay" +void case_737() +#line 4915 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -7666,16 +7666,16 @@ void case_739() current_variable = new BlockVariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_740() -#line 4936 "cs-parser.jay" +void case_738() +#line 4922 "cs-parser.jay" { yyVal = current_variable; current_variable = null; lbag.AppendTo (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_741() -#line 4942 "cs-parser.jay" +void case_739() +#line 4928 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7683,8 +7683,8 @@ void case_741() current_variable = new BlockConstantDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_742() -#line 4949 "cs-parser.jay" +void case_740() +#line 4935 "cs-parser.jay" { if (current_variable.Initializer != null) { lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); @@ -7695,15 +7695,15 @@ void case_742() current_variable = null; } -void case_744() -#line 4963 "cs-parser.jay" +void case_742() +#line 4949 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); } -void case_745() -#line 4968 "cs-parser.jay" +void case_743() +#line 4954 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -7718,8 +7718,8 @@ void case_745() lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); } -void case_746() -#line 4982 "cs-parser.jay" +void case_744() +#line 4968 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -7729,8 +7729,8 @@ void case_746() } } -void case_750() -#line 5000 "cs-parser.jay" +void case_748() +#line 4986 "cs-parser.jay" { foreach (var d in current_variable.Declarators) { if (d.Initializer == null) @@ -7738,8 +7738,8 @@ void case_750() } } -void case_753() -#line 5015 "cs-parser.jay" +void case_751() +#line 5001 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7749,8 +7749,8 @@ void case_753() lbag.AddLocation (d, GetLocation (yyVals[-1+yyTop])); } -void case_754() -#line 5024 "cs-parser.jay" +void case_752() +#line 5010 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7760,15 +7760,15 @@ void case_754() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_756() -#line 5040 "cs-parser.jay" +void case_754() +#line 5026 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); current_variable.Initializer = (Expression) yyVals[0+yyTop]; } -void case_761() -#line 5058 "cs-parser.jay" +void case_759() +#line 5044 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7778,41 +7778,41 @@ void case_761() lbag.AddLocation (d, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_763() -#line 5071 "cs-parser.jay" +void case_761() +#line 5057 "cs-parser.jay" { yyVal = new StackAlloc ((Expression) yyVals[-3+yyTop], (Expression) yyVals[-1+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_764() -#line 5076 "cs-parser.jay" +void case_762() +#line 5062 "cs-parser.jay" { report.Error (1575, GetLocation (yyVals[-1+yyTop]), "A stackalloc expression requires [] after type"); yyVal = new StackAlloc ((Expression) yyVals[0+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_765() -#line 5084 "cs-parser.jay" +void case_763() +#line 5070 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_769() -#line 5102 "cs-parser.jay" +void case_767() +#line 5088 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { Expression.Error_InvalidExpressionStatement (report, GetLocation (yyVals[0+yyTop])); - yyVal = new InvalidStatementExpression (yyVals[0+yyTop] as Expression); + yyVal = new StatementErrorExpression (yyVals[0+yyTop] as Expression); } else { yyVal = new StatementExpression (s); } } -void case_770() -#line 5115 "cs-parser.jay" +void case_768() +#line 5101 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; ExpressionStatement s; @@ -7821,15 +7821,15 @@ void case_770() yyVal = new StatementExpression (s); } -void case_771() -#line 5123 "cs-parser.jay" +void case_769() +#line 5109 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_774() -#line 5137 "cs-parser.jay" +void case_772() +#line 5123 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7838,8 +7838,8 @@ void case_774() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_775() -#line 5146 "cs-parser.jay" +void case_773() +#line 5132 "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])); @@ -7850,32 +7850,41 @@ void case_775() Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); } -void case_776() -#line 5155 "cs-parser.jay" +void case_774() +#line 5142 "cs-parser.jay" { - var eloc = GetLocation (yyVals[-1+yyTop]); - report.Error (1026, eloc, "Expected a ')'"); + Error_SyntaxError (yyToken); + yyVal = new If ((BooleanExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_778() -#line 5169 "cs-parser.jay" +void case_776() +#line 5156 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, (List) yyVals[-1+yyTop], GetLocation (yyVals[-7+yyTop])); end_block (GetLocation (yyVals[0+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_779() -#line 5178 "cs-parser.jay" +void case_777() +#line 5162 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Switch ((Expression) yyVals[-1+yyTop], null, null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_778() +#line 5172 "cs-parser.jay" { report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); yyVal = new List (); } -void case_781() -#line 5187 "cs-parser.jay" +void case_780() +#line 5181 "cs-parser.jay" { var sections = new List (4); @@ -7883,8 +7892,8 @@ void case_781() yyVal = sections; } -void case_782() -#line 5194 "cs-parser.jay" +void case_781() +#line 5188 "cs-parser.jay" { var sections = (List) yyVals[-1+yyTop]; @@ -7892,15 +7901,15 @@ void case_782() yyVal = sections; } -void case_783() -#line 5201 "cs-parser.jay" +void case_782() +#line 5195 "cs-parser.jay" { - Error_SyntaxError (yyToken); + Error_SyntaxError (yyToken); yyVal = new List (); } -void case_786() -#line 5220 "cs-parser.jay" +void case_785() +#line 5214 "cs-parser.jay" { var labels = new List (2); @@ -7908,8 +7917,8 @@ void case_786() yyVal = labels; } -void case_787() -#line 5227 "cs-parser.jay" +void case_786() +#line 5221 "cs-parser.jay" { var labels = (List) (yyVals[-1+yyTop]); labels.Add ((SwitchLabel) yyVals[0+yyTop]); @@ -7917,15 +7926,15 @@ void case_787() yyVal = labels; } -void case_788() -#line 5237 "cs-parser.jay" +void case_787() +#line 5231 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_794() -#line 5256 "cs-parser.jay" +void case_793() +#line 5250 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -7934,6 +7943,15 @@ void case_794() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } +void case_794() +#line 5258 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new While ((BooleanExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + void case_795() #line 5268 "cs-parser.jay" { @@ -7944,14 +7962,15 @@ void case_795() void case_796() #line 5273 "cs-parser.jay" { - var loc = GetLocation (yyVals[-2+yyTop]); - report.Error (-100, loc, "Expected `while'"); - yyVal = new Do ((Statement) yyVals[-1+yyTop], null, loc); + Error_SyntaxError (yyToken); + yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } void case_797() -#line 5280 "cs-parser.jay" +#line 5278 "cs-parser.jay" { + Error_SyntaxError (yyToken); + yyVal = new Do ((Statement) yyVals[-4+yyTop], (BooleanExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } @@ -8020,12 +8039,39 @@ void case_816() void case_817() #line 5387 "cs-parser.jay" { - report.Error (230, GetLocation (yyVals[-5+yyTop]), "Type and identifier are both required in a foreach statement"); - yyVal = null; + report.Error (230, GetLocation (yyVals[-3+yyTop]), "Type and identifier are both required in a foreach statement"); + + start_block (GetLocation (yyVals[-2+yyTop])); + current_block.IsCompilerGenerated = true; + + Foreach f = new Foreach ((Expression) yyVals[-1+yyTop], null, null, null, GetLocation (yyVals[-3+yyTop])); + current_block.AddStatement (f); + + lbag.AddStatement (f, GetLocation (yyVals[-2+yyTop])); + yyVal = end_block (GetLocation (yyVals[0+yyTop])); } void case_818() -#line 5392 "cs-parser.jay" +#line 5400 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + + start_block (GetLocation (yyVals[-3+yyTop])); + current_block.IsCompilerGenerated = true; + + var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; + var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.ForeachVariable | LocalVariable.Flags.Used, lt.Location); + current_block.AddLocalName (li); + + Foreach f = new Foreach ((Expression) yyVals[-2+yyTop], li, null, null, GetLocation (yyVals[-4+yyTop])); + current_block.AddStatement (f); + + lbag.AddStatement (f, GetLocation (yyVals[-3+yyTop])); + yyVal = end_block (GetLocation (yyVals[0+yyTop])); + } + +void case_819() +#line 5417 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -8035,8 +8081,8 @@ void case_818() yyVal = li; } -void case_819() -#line 5401 "cs-parser.jay" +void case_820() +#line 5426 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8048,8 +8094,8 @@ void case_819() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_820() -#line 5412 "cs-parser.jay" +void case_821() +#line 5437 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); current_block.IsCompilerGenerated = true; @@ -8063,8 +8109,8 @@ void case_820() yyVal = end_block (GetLocation (yyVals[0+yyTop])); } -void case_821() -#line 5425 "cs-parser.jay" +void case_822() +#line 5450 "cs-parser.jay" { Foreach f = new Foreach ((Expression) yyVals[-1+yyTop], null, null, null, GetLocation (yyVals[-3+yyTop])); current_block.AddStatement (f); @@ -8073,58 +8119,58 @@ void case_821() yyVal = f; } -void case_828() -#line 5445 "cs-parser.jay" +void case_829() +#line 5470 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_829() -#line 5453 "cs-parser.jay" +void case_830() +#line 5478 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_830() -#line 5461 "cs-parser.jay" +void case_831() +#line 5486 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_831() -#line 5467 "cs-parser.jay" +void case_832() +#line 5492 "cs-parser.jay" { yyVal = new GotoCase ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_832() -#line 5472 "cs-parser.jay" +void case_833() +#line 5497 "cs-parser.jay" { yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_833() -#line 5480 "cs-parser.jay" +void case_834() +#line 5505 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_834() -#line 5488 "cs-parser.jay" +void case_835() +#line 5513 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_835() -#line 5496 "cs-parser.jay" +void case_836() +#line 5521 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -8141,8 +8187,8 @@ void case_835() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_836() -#line 5512 "cs-parser.jay" +void case_837() +#line 5537 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -8157,29 +8203,29 @@ void case_836() lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_840() -#line 5538 "cs-parser.jay" +void case_841() +#line 5563 "cs-parser.jay" { yyVal = new TryFinally ((Statement) yyVals[-2+yyTop], (Block) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_841() -#line 5543 "cs-parser.jay" +void case_842() +#line 5568 "cs-parser.jay" { yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List) yyVals[-2+yyTop], GetLocation (yyVals[-4+yyTop]), true), (Block) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_842() -#line 5548 "cs-parser.jay" +void case_843() +#line 5573 "cs-parser.jay" { - report.Error (1524, GetLocation (yyVals[-2+yyTop]), "Expected catch or finally"); + Error_SyntaxError (1524, yyToken); yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); } -void case_843() -#line 5556 "cs-parser.jay" +void case_844() +#line 5581 "cs-parser.jay" { var l = new List (2); @@ -8187,26 +8233,22 @@ void case_843() yyVal = l; } -void case_844() -#line 5563 "cs-parser.jay" +void case_845() +#line 5588 "cs-parser.jay" { var l = (List) yyVals[-1+yyTop]; Catch c = (Catch) yyVals[0+yyTop]; - if (l [0].IsGeneral) { + if (l [l.Count - 1].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); } + l.Add (c); yyVal = l; } -void case_848() -#line 5591 "cs-parser.jay" +void case_849() +#line 5612 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch (current_block, GetLocation (yyVals[-4+yyTop])); @@ -8222,8 +8264,8 @@ void case_848() yyVal = c; } -void case_850() -#line 5610 "cs-parser.jay" +void case_851() +#line 5631 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -8235,15 +8277,15 @@ void case_850() yyVal = new Catch (null, GetLocation (yyVals[-2+yyTop])); } -void case_853() -#line 5638 "cs-parser.jay" +void case_854() +#line 5659 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_855() -#line 5648 "cs-parser.jay" +void case_856() +#line 5669 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8252,8 +8294,17 @@ void case_855() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_856() -#line 5659 "cs-parser.jay" +void case_857() +#line 5677 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Lock ((Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_858() +#line 5687 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8264,15 +8315,15 @@ void case_856() current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_857() -#line 5669 "cs-parser.jay" +void case_859() +#line 5697 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_858() -#line 5674 "cs-parser.jay" +void case_860() +#line 5702 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8283,8 +8334,8 @@ void case_858() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_859() -#line 5687 "cs-parser.jay" +void case_861() +#line 5715 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8295,15 +8346,15 @@ void case_859() current_variable = new Using.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_860() -#line 5697 "cs-parser.jay" +void case_862() +#line 5725 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_861() -#line 5702 "cs-parser.jay" +void case_863() +#line 5730 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8314,34 +8365,42 @@ void case_861() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_862() -#line 5712 "cs-parser.jay" +void case_864() +#line 5740 "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; + yyVal = new Using ((Expression) yyVals[-2+yyTop], (Statement) yyVals[0+yyTop], GetLocation (yyVals[-4+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_864() -#line 5725 "cs-parser.jay" +void case_865() +#line 5748 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + + yyVal = new Using ((Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-3+yyTop])); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_867() +#line 5759 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); } -void case_866() -#line 5737 "cs-parser.jay" +void case_869() +#line 5771 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_867() -#line 5749 "cs-parser.jay" +void case_870() +#line 5783 "cs-parser.jay" { lexer.query_parsing = false; @@ -8354,8 +8413,8 @@ void case_867() current_block = current_block.Parent; } -void case_868() -#line 5761 "cs-parser.jay" +void case_871() +#line 5795 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -8366,8 +8425,8 @@ void case_868() current_block = current_block.Parent; } -void case_869() -#line 5772 "cs-parser.jay" +void case_872() +#line 5806 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -8376,16 +8435,16 @@ void case_869() current_block = current_block.Parent; } -void case_870() -#line 5779 "cs-parser.jay" +void case_873() +#line 5813 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } -void case_871() -#line 5788 "cs-parser.jay" +void case_874() +#line 5822 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8394,8 +8453,8 @@ void case_871() yyVal = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-3+yyTop]))); } -void case_872() -#line 5796 "cs-parser.jay" +void case_875() +#line 5830 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8408,8 +8467,8 @@ void case_872() ); } -void case_873() -#line 5811 "cs-parser.jay" +void case_876() +#line 5845 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8418,8 +8477,8 @@ void case_873() yyVal = new Linq.QueryExpression (new Linq.QueryStartClause ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], rv, GetLocation (yyVals[-3+yyTop]))); } -void case_874() -#line 5819 "cs-parser.jay" +void case_877() +#line 5853 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8432,8 +8491,8 @@ void case_874() ); } -void case_876() -#line 5838 "cs-parser.jay" +void case_879() +#line 5872 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8445,8 +8504,8 @@ void case_876() ((Linq.QueryBlock)current_block).AddRangeVariable (sn); } -void case_878() -#line 5853 "cs-parser.jay" +void case_881() +#line 5887 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8461,8 +8520,8 @@ void case_878() ((Linq.QueryBlock)current_block).AddRangeVariable (sn); } -void case_879() -#line 5870 "cs-parser.jay" +void case_882() +#line 5904 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -8478,15 +8537,15 @@ void case_879() yyVal = head; } -void case_881() -#line 5886 "cs-parser.jay" +void case_884() +#line 5920 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_883() -#line 5898 "cs-parser.jay" +void case_886() +#line 5932 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8494,8 +8553,8 @@ void case_883() current_block = current_block.Parent; } -void case_884() -#line 5905 "cs-parser.jay" +void case_887() +#line 5939 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8504,8 +8563,8 @@ void case_884() linq_clause_blocks.Push ((Linq.QueryBlock)current_block); } -void case_885() -#line 5913 "cs-parser.jay" +void case_888() +#line 5947 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8513,8 +8572,8 @@ void case_885() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_886() -#line 5920 "cs-parser.jay" +void case_889() +#line 5954 "cs-parser.jay" { yyVal = new Linq.GroupBy ((Linq.QueryBlock)current_block, (Expression)yyVals[-3+yyTop], linq_clause_blocks.Pop (), (Expression)yyVals[0+yyTop], GetLocation (yyVals[-5+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); @@ -8523,29 +8582,29 @@ void case_886() current_block = current_block.Parent; } -void case_890() -#line 5937 "cs-parser.jay" +void case_893() +#line 5971 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_897() -#line 5957 "cs-parser.jay" +void case_900() +#line 5991 "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])); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); - + current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; ((Linq.QueryBlock)current_block).AddRangeVariable (sn); } -void case_899() -#line 5976 "cs-parser.jay" +void case_902() +#line 6010 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8553,8 +8612,8 @@ void case_899() current_block = current_block.Parent; } -void case_900() -#line 5986 "cs-parser.jay" +void case_903() +#line 6020 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8563,8 +8622,8 @@ void case_900() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_901() -#line 5994 "cs-parser.jay" +void case_904() +#line 6028 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8573,8 +8632,8 @@ void case_901() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_902() -#line 6002 "cs-parser.jay" +void case_905() +#line 6036 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8583,8 +8642,8 @@ void case_902() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_903() -#line 6010 "cs-parser.jay" +void case_906() +#line 6044 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8623,8 +8682,8 @@ void case_903() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_904() -#line 6048 "cs-parser.jay" +void case_907() +#line 6082 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack (); @@ -8633,8 +8692,8 @@ void case_904() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_905() -#line 6056 "cs-parser.jay" +void case_908() +#line 6090 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8643,8 +8702,8 @@ void case_905() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_906() -#line 6064 "cs-parser.jay" +void case_909() +#line 6098 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8653,8 +8712,8 @@ void case_906() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_907() -#line 6072 "cs-parser.jay" +void case_910() +#line 6106 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8695,8 +8754,8 @@ void case_907() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_911() -#line 6127 "cs-parser.jay" +void case_914() +#line 6161 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8704,8 +8763,8 @@ void case_911() yyVal = yyVals[0+yyTop]; } -void case_913() -#line 6138 "cs-parser.jay" +void case_916() +#line 6172 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8713,15 +8772,15 @@ void case_913() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_914() -#line 6145 "cs-parser.jay" +void case_917() +#line 6179 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_916() -#line 6154 "cs-parser.jay" +void case_919() +#line 6188 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8729,43 +8788,43 @@ void case_916() current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location); } -void case_917() -#line 6161 "cs-parser.jay" +void case_920() +#line 6195 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_919() -#line 6173 "cs-parser.jay" +void case_922() +#line 6207 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_920() -#line 6178 "cs-parser.jay" +void case_923() +#line 6212 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_922() -#line 6190 "cs-parser.jay" +void case_925() +#line 6224 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_923() -#line 6195 "cs-parser.jay" +void case_926() +#line 6229 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_925() -#line 6205 "cs-parser.jay" +void case_928() +#line 6239 "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*/ @@ -8782,8 +8841,8 @@ void case_925() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_926() -#line 6221 "cs-parser.jay" +void case_929() +#line 6255 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -8793,8 +8852,8 @@ void case_926() }; } -void case_929() -#line 6248 "cs-parser.jay" +void case_932() +#line 6282 "cs-parser.jay" { current_container = new Class (current_namespace, current_class, new MemberName (""), Modifiers.PUBLIC, null); current_class = current_container; @@ -8825,8 +8884,8 @@ void case_929() start_block (lexer.Location); } -void case_930() -#line 6278 "cs-parser.jay" +void case_933() +#line 6312 "cs-parser.jay" { --lexer.parsing_block; Method method = (Method) oob_stack.Pop (); @@ -8837,16 +8896,16 @@ void case_930() current_local_parameters = null; } -void case_940() -#line 6321 "cs-parser.jay" +void case_943() +#line 6355 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; yyVal = null; } -void case_941() -#line 6327 "cs-parser.jay" +void case_944() +#line 6361 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List)yyVals[0+yyTop]; @@ -8854,15 +8913,15 @@ void case_941() yyVal = new MemberName (lt.Value); } -void case_944() -#line 6342 "cs-parser.jay" +void case_947() +#line 6376 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List)yyVals[-1+yyTop]; - yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], new MemberName (MemberCache.IndexerNameAlias)); + yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], MemberCache.IndexerNameAlias, Location.Null); } -void case_945() -#line 6347 "cs-parser.jay" +void case_948() +#line 6381 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8871,8 +8930,8 @@ void case_945() yyVal = null; } -void case_946() -#line 6355 "cs-parser.jay" +void case_949() +#line 6389 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -8881,8 +8940,8 @@ void case_946() yyVal = null; } -void case_947() -#line 6363 "cs-parser.jay" +void case_950() +#line 6397 "cs-parser.jay" { var p = (List)yyVals[0+yyTop] ?? new List (1); module.DocumentationBuilder.ParsedParameters = p; @@ -8890,24 +8949,24 @@ void case_947() yyVal = null; } -void case_955() -#line 6401 "cs-parser.jay" +void case_958() +#line 6435 "cs-parser.jay" { var parameters = new List (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_956() -#line 6407 "cs-parser.jay" +void case_959() +#line 6441 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_957() -#line 6416 "cs-parser.jay" +void case_960() +#line 6450 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -8918,1314 +8977,1329 @@ void case_957() #line default static readonly short [] yyLhs = { -1, 0, 4, 0, 0, 1, 1, 1, 1, 2, 2, - 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, - 16, 21, 22, 19, 20, 20, 20, 24, 24, 25, - 25, 18, 7, 7, 6, 6, 23, 23, 8, 8, - 26, 26, 27, 27, 27, 27, 27, 9, 9, 10, - 10, 35, 33, 38, 34, 34, 36, 36, 36, 36, - 37, 37, 42, 39, 40, 41, 41, 43, 43, 43, - 43, 43, 44, 44, 48, 45, 47, 50, 50, 50, - 51, 51, 52, 52, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 66, 68, 70, 71, 72, - 29, 29, 75, 54, 76, 76, 77, 77, 78, 80, - 74, 74, 79, 79, 85, 55, 89, 55, 55, 84, - 92, 84, 86, 86, 93, 93, 94, 95, 94, 90, - 90, 96, 96, 97, 98, 88, 88, 91, 91, 91, - 101, 56, 104, 105, 99, 106, 107, 108, 99, 99, - 100, 100, 103, 103, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 111, 112, 112, 115, 115, 115, 118, - 115, 116, 116, 119, 119, 120, 120, 120, 113, 113, - 113, 121, 121, 121, 114, 123, 125, 126, 57, 128, - 129, 130, 59, 124, 124, 124, 124, 124, 134, 131, - 135, 132, 133, 133, 133, 136, 137, 138, 140, 30, - 30, 139, 139, 141, 141, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 145, 60, 144, 144, 146, 146, - 149, 143, 143, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 151, 150, 152, 150, 150, - 150, 61, 155, 157, 153, 154, 154, 156, 156, 161, - 159, 162, 159, 159, 163, 62, 165, 58, 168, 169, - 58, 164, 171, 164, 166, 166, 172, 172, 173, 174, - 173, 175, 170, 167, 167, 167, 167, 167, 179, 176, - 180, 177, 178, 178, 182, 184, 185, 31, 181, 181, - 181, 183, 183, 183, 186, 186, 187, 188, 187, 189, - 190, 191, 32, 192, 192, 17, 17, 193, 193, 196, - 195, 195, 195, 197, 197, 199, 65, 122, 102, 102, - 127, 127, 200, 200, 200, 198, 198, 201, 201, 202, - 202, 204, 204, 83, 73, 73, 87, 87, 117, 117, - 147, 147, 205, 205, 205, 205, 205, 209, 209, 210, - 210, 208, 208, 208, 208, 208, 208, 208, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, - 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, - 214, 214, 214, 234, 234, 235, 235, 236, 236, 216, - 216, 233, 233, 233, 233, 233, 233, 233, 233, 218, - 237, 237, 238, 238, 239, 239, 241, 241, 241, 242, - 242, 242, 242, 242, 243, 243, 160, 160, 247, 247, - 247, 247, 247, 249, 249, 248, 248, 250, 250, 250, - 250, 251, 219, 219, 219, 246, 246, 246, 252, 252, - 253, 253, 220, 221, 221, 222, 223, 224, 224, 215, - 215, 215, 215, 215, 258, 254, 225, 259, 259, 260, - 260, 261, 261, 262, 262, 262, 262, 255, 255, 206, - 206, 257, 257, 263, 263, 256, 256, 82, 82, 264, - 264, 265, 226, 266, 266, 266, 267, 267, 267, 267, - 267, 268, 194, 227, 228, 229, 230, 270, 231, 271, - 231, 269, 269, 273, 272, 217, 274, 274, 274, 274, - 274, 275, 275, 275, 275, 275, 275, 275, 276, 276, - 276, 276, 277, 277, 277, 277, 277, 277, 278, 278, - 278, 279, 279, 279, 279, 279, 280, 280, 280, 281, - 281, 282, 282, 283, 283, 284, 284, 285, 285, 286, - 286, 287, 287, 288, 288, 288, 288, 288, 288, 288, - 288, 288, 288, 288, 289, 289, 290, 290, 290, 291, - 291, 292, 292, 295, 293, 294, 294, 297, 296, 298, - 296, 299, 300, 296, 301, 302, 296, 46, 46, 244, - 244, 244, 244, 232, 232, 232, 81, 304, 305, 306, - 307, 308, 28, 64, 64, 63, 63, 109, 109, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 67, 67, 69, 69, 69, 310, - 310, 311, 312, 312, 313, 313, 313, 313, 203, 203, - 314, 314, 316, 110, 317, 317, 318, 158, 315, 315, - 319, 319, 320, 320, 320, 320, 320, 324, 324, 325, - 325, 325, 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 340, 340, - 340, 340, 327, 341, 323, 342, 342, 343, 343, 343, - 343, 343, 343, 207, 207, 344, 49, 49, 346, 321, - 349, 321, 345, 345, 345, 345, 347, 347, 353, 353, - 352, 352, 354, 354, 348, 348, 350, 350, 355, 355, - 356, 351, 351, 351, 328, 328, 339, 339, 357, 358, - 358, 329, 329, 359, 359, 359, 362, 360, 361, 361, - 363, 363, 363, 366, 364, 365, 365, 367, 367, 330, - 330, 330, 330, 368, 369, 369, 369, 373, 370, 376, - 378, 379, 372, 372, 374, 374, 381, 380, 380, 375, - 375, 377, 377, 383, 382, 382, 371, 384, 371, 371, - 371, 331, 331, 331, 331, 331, 331, 385, 386, 387, - 387, 387, 388, 389, 390, 390, 391, 391, 332, 332, - 332, 332, 392, 392, 394, 394, 393, 395, 393, 393, - 333, 334, 396, 337, 335, 398, 399, 338, 401, 402, - 336, 336, 400, 400, 397, 397, 303, 303, 303, 303, - 403, 403, 405, 405, 407, 406, 408, 406, 404, 404, - 404, 412, 410, 413, 414, 410, 409, 409, 415, 415, - 416, 416, 416, 416, 416, 421, 417, 422, 418, 423, - 424, 425, 419, 427, 428, 429, 419, 426, 426, 431, - 420, 430, 434, 430, 433, 436, 433, 432, 432, 432, - 435, 435, 435, 411, 437, 411, 3, 3, 438, 3, - 3, 439, 439, 245, 245, 240, 240, 5, 440, 440, - 440, 440, 444, 440, 440, 440, 440, 441, 441, 442, - 445, 442, 443, 443, 446, 446, 447, + 11, 11, 12, 12, 13, 13, 14, 15, 15, 15, + 19, 20, 17, 18, 18, 18, 22, 22, 23, 23, + 7, 7, 6, 6, 21, 21, 8, 8, 24, 24, + 25, 25, 25, 25, 25, 9, 9, 10, 10, 33, + 31, 36, 32, 32, 34, 34, 34, 34, 35, 35, + 40, 37, 38, 39, 39, 41, 41, 41, 41, 41, + 42, 42, 46, 43, 45, 48, 48, 48, 49, 49, + 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 64, 66, 68, 69, 70, 27, 27, + 73, 52, 74, 74, 75, 75, 76, 78, 72, 72, + 77, 77, 83, 53, 87, 53, 53, 82, 90, 82, + 84, 84, 91, 91, 92, 93, 92, 88, 88, 94, + 94, 95, 96, 86, 86, 89, 89, 89, 99, 54, + 102, 103, 97, 104, 105, 106, 97, 97, 98, 98, + 101, 101, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 110, 110, 113, 113, 113, 116, 113, 114, + 114, 117, 117, 118, 118, 118, 111, 111, 111, 119, + 119, 119, 112, 121, 123, 124, 55, 126, 127, 128, + 57, 122, 122, 122, 122, 122, 132, 129, 133, 130, + 131, 131, 131, 134, 135, 136, 138, 28, 28, 137, + 137, 139, 139, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 143, 58, 142, 142, 144, 144, 147, 141, + 141, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 149, 148, 150, 148, 148, 148, 59, + 153, 155, 151, 152, 152, 154, 154, 159, 157, 160, + 157, 157, 161, 60, 163, 56, 166, 167, 56, 162, + 169, 162, 164, 164, 170, 170, 171, 172, 171, 173, + 168, 165, 165, 165, 165, 165, 177, 174, 178, 175, + 176, 176, 180, 182, 183, 29, 179, 179, 179, 181, + 181, 181, 184, 184, 185, 186, 185, 187, 188, 189, + 30, 190, 190, 16, 16, 191, 191, 194, 193, 193, + 193, 195, 195, 197, 63, 120, 100, 100, 125, 125, + 198, 198, 198, 196, 196, 199, 199, 200, 200, 202, + 202, 81, 71, 71, 85, 85, 115, 115, 145, 145, + 203, 203, 203, 203, 203, 207, 207, 208, 208, 206, + 206, 206, 206, 206, 206, 206, 209, 209, 209, 209, + 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 211, 211, 211, 212, 212, + 212, 232, 232, 233, 233, 234, 234, 214, 214, 231, + 231, 231, 231, 231, 231, 231, 231, 216, 235, 235, + 236, 236, 237, 237, 239, 239, 239, 240, 240, 240, + 240, 240, 241, 241, 158, 158, 245, 245, 245, 245, + 245, 247, 247, 246, 246, 248, 248, 248, 248, 249, + 217, 217, 217, 244, 244, 244, 250, 250, 251, 251, + 218, 219, 219, 220, 221, 222, 222, 213, 213, 213, + 213, 213, 256, 252, 223, 257, 257, 258, 258, 259, + 259, 260, 260, 260, 260, 253, 253, 204, 204, 255, + 255, 261, 261, 254, 254, 80, 80, 262, 262, 263, + 224, 264, 264, 264, 265, 265, 265, 265, 265, 266, + 192, 225, 226, 227, 228, 268, 229, 269, 229, 267, + 267, 271, 270, 215, 272, 272, 272, 272, 272, 273, + 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, + 275, 275, 275, 275, 275, 275, 276, 276, 276, 277, + 277, 277, 277, 277, 278, 278, 278, 279, 279, 280, + 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, + 285, 286, 286, 286, 286, 286, 286, 286, 286, 286, + 286, 286, 287, 287, 288, 288, 288, 289, 289, 290, + 290, 293, 291, 292, 292, 295, 294, 296, 294, 297, + 298, 294, 299, 300, 294, 44, 44, 242, 242, 242, + 242, 230, 230, 230, 79, 302, 303, 304, 305, 306, + 26, 62, 62, 61, 61, 107, 107, 307, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, + 307, 307, 65, 65, 67, 67, 67, 308, 308, 309, + 310, 310, 311, 311, 311, 311, 201, 201, 312, 312, + 314, 108, 315, 315, 316, 156, 313, 313, 317, 317, + 318, 318, 318, 318, 318, 322, 322, 323, 323, 323, + 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, + 320, 320, 320, 324, 324, 324, 324, 324, 324, 324, + 324, 324, 324, 324, 324, 324, 338, 338, 338, 338, + 325, 339, 321, 340, 340, 341, 341, 341, 341, 341, + 341, 205, 205, 342, 47, 47, 344, 319, 347, 319, + 343, 343, 343, 343, 345, 345, 351, 351, 350, 350, + 352, 352, 346, 346, 348, 348, 353, 353, 354, 349, + 349, 349, 326, 326, 337, 337, 355, 356, 356, 327, + 327, 357, 357, 357, 360, 358, 358, 359, 359, 361, + 361, 361, 364, 362, 363, 363, 365, 365, 328, 328, + 328, 328, 366, 366, 367, 367, 367, 371, 368, 374, + 376, 377, 370, 370, 372, 372, 379, 378, 378, 373, + 373, 375, 375, 381, 380, 380, 369, 369, 382, 369, + 369, 369, 329, 329, 329, 329, 329, 329, 383, 384, + 385, 385, 385, 386, 387, 388, 388, 389, 389, 330, + 330, 330, 330, 390, 390, 392, 392, 391, 393, 391, + 391, 331, 332, 394, 335, 333, 333, 396, 397, 336, + 399, 400, 334, 334, 334, 398, 398, 395, 395, 301, + 301, 301, 301, 401, 401, 403, 403, 405, 404, 406, + 404, 402, 402, 402, 410, 408, 411, 412, 408, 407, + 407, 413, 413, 414, 414, 414, 414, 414, 419, 415, + 420, 416, 421, 422, 423, 417, 425, 426, 427, 417, + 424, 424, 429, 418, 428, 432, 428, 431, 434, 431, + 430, 430, 430, 433, 433, 433, 409, 435, 409, 3, + 3, 436, 3, 3, 437, 437, 243, 243, 238, 238, + 5, 438, 438, 438, 438, 442, 438, 438, 438, 438, + 439, 439, 440, 443, 440, 441, 441, 444, 444, 445, }; static readonly short [] yyLen = { 2, 2, 0, 3, 1, 2, 4, 3, 1, 0, 1, - 1, 2, 4, 2, 1, 2, 1, 1, 5, 2, - 3, 0, 0, 11, 1, 3, 1, 0, 1, 0, - 1, 1, 0, 1, 0, 1, 0, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, - 2, 0, 3, 0, 6, 3, 1, 1, 1, 1, - 1, 3, 0, 3, 1, 0, 3, 0, 1, 1, - 3, 3, 1, 1, 0, 4, 4, 0, 1, 1, - 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, - 16, 5, 0, 9, 0, 1, 1, 2, 3, 0, - 3, 1, 1, 1, 0, 8, 0, 9, 6, 0, - 0, 3, 0, 1, 1, 2, 2, 0, 5, 0, - 1, 1, 2, 3, 0, 4, 2, 1, 1, 1, - 0, 3, 0, 0, 10, 0, 0, 0, 12, 8, - 1, 1, 0, 1, 1, 3, 3, 3, 5, 3, - 5, 1, 1, 1, 1, 3, 4, 6, 4, 0, - 7, 0, 1, 1, 2, 1, 1, 1, 4, 6, - 4, 1, 2, 2, 1, 0, 0, 0, 10, 0, - 0, 0, 13, 1, 2, 1, 2, 1, 0, 5, - 0, 5, 1, 1, 1, 0, 0, 0, 0, 15, - 5, 0, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 5, 1, 1, 1, 1, - 0, 7, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 2, 1, 2, 1, 3, 5, 2, + 0, 0, 11, 1, 3, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 1, 2, 0, + 3, 0, 6, 3, 1, 1, 1, 1, 1, 3, + 0, 3, 1, 0, 3, 0, 1, 1, 3, 3, + 1, 1, 0, 4, 4, 0, 1, 1, 0, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 16, 5, + 0, 9, 0, 1, 1, 2, 3, 0, 3, 1, + 1, 1, 0, 8, 0, 9, 6, 0, 0, 3, + 0, 1, 1, 2, 2, 0, 5, 0, 1, 1, + 2, 3, 0, 4, 2, 1, 1, 1, 0, 3, + 0, 0, 10, 0, 0, 0, 12, 8, 1, 1, + 0, 1, 1, 3, 3, 3, 5, 3, 5, 1, + 1, 1, 1, 3, 4, 6, 4, 0, 7, 0, + 1, 1, 2, 1, 1, 1, 4, 6, 4, 1, + 2, 2, 1, 0, 0, 0, 10, 0, 0, 0, + 13, 1, 2, 1, 2, 1, 0, 5, 0, 5, + 1, 1, 1, 0, 0, 0, 0, 15, 5, 0, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 5, 1, 1, 1, 1, 0, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 7, 0, 7, 2, - 2, 2, 0, 0, 9, 1, 1, 0, 1, 0, - 6, 0, 6, 1, 0, 8, 0, 9, 0, 0, - 10, 0, 0, 3, 0, 1, 1, 2, 2, 0, - 5, 0, 2, 2, 2, 1, 1, 1, 0, 5, - 0, 5, 1, 1, 0, 0, 0, 12, 0, 2, - 2, 0, 1, 2, 1, 3, 2, 0, 5, 0, - 0, 0, 13, 0, 1, 1, 3, 1, 4, 2, - 0, 3, 2, 1, 3, 0, 3, 1, 1, 3, - 1, 2, 3, 4, 4, 0, 3, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 1, 3, 1, + 1, 1, 1, 0, 7, 0, 7, 2, 2, 2, + 0, 0, 9, 1, 1, 0, 1, 0, 6, 0, + 6, 1, 0, 8, 0, 9, 0, 0, 10, 0, + 0, 3, 0, 1, 1, 2, 2, 0, 5, 0, + 2, 2, 2, 1, 1, 1, 0, 5, 0, 5, + 1, 1, 0, 0, 0, 12, 0, 2, 2, 0, + 1, 2, 1, 3, 2, 0, 5, 0, 0, 0, + 13, 0, 1, 1, 3, 1, 4, 2, 0, 3, + 2, 1, 3, 0, 3, 1, 1, 3, 1, 2, + 3, 4, 4, 0, 3, 1, 3, 3, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, - 3, 4, 4, 4, 3, 3, 4, 3, 4, 4, - 0, 1, 3, 4, 0, 1, 1, 3, 2, 3, - 1, 2, 3, 2, 1, 1, 0, 1, 1, 3, - 3, 2, 2, 1, 1, 1, 1, 2, 2, 4, - 3, 1, 4, 4, 3, 1, 3, 2, 1, 3, - 1, 1, 1, 4, 3, 2, 2, 6, 3, 7, - 4, 3, 7, 3, 0, 2, 4, 1, 2, 0, - 1, 1, 3, 3, 1, 1, 1, 0, 1, 1, - 2, 2, 3, 1, 2, 0, 1, 2, 4, 1, - 3, 0, 5, 1, 1, 1, 2, 3, 3, 4, - 4, 1, 2, 4, 4, 4, 4, 0, 4, 0, - 5, 0, 1, 0, 4, 4, 1, 2, 2, 4, - 2, 1, 2, 2, 2, 2, 2, 2, 1, 3, - 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, - 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, + 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, + 4, 4, 3, 3, 4, 3, 4, 4, 0, 1, + 3, 4, 0, 1, 1, 3, 2, 3, 1, 2, + 3, 2, 1, 1, 0, 1, 1, 3, 3, 2, + 2, 1, 1, 1, 1, 2, 2, 4, 3, 1, + 4, 4, 3, 1, 3, 2, 1, 3, 1, 1, + 1, 4, 3, 2, 2, 6, 3, 7, 4, 3, + 7, 3, 0, 2, 4, 1, 2, 0, 1, 1, + 3, 3, 1, 1, 1, 0, 1, 1, 2, 2, + 3, 1, 2, 0, 1, 2, 4, 1, 3, 0, + 5, 1, 1, 1, 2, 3, 3, 4, 4, 1, + 2, 4, 4, 4, 4, 0, 4, 0, 5, 0, + 1, 0, 4, 4, 1, 2, 2, 4, 2, 1, + 2, 2, 2, 2, 2, 2, 1, 3, 3, 3, + 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, + 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, - 3, 1, 5, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 1, 3, 3, 2, 1, 0, - 1, 1, 1, 0, 2, 1, 1, 0, 4, 0, - 5, 0, 0, 7, 0, 0, 8, 1, 1, 1, - 1, 1, 1, 6, 4, 4, 1, 1, 0, 0, - 0, 0, 15, 0, 1, 0, 1, 1, 2, 1, + 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 1, 3, 3, 2, 1, 0, 1, 1, + 1, 0, 2, 1, 1, 0, 4, 0, 5, 0, + 0, 7, 0, 0, 8, 1, 1, 1, 1, 1, + 1, 6, 4, 4, 1, 1, 0, 0, 0, 0, + 15, 0, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 2, 0, 1, 1, 1, - 2, 4, 1, 3, 1, 3, 1, 1, 0, 1, - 1, 1, 0, 4, 1, 1, 0, 4, 0, 1, - 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, + 1, 1, 0, 2, 0, 1, 1, 1, 2, 4, + 1, 3, 1, 3, 1, 1, 0, 1, 1, 1, + 0, 4, 1, 1, 0, 4, 0, 1, 1, 2, + 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 4, 1, 2, 2, 2, 2, - 2, 2, 1, 1, 2, 1, 1, 1, 0, 6, - 0, 7, 0, 2, 2, 1, 0, 1, 0, 1, - 1, 2, 2, 4, 0, 2, 0, 1, 1, 2, - 4, 1, 5, 2, 2, 2, 2, 2, 1, 1, - 1, 1, 1, 5, 7, 4, 0, 8, 0, 1, - 1, 2, 1, 0, 3, 1, 2, 3, 1, 1, - 1, 1, 1, 5, 7, 3, 6, 0, 4, 0, + 1, 0, 4, 1, 2, 2, 2, 2, 2, 2, + 1, 1, 2, 1, 1, 1, 0, 6, 0, 7, + 0, 2, 2, 1, 0, 1, 0, 1, 1, 2, + 2, 4, 0, 2, 0, 1, 1, 2, 4, 1, + 5, 2, 2, 2, 2, 2, 1, 1, 1, 1, + 1, 5, 7, 4, 0, 8, 4, 0, 1, 1, + 2, 1, 0, 3, 1, 2, 3, 1, 1, 1, + 1, 1, 5, 4, 7, 3, 6, 0, 4, 0, 0, 0, 10, 1, 0, 1, 0, 5, 1, 0, - 1, 0, 1, 1, 1, 3, 6, 0, 9, 5, - 4, 1, 1, 1, 1, 1, 1, 2, 2, 3, - 4, 3, 3, 3, 4, 3, 0, 1, 3, 4, - 5, 3, 1, 2, 0, 1, 2, 0, 7, 3, - 2, 2, 0, 3, 5, 0, 0, 10, 0, 0, - 9, 5, 2, 1, 0, 2, 2, 2, 2, 2, - 4, 5, 4, 5, 0, 5, 0, 6, 3, 2, - 1, 0, 3, 0, 0, 6, 0, 1, 1, 2, - 1, 1, 1, 1, 1, 0, 5, 0, 3, 0, - 0, 0, 12, 0, 0, 0, 13, 0, 2, 0, - 3, 1, 0, 4, 1, 0, 4, 1, 2, 2, - 1, 2, 2, 0, 0, 4, 2, 3, 0, 4, - 2, 2, 3, 0, 1, 1, 1, 2, 2, 2, - 4, 3, 0, 7, 4, 4, 3, 1, 3, 0, - 0, 4, 0, 1, 1, 3, 2, + 1, 0, 1, 1, 1, 3, 4, 5, 0, 9, + 5, 4, 1, 1, 1, 1, 1, 1, 2, 2, + 3, 4, 3, 3, 3, 4, 3, 0, 1, 3, + 4, 5, 3, 1, 2, 0, 1, 2, 0, 7, + 3, 2, 2, 0, 3, 5, 4, 0, 0, 10, + 0, 0, 9, 5, 4, 2, 1, 0, 2, 2, + 2, 2, 2, 4, 5, 4, 5, 0, 5, 0, + 6, 3, 2, 1, 0, 3, 0, 0, 6, 0, + 1, 1, 2, 1, 1, 1, 1, 1, 0, 5, + 0, 3, 0, 0, 0, 12, 0, 0, 0, 13, + 0, 2, 0, 3, 1, 0, 4, 1, 0, 4, + 1, 2, 2, 1, 2, 2, 0, 0, 4, 2, + 3, 0, 4, 2, 2, 3, 0, 1, 1, 1, + 2, 2, 2, 4, 3, 0, 7, 4, 4, 3, + 1, 3, 0, 0, 4, 0, 1, 1, 3, 2, }; static readonly short [] yyDefRed = { 0, 8, 0, 0, 0, 0, 0, 0, 0, 2, 4, - 0, 0, 11, 14, 0, 927, 0, 0, 931, 0, - 0, 15, 17, 18, 374, 380, 387, 375, 377, 0, - 376, 0, 383, 385, 372, 0, 379, 381, 373, 384, - 386, 382, 336, 948, 0, 378, 938, 0, 10, 1, - 0, 0, 0, 12, 0, 771, 0, 0, 0, 0, - 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, - 0, 0, 413, 0, 0, 0, 473, 0, 414, 0, - 512, 0, 853, 0, 0, 0, 623, 0, 0, 0, - 0, 0, 0, 0, 673, 0, 723, 0, 0, 0, - 0, 0, 0, 0, 0, 412, 0, 612, 0, 770, - 0, 706, 0, 0, 0, 0, 389, 390, 0, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 410, 411, 619, 542, 0, + 0, 0, 11, 14, 0, 930, 0, 0, 934, 0, + 0, 15, 17, 372, 378, 385, 373, 375, 0, 374, + 0, 381, 383, 370, 0, 377, 379, 371, 382, 384, + 380, 334, 951, 0, 376, 941, 0, 10, 1, 0, + 0, 0, 12, 0, 769, 0, 0, 0, 0, 0, + 0, 0, 0, 413, 0, 0, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 471, 0, 412, 0, 510, + 0, 854, 0, 0, 0, 621, 0, 0, 0, 0, + 0, 0, 0, 671, 0, 721, 0, 0, 0, 0, + 0, 0, 0, 0, 410, 0, 610, 0, 768, 0, + 704, 0, 0, 0, 0, 387, 388, 0, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 408, 409, 617, 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 620, 618, 621, 622, 690, 692, 0, 688, 691, - 707, 709, 710, 711, 712, 713, 714, 715, 716, 717, - 718, 708, 0, 0, 0, 772, 773, 790, 791, 792, - 793, 822, 823, 824, 825, 826, 827, 0, 0, 0, - 20, 0, 0, 0, 326, 0, 328, 935, 16, 928, - 0, 0, 239, 238, 235, 240, 241, 234, 253, 252, - 245, 246, 242, 244, 243, 247, 236, 237, 248, 249, - 255, 254, 250, 251, 0, 0, 951, 0, 940, 0, - 939, 3, 52, 0, 0, 0, 42, 39, 41, 43, - 44, 45, 46, 47, 50, 13, 0, 0, 0, 828, - 416, 417, 851, 0, 0, 0, 0, 0, 0, 391, - 0, 829, 0, 534, 528, 533, 722, 769, 693, 720, - 719, 721, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 704, 705, 0, 0, 0, 798, 0, 0, - 0, 738, 737, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 838, 0, 388, 0, 0, 0, 0, - 0, 0, 852, 0, 0, 0, 736, 732, 0, 0, - 0, 0, 0, 0, 0, 355, 0, 0, 0, 0, - 0, 0, 0, 0, 615, 0, 541, 0, 0, 539, - 543, 544, 538, 548, 547, 545, 546, 608, 523, 0, - 409, 408, 0, 0, 0, 0, 0, 724, 0, 325, - 0, 730, 731, 0, 476, 477, 0, 0, 0, 728, - 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 618, 616, 619, 620, 688, 690, 0, 686, 689, 705, + 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, + 706, 0, 0, 0, 770, 771, 789, 790, 791, 792, + 823, 824, 825, 826, 827, 828, 0, 0, 0, 20, + 0, 0, 324, 0, 326, 938, 16, 931, 0, 0, + 237, 236, 233, 238, 239, 232, 251, 250, 243, 244, + 240, 242, 241, 245, 234, 235, 246, 247, 253, 252, + 248, 249, 0, 0, 954, 0, 943, 0, 942, 3, + 50, 0, 0, 0, 40, 37, 39, 41, 42, 43, + 44, 45, 48, 13, 0, 0, 0, 829, 414, 415, + 852, 0, 0, 0, 0, 0, 0, 389, 0, 830, + 0, 532, 526, 531, 720, 767, 691, 718, 717, 719, + 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, + 702, 703, 0, 0, 0, 798, 0, 0, 0, 736, + 735, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 839, 0, 386, 0, 0, 0, 0, 0, 0, + 853, 0, 0, 0, 734, 730, 0, 0, 0, 0, + 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, + 0, 0, 613, 0, 539, 0, 0, 537, 541, 542, + 536, 546, 545, 543, 544, 606, 521, 0, 407, 406, + 0, 0, 0, 0, 0, 722, 0, 323, 0, 728, + 729, 0, 474, 475, 0, 0, 0, 726, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 930, 689, 739, 727, 0, - 767, 768, 881, 898, 0, 0, 0, 910, 869, 867, - 891, 0, 0, 889, 892, 893, 894, 895, 870, 868, - 0, 0, 0, 330, 0, 21, 0, 0, 0, 947, - 0, 337, 0, 0, 0, 949, 0, 0, 40, 645, - 651, 643, 0, 640, 650, 644, 642, 641, 648, 646, - 647, 653, 649, 652, 654, 0, 0, 638, 51, 475, - 0, 471, 472, 0, 0, 469, 0, 741, 0, 0, - 0, 796, 0, 765, 766, 0, 0, 0, 627, 0, - 832, 830, 628, 0, 0, 497, 0, 0, 0, 488, - 0, 492, 502, 504, 0, 484, 0, 0, 0, 0, - 0, 479, 0, 482, 0, 486, 357, 833, 0, 0, - 834, 842, 0, 0, 0, 843, 0, 0, 854, 0, - 0, 735, 0, 367, 363, 364, 0, 0, 362, 365, - 366, 0, 0, 0, 549, 0, 0, 530, 0, 610, - 687, 0, 0, 0, 681, 683, 684, 685, 420, 421, - 0, 333, 334, 0, 177, 176, 178, 0, 0, 0, - 0, 359, 0, 595, 0, 0, 836, 0, 0, 425, - 0, 428, 0, 426, 0, 465, 0, 0, 0, 0, - 0, 454, 457, 0, 0, 449, 456, 455, 0, 584, - 585, 586, 587, 588, 589, 590, 591, 592, 594, 593, - 550, 552, 551, 557, 558, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 581, 0, 0, 501, 0, 0, 0, 0, 0, 0, - 0, 882, 884, 880, 0, 890, 0, 0, 327, 945, - 946, 351, 0, 0, 348, 0, 0, 174, 0, 0, - 955, 941, 943, 60, 58, 59, 0, 0, 53, 0, - 0, 61, 63, 27, 25, 0, 0, 0, 635, 0, - 639, 424, 0, 474, 0, 525, 0, 536, 164, 185, - 0, 0, 154, 0, 0, 0, 165, 529, 0, 856, - 804, 0, 815, 799, 0, 806, 0, 821, 0, 0, - 831, 776, 0, 0, 0, 487, 0, 503, 505, 0, - 0, 441, 0, 0, 437, 0, 0, 466, 0, 507, - 481, 0, 140, 508, 138, 139, 510, 0, 524, 0, - 847, 0, 840, 0, 844, 516, 0, 0, 0, 352, - 0, 514, 0, 0, 526, 0, 859, 0, 873, 0, - 871, 0, 0, 625, 626, 0, 0, 0, 686, 675, - 676, 674, 682, 603, 609, 602, 0, 0, 332, 598, - 0, 0, 0, 540, 835, 725, 429, 423, 427, 422, - 527, 464, 463, 462, 459, 458, 0, 453, 418, 419, - 430, 0, 0, 746, 0, 0, 899, 875, 0, 900, - 0, 896, 0, 911, 0, 0, 0, 0, 879, 19, - 329, 672, 671, 0, 670, 0, 347, 957, 175, 952, - 0, 0, 54, 0, 0, 0, 0, 0, 0, 354, - 0, 629, 0, 0, 80, 79, 0, 470, 0, 0, - 0, 0, 0, 535, 0, 0, 0, 0, 0, 807, - 800, 0, 0, 820, 0, 0, 855, 494, 493, 444, - 0, 0, 936, 937, 433, 439, 0, 442, 0, 468, - 0, 0, 0, 0, 0, 777, 850, 0, 841, 0, - 522, 517, 0, 0, 513, 0, 862, 0, 794, 874, - 872, 0, 531, 0, 611, 607, 606, 605, 335, 597, - 596, 613, 461, 0, 451, 450, 583, 140, 0, 762, - 744, 0, 0, 0, 751, 0, 877, 0, 904, 0, - 919, 920, 913, 883, 885, 925, 350, 349, 956, 0, - 0, 62, 56, 0, 64, 26, 23, 0, 0, 305, - 0, 211, 0, 102, 0, 77, 756, 113, 114, 0, - 0, 0, 759, 183, 184, 0, 0, 0, 0, 157, - 166, 158, 160, 797, 0, 0, 0, 0, 0, 816, - 817, 0, 0, 443, 445, 446, 440, 434, 438, 0, - 499, 0, 467, 478, 432, 511, 509, 0, 846, 0, - 0, 0, 518, 0, 864, 0, 0, 624, 616, 0, - 460, 0, 0, 740, 752, 876, 0, 0, 0, 897, - 0, 0, 0, 944, 0, 0, 0, 69, 70, 73, - 74, 0, 320, 311, 310, 0, 630, 207, 97, 0, - 742, 760, 169, 0, 181, 0, 0, 0, 795, 866, - 0, 0, 0, 811, 0, 818, 775, 483, 480, 783, - 0, 789, 0, 0, 781, 0, 786, 848, 521, 520, - 863, 860, 0, 614, 0, 0, 878, 901, 0, 0, - 0, 915, 0, 926, 0, 75, 67, 0, 0, 0, - 306, 0, 0, 0, 0, 0, 170, 0, 161, 159, - 857, 808, 801, 0, 0, 778, 782, 0, 787, 0, - 0, 617, 0, 754, 0, 905, 922, 923, 916, 886, - 55, 0, 71, 72, 0, 0, 0, 0, 0, 0, - 0, 761, 168, 0, 180, 0, 0, 819, 788, 0, - 677, 849, 861, 763, 0, 0, 0, 76, 0, 0, - 321, 0, 307, 0, 315, 371, 370, 0, 368, 659, - 0, 631, 0, 660, 208, 98, 171, 858, 0, 0, - 813, 0, 902, 0, 917, 0, 0, 0, 0, 0, - 0, 0, 0, 661, 0, 0, 802, 0, 0, 906, - 29, 24, 322, 0, 0, 316, 369, 0, 0, 0, - 99, 0, 678, 0, 0, 0, 0, 308, 667, 0, - 668, 665, 0, 663, 95, 0, 94, 0, 0, 83, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 141, - 0, 0, 224, 216, 217, 218, 219, 220, 221, 222, - 223, 0, 0, 214, 0, 803, 0, 903, 0, 323, - 319, 0, 0, 0, 632, 84, 0, 267, 262, 266, - 0, 209, 215, 0, 909, 907, 666, 664, 0, 0, - 0, 0, 0, 0, 0, 275, 0, 0, 225, 0, - 0, 233, 0, 152, 142, 151, 0, 100, 0, 0, - 261, 0, 0, 260, 0, 146, 0, 0, 341, 0, - 339, 0, 0, 186, 0, 0, 0, 0, 0, 633, - 210, 0, 103, 0, 338, 0, 0, 0, 0, 117, - 0, 0, 0, 0, 0, 0, 143, 0, 0, 190, - 0, 342, 0, 228, 227, 226, 0, 101, 0, 279, - 0, 258, 119, 0, 256, 0, 0, 0, 121, 0, - 343, 0, 0, 187, 0, 0, 0, 340, 231, 112, - 110, 0, 0, 283, 0, 0, 0, 0, 0, 147, - 0, 264, 0, 0, 0, 0, 125, 0, 0, 0, - 0, 344, 345, 0, 0, 0, 0, 0, 107, 298, - 0, 280, 0, 0, 292, 0, 0, 0, 287, 0, - 137, 0, 0, 0, 0, 132, 0, 0, 276, 0, - 122, 0, 116, 126, 144, 150, 198, 0, 188, 0, - 0, 0, 0, 111, 0, 104, 108, 0, 0, 0, - 294, 0, 295, 284, 0, 0, 278, 288, 259, 0, - 0, 118, 133, 257, 0, 274, 0, 265, 269, 128, - 0, 0, 0, 195, 197, 191, 232, 109, 299, 301, - 281, 0, 0, 293, 290, 136, 134, 148, 0, 0, - 0, 145, 199, 201, 189, 0, 0, 0, 292, 0, - 270, 272, 129, 0, 0, 192, 303, 304, 300, 302, - 291, 149, 0, 0, 205, 204, 203, 200, 202, 0, - 0, 0, 193, 271, 273, + 0, 0, 0, 933, 687, 737, 725, 0, 765, 766, + 884, 901, 0, 0, 0, 913, 872, 870, 894, 0, + 0, 892, 895, 896, 897, 898, 873, 871, 0, 0, + 0, 328, 0, 18, 0, 0, 0, 950, 0, 335, + 0, 0, 0, 952, 0, 0, 38, 643, 649, 641, + 0, 638, 648, 642, 640, 639, 646, 644, 645, 651, + 647, 650, 652, 0, 0, 636, 49, 473, 0, 469, + 470, 0, 0, 467, 0, 739, 0, 0, 0, 796, + 0, 763, 764, 0, 0, 0, 625, 0, 833, 831, + 626, 0, 0, 495, 0, 0, 0, 486, 0, 490, + 500, 502, 0, 482, 0, 0, 0, 0, 0, 477, + 0, 480, 0, 484, 355, 834, 0, 0, 835, 843, + 0, 0, 0, 844, 0, 0, 855, 0, 0, 733, + 0, 365, 361, 362, 0, 0, 360, 363, 364, 0, + 0, 0, 547, 0, 0, 528, 0, 608, 685, 0, + 0, 0, 679, 681, 682, 683, 418, 419, 0, 331, + 332, 0, 175, 174, 176, 0, 0, 0, 0, 357, + 0, 593, 0, 0, 837, 0, 0, 423, 0, 426, + 0, 424, 0, 463, 0, 0, 0, 0, 0, 452, + 455, 0, 0, 447, 454, 453, 0, 582, 583, 584, + 585, 586, 587, 588, 589, 590, 592, 591, 548, 550, + 549, 555, 556, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, + 0, 499, 0, 0, 0, 0, 0, 0, 0, 885, + 887, 883, 0, 893, 0, 0, 325, 948, 949, 349, + 0, 0, 346, 0, 0, 172, 0, 0, 958, 944, + 946, 58, 56, 57, 0, 0, 51, 0, 0, 59, + 61, 26, 24, 0, 0, 0, 633, 0, 637, 422, + 0, 472, 0, 523, 0, 534, 162, 183, 0, 0, + 152, 0, 0, 0, 163, 527, 0, 858, 804, 0, + 815, 799, 0, 806, 0, 817, 0, 832, 774, 0, + 857, 0, 0, 485, 0, 501, 503, 0, 0, 439, + 0, 0, 435, 0, 0, 464, 0, 505, 479, 0, + 138, 506, 136, 137, 508, 0, 522, 777, 0, 848, + 0, 841, 0, 845, 514, 0, 0, 0, 350, 0, + 512, 0, 0, 524, 865, 0, 861, 794, 0, 876, + 0, 874, 0, 0, 623, 624, 0, 0, 0, 684, + 673, 674, 672, 680, 601, 607, 600, 0, 0, 330, + 596, 0, 0, 0, 538, 836, 723, 427, 421, 425, + 420, 525, 462, 461, 460, 457, 456, 0, 451, 416, + 417, 428, 0, 0, 744, 0, 0, 902, 878, 0, + 903, 0, 899, 0, 914, 0, 0, 0, 0, 882, + 19, 327, 670, 669, 0, 668, 0, 345, 960, 173, + 955, 0, 0, 52, 0, 0, 0, 0, 0, 0, + 352, 0, 627, 0, 0, 78, 77, 0, 468, 0, + 0, 0, 0, 0, 533, 0, 0, 0, 0, 0, + 807, 800, 0, 818, 0, 0, 856, 492, 491, 442, + 0, 0, 939, 940, 431, 437, 0, 440, 0, 466, + 0, 0, 0, 0, 0, 775, 851, 0, 842, 0, + 520, 515, 0, 0, 511, 0, 864, 0, 793, 877, + 875, 0, 529, 0, 609, 605, 604, 603, 333, 595, + 594, 611, 459, 0, 449, 448, 581, 138, 0, 760, + 742, 0, 0, 0, 749, 0, 880, 0, 907, 0, + 922, 923, 916, 886, 888, 928, 348, 347, 959, 0, + 0, 60, 54, 0, 62, 25, 22, 0, 0, 303, + 0, 209, 0, 100, 0, 75, 754, 111, 112, 0, + 0, 0, 757, 181, 182, 0, 0, 0, 0, 155, + 164, 156, 158, 797, 0, 0, 0, 0, 0, 816, + 0, 0, 441, 443, 444, 438, 432, 436, 0, 497, + 0, 465, 476, 430, 509, 507, 0, 847, 0, 0, + 0, 516, 0, 867, 0, 0, 622, 614, 0, 458, + 0, 0, 738, 750, 879, 0, 0, 0, 900, 0, + 0, 0, 947, 0, 0, 0, 67, 68, 71, 72, + 0, 318, 309, 308, 0, 628, 205, 95, 0, 740, + 758, 167, 0, 179, 0, 0, 0, 795, 869, 0, + 0, 0, 811, 0, 819, 773, 481, 478, 782, 0, + 788, 0, 0, 780, 0, 785, 849, 519, 518, 866, + 862, 0, 612, 0, 0, 881, 904, 0, 0, 0, + 918, 0, 929, 0, 73, 65, 0, 0, 0, 304, + 0, 0, 0, 0, 0, 168, 0, 159, 157, 859, + 808, 801, 0, 0, 776, 781, 0, 786, 0, 0, + 615, 0, 752, 0, 908, 925, 926, 919, 889, 53, + 0, 69, 70, 0, 0, 0, 0, 0, 0, 0, + 759, 166, 0, 178, 0, 0, 820, 787, 0, 675, + 850, 863, 761, 0, 0, 0, 74, 0, 0, 319, + 0, 305, 0, 313, 369, 368, 0, 366, 657, 0, + 629, 0, 658, 206, 96, 169, 860, 0, 0, 813, + 0, 905, 0, 920, 0, 0, 0, 0, 0, 0, + 0, 0, 659, 0, 0, 802, 0, 0, 909, 28, + 23, 320, 0, 0, 314, 367, 0, 0, 0, 97, + 0, 676, 0, 0, 0, 0, 306, 665, 0, 666, + 663, 0, 661, 93, 0, 92, 0, 0, 81, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 139, 0, + 0, 222, 214, 215, 216, 217, 218, 219, 220, 221, + 0, 0, 212, 0, 803, 0, 906, 0, 321, 317, + 0, 0, 0, 630, 82, 0, 265, 260, 264, 0, + 207, 213, 0, 912, 910, 664, 662, 0, 0, 0, + 0, 0, 0, 0, 273, 0, 0, 223, 0, 0, + 231, 0, 150, 140, 149, 0, 98, 0, 0, 259, + 0, 0, 258, 0, 144, 0, 0, 339, 0, 337, + 0, 0, 184, 0, 0, 0, 0, 0, 631, 208, + 0, 101, 0, 336, 0, 0, 0, 0, 115, 0, + 0, 0, 0, 0, 0, 141, 0, 0, 188, 0, + 340, 0, 226, 225, 224, 0, 99, 0, 277, 0, + 256, 117, 0, 254, 0, 0, 0, 119, 0, 341, + 0, 0, 185, 0, 0, 0, 338, 229, 110, 108, + 0, 0, 281, 0, 0, 0, 0, 0, 145, 0, + 262, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 342, 343, 0, 0, 0, 0, 0, 105, 296, 0, + 278, 0, 0, 290, 0, 0, 0, 285, 0, 135, + 0, 0, 0, 0, 130, 0, 0, 274, 0, 120, + 0, 114, 124, 142, 148, 196, 0, 186, 0, 0, + 0, 0, 109, 0, 102, 106, 0, 0, 0, 292, + 0, 293, 282, 0, 0, 276, 286, 257, 0, 0, + 116, 131, 255, 0, 272, 0, 263, 267, 126, 0, + 0, 0, 193, 195, 189, 230, 107, 297, 299, 279, + 0, 0, 291, 288, 134, 132, 146, 0, 0, 0, + 143, 197, 199, 187, 0, 0, 0, 290, 0, 268, + 270, 127, 0, 0, 190, 301, 302, 298, 300, 289, + 147, 0, 0, 203, 202, 201, 198, 200, 0, 0, + 0, 191, 269, 271, }; protected static readonly short [] yyDgoto = { 7, - 8, 50, 9, 51, 10, 11, 52, 234, 691, 432, - 12, 13, 53, 22, 23, 24, 323, 194, 237, 676, - 838, 1032, 1150, 1487, 835, 238, 239, 240, 241, 242, - 243, 244, 245, 669, 447, 670, 671, 941, 672, 673, - 945, 836, 1027, 1028, 1029, 268, 593, 1122, 111, 847, - 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, - 1228, 1229, 466, 680, 1301, 955, 1129, 1094, 1162, 1186, - 1245, 1312, 1157, 1362, 1339, 1387, 1388, 1389, 957, 1385, - 958, 736, 1278, 1350, 1325, 1375, 516, 1368, 1344, 1404, - 920, 1373, 1376, 1377, 1471, 1405, 1406, 1402, 1230, 1285, - 1257, 1302, 692, 1352, 1451, 1322, 1408, 1480, 467, 269, - 693, 694, 695, 696, 697, 656, 570, 1134, 657, 658, - 853, 1304, 1329, 1419, 1380, 1453, 1305, 1355, 1476, 1500, - 1420, 1421, 1498, 1484, 1485, 953, 1093, 1185, 1242, 1287, - 1243, 1244, 1279, 1336, 1308, 1280, 326, 225, 1384, 1282, - 1369, 1366, 1231, 1259, 1298, 1448, 1410, 1142, 1449, 594, - 1493, 1494, 1297, 1365, 1341, 1397, 1392, 1363, 1429, 1434, - 1395, 1398, 1399, 1479, 1435, 1393, 1394, 1489, 1477, 1478, - 950, 1036, 1153, 1127, 1179, 1154, 1155, 1194, 1090, 1177, - 1206, 535, 195, 113, 352, 197, 564, 442, 226, 1317, - 654, 655, 824, 840, 327, 409, 534, 305, 1158, 1159, - 46, 115, 306, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 254, 801, 994, 512, 723, 875, - 724, 725, 987, 138, 200, 729, 595, 596, 597, 598, - 795, 475, 476, 299, 992, 731, 410, 301, 499, 500, - 501, 502, 505, 738, 312, 753, 754, 892, 265, 481, - 766, 266, 480, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 573, 574, - 575, 775, 776, 908, 777, 154, 561, 768, 353, 1010, - 549, 1073, 155, 494, 951, 1092, 1183, 1283, 468, 1163, - 1164, 1213, 1214, 825, 553, 338, 772, 1172, 554, 555, - 270, 271, 272, 158, 159, 160, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 172, 285, - 579, 173, 174, 319, 806, 633, 923, 850, 687, 961, - 921, 924, 1052, 925, 962, 963, 286, 175, 176, 177, - 1063, 998, 1064, 1065, 1066, 1108, 1067, 178, 179, 180, - 181, 704, 487, 705, 1055, 979, 1169, 1137, 1202, 706, - 978, 707, 1171, 1104, 182, 183, 184, 185, 186, 187, - 307, 525, 526, 1000, 1110, 315, 977, 859, 1136, 1007, - 898, 1111, 188, 420, 189, 421, 926, 1017, 422, 645, - 819, 816, 817, 1022, 423, 424, 425, 426, 427, 428, - 930, 635, 928, 1115, 1189, 1248, 1019, 1146, 1205, 814, - 641, 815, 1081, 1021, 1082, 1147, 1023, 17, 19, 47, - 48, 229, 659, 832, 443, 660, 661, + 8, 49, 9, 50, 10, 11, 51, 232, 689, 430, + 12, 13, 52, 22, 23, 321, 235, 674, 839, 1031, + 1149, 1486, 836, 236, 237, 238, 239, 240, 241, 242, + 243, 667, 445, 668, 669, 941, 670, 671, 945, 837, + 1026, 1027, 1028, 266, 591, 1121, 110, 848, 1217, 1218, + 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, + 464, 678, 1300, 955, 1128, 1093, 1161, 1185, 1244, 1311, + 1156, 1361, 1338, 1386, 1387, 1388, 957, 1384, 958, 734, + 1277, 1349, 1324, 1374, 514, 1367, 1343, 1403, 920, 1372, + 1375, 1376, 1470, 1404, 1405, 1401, 1229, 1284, 1256, 1301, + 690, 1351, 1450, 1321, 1407, 1479, 465, 267, 691, 692, + 693, 694, 695, 654, 568, 1133, 655, 656, 854, 1303, + 1328, 1418, 1379, 1452, 1304, 1354, 1475, 1499, 1419, 1420, + 1497, 1483, 1484, 953, 1092, 1184, 1241, 1286, 1242, 1243, + 1278, 1335, 1307, 1279, 324, 223, 1383, 1281, 1368, 1365, + 1230, 1258, 1297, 1447, 1409, 1141, 1448, 592, 1492, 1493, + 1296, 1364, 1340, 1396, 1391, 1362, 1428, 1433, 1394, 1397, + 1398, 1478, 1434, 1392, 1393, 1488, 1476, 1477, 950, 1035, + 1152, 1126, 1178, 1153, 1154, 1193, 1089, 1176, 1205, 533, + 193, 112, 350, 195, 562, 440, 224, 1316, 652, 653, + 825, 841, 325, 407, 532, 303, 1157, 1158, 45, 114, + 304, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 252, 802, 993, 510, 721, 875, 722, 723, + 986, 137, 198, 727, 593, 594, 595, 596, 796, 473, + 474, 297, 991, 729, 408, 299, 497, 498, 499, 500, + 503, 736, 310, 752, 753, 892, 263, 479, 767, 264, + 478, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 571, 572, 573, 776, + 777, 908, 778, 153, 559, 769, 351, 1009, 547, 1072, + 154, 492, 951, 1091, 1182, 1282, 466, 1162, 1163, 1212, + 1213, 826, 551, 336, 773, 1171, 552, 553, 268, 269, + 270, 157, 158, 159, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 171, 283, 577, 172, + 173, 317, 807, 631, 923, 851, 685, 961, 921, 924, + 1051, 925, 962, 963, 284, 174, 175, 176, 1062, 997, + 1063, 1064, 1065, 1107, 1066, 177, 178, 179, 180, 702, + 485, 703, 1054, 979, 1168, 1136, 1201, 704, 978, 705, + 1170, 1103, 181, 182, 183, 184, 185, 186, 305, 523, + 524, 999, 1109, 313, 977, 860, 1135, 1006, 898, 1110, + 187, 418, 188, 419, 926, 1016, 420, 643, 820, 817, + 818, 1021, 421, 422, 423, 424, 425, 426, 930, 633, + 928, 1114, 1188, 1247, 1018, 1145, 1204, 815, 639, 816, + 1080, 1020, 1081, 1146, 1022, 17, 19, 46, 47, 227, + 657, 833, 441, 658, 659, }; - protected static readonly short [] yySindex = { -54, - 0, -193, -117, -72, 106,12157, 0, 257, 0, 0, - 106, -72, 0, 0, 180, 0, 6802, 106, 0, -188, - -231, 0, 0, 0, 0, 0, 0, 0, 0, 235, - 0, 301, 0, 0, 0, 1660, 0, 0, 0, 0, - 0, 0, 0, 0, 549, 0, 0, 559, 0, 0, - 257, 267, 106, 0, 291, 0, 243, 315, -259,11657, - 330, 232, 375, 6959, 0, 232, 232, 232, -163, 232, - 232, 12, 0,10760, 232, 232, 0,10760, 0, 374, - 0, -259, 0, 232, 351, 232, 0,11736,11736, 390, - 232, 232, 4,11440, 0,10760, 0,11440,11440,11440, -11440,11440,11440,11440,11440, 0, -237, 0, 8508, 0, - 179, 0, 371, 421, 533, 340, 0, 0, 441, 0, + protected static readonly short [] yySindex = { -203, + 0, -185, -47, -35, 6,12139, 0, 88, 0, 0, + 6, -35, 0, 0, -295, 0, 6816, 6, 0, -173, + -235, 0, 0, 0, 0, 0, 0, 0, 178, 0, + 271, 0, 0, 0, 3617, 0, 0, 0, 0, 0, + 0, 0, 0, 528, 0, 0, 547, 0, 0, 88, + 223, 6, 0, 227, 0, -29, 247, 207,11639, 253, + -272, 4, 6973, 0, -272, -272, -272, -155, -272, -272, + 586, 0,10742, -272, -272, 0,10742, 0, 300, 0, + 207, 0, -272, 296, -272, 0,12158,12158, 316, -272, + -272, -85,11422, 0,10742, 0,11422,11422,11422,11422, +11422,11422,11422,11422, 0, 98, 0, 8522, 0, 81, + 0, 277, 268, 446, 283, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1089, - 668, 50, 20, 462, 463, 508, 458, 518, 544, 408, - 543, 0, 0, 0, 0, 0, 0, 3463, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 864, 685, + 21, 611, 119, 623, 334, 388, 408, 404, 338, 419, + 0, 0, 0, 0, 0, 0, 3477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -262, 589, -266, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -168, -158, 267, - 0, 336, 574, 600, 0, 572, 0, 0, 0, 0, - 8508, 8508, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -268, 451, -239, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -193, -183, 223, 0, + 319, -245, 0, 407, 0, 0, 0, 0, 8522, 8522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 660, 584, 0, 621, 0, -260, - 0, 0, 0, 267,12653, 267, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 806, 647,10896, 0, - 0, 0, 0,10760, 232, 232, 819, 367, 533, 0, - -262, 0, 8508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 157, 158,11657, 0, 8508,10760, - 714, 0, 0, 733,10760,10760, 9119, -235, -84, 759, - 8665,11440, -237, 0, 745, 0, 756, 8508,10760, 761, - -118, 232, 0,10760, 374,10216, 0, 0, 351,10760, - 351, -264, 480, 855, -262, 0, 589, 340, 861, -262, -10760,10760,10760, 375, 0, 820, 0, 7116, -263, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4346, - 0, 0,12086, -264, 768, 784,10760, 0, 788, 0, - 233, 0, 0, 461, 0, 0, 793, 8648, 9944, 0, - 0,11440,10760,10760,10760,10760,10760,10760,10760,10760, -10760,10760,10760,11440,11440,11440, 8508, 8508,11440,11440, -11440,11440,11440,11440,11440,11440,11440,11440,11440,11440, -11440,11440,11440,11440,10760, 0, 0, 0, 0, 589, - 0, 0, 0, 0,11736,11736, -262, 0, 0, 0, - 0, 97, 640, 0, 0, 0, 0, 0, 0, 0, - 267, 267, 807, 0, 811, 0, 788, 660, 660, 0, - 73, 0, 618, 660, 837, 0, -183,12653, 0, 0, - 0, 0, -174, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -145,12696, 0, 0, 0, - 788, 0, 0, 849, 445, 0, 854, 0, 859, -140, - 374, 0, 232, 0, 0, -262, 8196, -201, 0, 856, - 0, 0, 0, -156, 865, 0, 320, 0, 866, 0, - 864, 0, 0, 0, 465, 0, 8332, 664,10760, 759, - 9944, 0, 7587, 0, 351, 0, 0, 0, 867, 868, - 0, 0, -259, 374, 373, 0, 4187, 871, 0, 873, - -262, 0, 874, 0, 0, 0,10760, 953, 0, 0, - 0,10760, 956, 877, 0, 881, 884, 0,12086, 0, - 0, -186, -221, 7116, 0, 0, 0, 0, 0, 0, - 374, 0, 0, 131, 0, 0, 0, 351, -264, -262, - 8822, 0, 885, 0, 889,11440, 0, 886, 7116, 0, - 349, 0, 354, 0, 788, 0, 13,10760,10760, 893, - 1009, 0, 0, -255, 895, 0, 0, 0, 668, 0, + 0, 0, 469, 428, 0, 458, 0, -240, 0, 0, + 0, 223,12768, 223, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 590, 463,10878, 0, 0, 0, + 0,10742, -272, -272, 577, 377, 446, 0, -268, 0, + 8522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 668, 668, 50, 50, 20, - 20, 20, 20, 462, 462, 463, 508, 458, 518, 544, - 0, 892, -198, 0,10760, 976, -262, 977, -262, 896, -10760, 0, 0, 0, 917, 0, 386, 788, 0, 0, - 0, 0, 517, 230, 0, 8822, 618, 0, 904, 905, - 0, 0, 0, 0, 0, 0, -264, 574, 0, 906, - 912, 0, 0, 0, 0, 916, 8979, 872, 0, 250, - 0, 0, 582, 0,10896, 0, 913, 0, 0, 0, - 577, 924, 0, 923, 930, 931, 0, 0,10760, 0, - 0, -262, 0, 0, 935, 0, 932, 0,10760, -119, - 0, 0, 6959, 6959, 8491, 0, 9119, 0, 0,10352, - 236, 0, -55, -112, 0, 878, 890, 0, 28, 0, - 0, 943, 0, 0, 0, 0, 0, 942, 0, 950, - 0, 4505, 0, 374, 0, 0, 351, 511, 897, 0, - 168, 0, 947, 949, 0, 6959, 0, 6959, 0,10760, - 0,10760, 8508, 0, 0, 374, 948, 374, 0, 0, - 0, 0, 0, 0, 0, 0, 8805, 8508, 0, 0, - -262,12086, 980, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 9808, 0, 0, 0, - 0,10080,10760, 0, 7744, 958, 0, 0, 1040, 0, - 1041, 0, 614, 0, 962,10760,10760, -262, 0, 0, - 0, 0, 0, 919, 0, 73, 0, 0, 0, 0, - 618, 618, 0, 807, 970, 971, 926, 974, 872, 0, - 972, 0, 1090, 1092, 0, 0,10760, 0,10488, 981, - 577, 8822, 8508, 0, 274, 1098, 1101, -126, 964, 0, - 0,10760, 990, 0,10760, 1083, 0, 0, 0, 0, - -164,10624, 0, 0, 0, 0, 7880, 0, 1108, 0, - 589,10760, 998, 8491, 999, 0, 0, -262, 0, 203, - 0, 0, 788, 897, 0, -262, 0, -167, 0, 0, - 0, 1000, 0, 1027, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 578, 0, 0, 0, 0, 8665, 0, - 0, -262, 995, 958, 0,10760, 0,10760, 0,10760, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1003, - 807, 0, 0,11032, 0, 0, 0, 1004, 7604, 0, - 872, 0, 872, 0, 872, 0, 0, 0, 0, -262, - 1005, 981, 0, 0, 0, -169, -166, 1002, 1008, 0, - 0, 0, 0, 0, 1010, 8491, 958, -198,10760, 0, - 0, 1012, 6959, 0, 0, 0, 0, 0, 0, 1017, - 0, 759, 0, 0, 0, 0, 0, -202, 0, 1016, - 788, 897, 0, 897, 0, 958, 1018, 0, 0, 374, - 0, 951, 1013, 0, 0, 0,10760, 1042,10760, 0, -10760, 1044, 256, 0, 912, 279, 613, 0, 0, 0, - 0, -72, 0, 0, 0, 1026, 0, 0, 0, 1015, - 0, 0, 0, 455, 0, 1029, 1155, 1156, 0, 0, - 958, 1045, 958, 0, 1037, 0, 0, 0, 0, 0, -10760, 0, 1048, -209, 0, -209, 0, 0, 0, 0, - 0, 0, 374, 0,10760, 8039, 0, 0, 1072, 692, - 1050, 0,10760, 0, 1052, 0, 0,11032, 106, -140, - 0, 1051, 1051, 1051,10488, 1063, 0,10760, 0, 0, - 0, 0, 0, 6959, 1060, 0, 0, 7116, 0, 1069, - 6959, 0, 1068, 0,10760, 0, 0, 0, 0, 0, - 0,10760, 0, 0, 267, 1067, 267, 7761, -101, -101, - -101, 0, 0,10760, 0, 6959,10760, 0, 0, 7116, - 0, 0, 0, 0, 1093,10760,10760, 0, 267, 1074, - 0, 1028, 0, 1070, 0, 0, 0, 1071, 0, 0, - 1030, 0, 1111, 0, 0, 0, 0, 0, 1075, 932, - 0, 7116, 0, 1103, 0, 1076, -101, 0, 1085, 267, - 7761, 1080, 1091, 0, 1094, 1095, 0, 1088,10760, 0, - 0, 0, 0, 1078, 1076, 0, 0, 1269, 79, 267, - 0, 6959, 0, 1104,10760, 1081,10760, 0, 0, 1096, - 0, 0, 1099, 0, 0,12696, 0, 1106, 79, 0, + 0, 0, -174, 115,11639, 0, 8522,10742, 518, 0, + 0, 550,10742,10742, 9133, 615, -195, 596, 8679,11422, + 98, 0, 620, 0, 622, 8522,10742, 675, 588, -272, + 0,10742, 300,10198, 0, 0, 296,10742, 296, -282, + 459, 746, -268, 0, 451, 283, 754, -268,10742,10742, +10742, 4, 0, 718, 0, 7130, -256, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4360, 0, 0, +12068, -282, 683, 714,10742, 0, 661, 0, -303, 0, + 0, 467, 0, 0, 680, 8662, 9926, 0, 0,11422, +10742,10742,10742,10742,10742,10742,10742,10742,10742,10742, +10742,11422,11422,11422, 8522, 8522,11422,11422,11422,11422, +11422,11422,11422,11422,11422,11422,11422,11422,11422,11422, +11422,11422,10742, 0, 0, 0, 0, 451, 0, 0, + 0, 0,12158,12158, -268, 0, 0, 0, 0, -238, + 534, 0, 0, 0, 0, 0, 0, 0, 223, 223, + 700, 0, 708, 0, 661, 469, 469, 0, -212, 0, + 486, 469, 780, 0, -192,12768, 0, 0, 0, 0, + -167, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 163,12798, 0, 0, 0, 661, 0, + 0, 782, 630, 0, 790, 0, 795, 52, 300, 0, + -272, 0, 0, -268, 8210, -186, 0, 799, 0, 0, + 0, -88, -42, 0, 346, 0, 808, 0, 805, 0, + 0, 0, 665, 0, 8346, 671,10742, 596, 9926, 0, + 7601, 0, 296, 0, 0, 0, 809, 43, 0, 0, + 207, 300, 389, 0, 4201, 811, 0, 60, -268, 0, + 62, 0, 0, 0,10742, 886, 0, 0, 0,10742, + 892, 814, 0, 819, 820, 0,12068, 0, 0, -208, + -264, 7130, 0, 0, 0, 0, 0, 0, 300, 0, + 0, 167, 0, 0, 0, 296, -282, -268, 8836, 0, + 823, 0, 821,11422, 0, 830, 7130, 0, 320, 0, + 382, 0, 661, 0, -89,10742,10742, 828, 951, 0, + 0, -248, 834, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 416,12696, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1107, 267, 0, 79, 0, -262, 0, 1104, 0, - 0, 1097, 1269,11902, 0, 0, 466, 0, 0, 0, -11934, 0, 0, 1110, 0, 0, 0, 0, 8508, 8508, - 370, 8665, 385, 351, 1126, 0, -264, 9744, 0, 1161, - 0, 0, 1076, 0, 0, 0, 1076, 0, 1061, 1062, - 0, 8508, -165, 0, 8508, 0, 1065, 1113, 0, -264, - 0, 1114, 9155, 0, 1112, 1087, -251, 575, 1660, 0, - 0, 1076, 0, -264, 0, 1119, 1105, 1116, 1125, 0, - 1117, 1062, 1135, -140, 1143, 1154, 0, 1157, 1162, 0, - 788, 0, 777, 0, 0, 0, 1159, 0, -154, 0, - 1150, 0, 0, 1163, 0, 1164, 1165, 1166, 0, 1168, - 0, -140, -140, 0, -140, 1160, 1170, 0, 0, 0, - 0, 1171, 81, 0, 1173, -140, 1293, 1176, -140, 0, - 466, 0, 8491, 1133, 1177, 1168, 0, 1180, 1183, 94, - 1186, 0, 0, -140,10488, 1140, 1184, 1171, 0, 0, -12696, 0, 267, 267, 0, 1141, 1185, 1173, 0, 1190, - 0,10760, 1145, 1189, 1176, 0, 1194, -140, 0, -153, - 0, 1191, 0, 0, 0, 0, 0,12696, 0, 94, - 94, 1200, 1202, 0, -154, 0, 0, 62, 1208,12696, - 0,12696, 0, 0, 8491, 1196, 0, 0, 0, 1209, - 1163, 0, 0, 0, 1211, 0, 154, 0, 0, 0, - -101, 829, 1212, 0, 0, 0, 0, 0, 0, 0, - 0, 1266, 1321, 0, 0, 0, 0, 0, 1215, 1217, - 8491, 0, 0, 0, 0, 94, 579, 579, 0, -101, - 0, 0, 0, 19, 19, 0, 0, 0, 0, 0, - 0, 0, 9944, 9944, 0, 0, 0, 0, 0, 1221, - 1223, 1224, 0, 0, 0, + 0, 0, 0, 685, 685, 21, 21, 611, 611, 611, + 611, 119, 119, 623, 334, 388, 408, 404, 0, 837, + -199, 0,10742, 915, -268, 919, -268, 836,10742, 0, + 0, 0, 865, 0, -237, 661, 0, 0, 0, 0, + 509, 243, 0, 8836, 486, 0, 848, 849, 0, 0, + 0, 0, 0, 0, -282, 851, 0, 850, 853, 0, + 0, 0, 0, 855, 8993, 812, 0, 380, 0, 0, + 436, 0,10878, 0, 852, 0, 0, 0, 470, 860, + 0, 861, 862, 863, 0, 0,10742, 0, 0, -268, + 0, 0, 858, 0, 868, 0, 228, 0, 0, 6973, + 0, 6973, 8505, 0, 9133, 0, 0,10334, 157, 0, + -249, -92, 0, 810, 815, 0, -67, 0, 0, 872, + 0, 0, 0, 0, 0, 875, 0, 0, 879, 0, + 4519, 0, 300, 0, 0, 296, 464, 829, 0, 51, + 0, 882, 885, 0, 0, 6973, 0, 0, 6973, 0, +10742, 0,10742, 8522, 0, 0, 300, 888, 300, 0, + 0, 0, 0, 0, 0, 0, 0, 8819, 8522, 0, + 0, -268,12068, 918, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9790, 0, 0, + 0, 0,10062,10742, 0, 7758, 889, 0, 0, 968, + 0, 970, 0, 712, 0, 904,10742,10742, -268, 0, + 0, 0, 0, 0, 866, 0, -212, 0, 0, 0, + 0, 486, 486, 0, 700, 910, 914, 870, 922, 812, + 0, 906, 0, 1035, 1036, 0, 0,10742, 0,10470, + 921, 470, 8836, 8522, 0, 309, 1037, 1040, 64, 920, + 0, 0,10742, 0,10742, 1017, 0, 0, 0, 0, + -172,10606, 0, 0, 0, 0, 7894, 0, 1049, 0, + 451,10742, 939, 8505, 944, 0, 0, -268, 0, 166, + 0, 0, 661, 829, 0, -268, 0, -177, 0, 0, + 0, 935, 0, 972, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 592, 0, 0, 0, 0, 8679, 0, + 0, -268, 940, 889, 0,10742, 0,10742, 0,10742, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 947, + 700, 0, 0,11014, 0, 0, 0, 948, 7618, 0, + 812, 0, 812, 0, 812, 0, 0, 0, 0, -268, + 945, 921, 0, 0, 0, -164, -162, 946, 950, 0, + 0, 0, 0, 0, 953, 8505, 889, -199,10742, 0, + 954, 6973, 0, 0, 0, 0, 0, 0, 952, 0, + 596, 0, 0, 0, 0, 0, -182, 0, 955, 661, + 829, 0, 829, 0, 889, 958, 0, 0, 300, 0, + 909, 959, 0, 0, 0,10742, 987,10742, 0,10742, + 991, 242, 0, 853, 196, 600, 0, 0, 0, 0, + -35, 0, 0, 0, 979, 0, 0, 0, 969, 0, + 0, 0, 478, 0, 971, 1093, 1095, 0, 0, 889, + 981, 889, 0, 978, 0, 0, 0, 0, 0,10742, + 0, 992, -188, 0, -188, 0, 0, 0, 0, 0, + 0, 300, 0,10742, 8053, 0, 0, 1014, 789, 994, + 0,10742, 0, 995, 0, 0,11014, 6, 52, 0, + 998, 998, 998,10470, 996, 0,10742, 0, 0, 0, + 0, 0, 6973, 999, 0, 0, 7130, 0, 1002, 6973, + 0, 1000, 0,10742, 0, 0, 0, 0, 0, 0, +10742, 0, 0, 223, 1003, 223, 7775, -153, -153, -153, + 0, 0,10742, 0, 6973,10742, 0, 0, 7130, 0, + 0, 0, 0, 1028,10742,10742, 0, 223, 1009, 0, + 960, 0, 1008, 0, 0, 0, 1011, 0, 0, 965, + 0, 1047, 0, 0, 0, 0, 0, 1015, 868, 0, + 7130, 0, 1041, 0, 1016, -153, 0, 1022, 223, 7775, + 1018, 1024, 0, 1029, 1030, 0, 1031,10742, 0, 0, + 0, 0, 1019, 1016, 0, 0,11718, -102, 223, 0, + 6973, 0, 1042,10742, 1025,10742, 0, 0, 1032, 0, + 0, 1033, 0, 0,12798, 0, 1038, -102, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, +12798, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1043, 223, 0, -102, 0, -268, 0, 1042, 0, 0, + 1044,11718,11884, 0, 0, 512, 0, 0, 0,11916, + 0, 0, 1045, 0, 0, 0, 0, 8522, 8522, 225, + 8679, 258, 296, 1067, 0, -282, 9726, 0, 1103, 0, + 0, 1016, 0, 0, 0, 1016, 0, 997, 1010, 0, + 8522, -159, 0, 8522, 0, 1020, 1039, 0, -282, 0, + 1055, 9169, 0, 1060, 1021, -8, 549, 3617, 0, 0, + 1016, 0, -282, 0, 1065, 1034, 1062, 1058, 0, 1064, + 1010, 1066, 52, 1070, 1073, 0, 1072, 1080, 0, 661, + 0, 699, 0, 0, 0, 1077, 0, -163, 0, 1074, + 0, 0, 1085, 0, 1086, 1087, 1089, 0, 1088, 0, + 52, 52, 0, 52, 1096, 1099, 0, 0, 0, 0, + 1094, -77, 0, 1100, 52, 1153, 1104, 52, 0, 512, + 0, 8505, 1059, 1097, 1088, 0, 1107, 1108, 69, 1111, + 0, 0, 52,10470, 1068, 1106, 1094, 0, 0,12798, + 0, 223, 223, 0, 1069, 1109, 1100, 0, 1112, 0, +10742, 1075, 1115, 1104, 0, 1116, 52, 0, -175, 0, + 1102, 0, 0, 0, 0, 0,12798, 0, 69, 69, + 1125, 1122, 0, -163, 0, 0, 127, 1127,12798, 0, +12798, 0, 0, 8505, 1117, 0, 0, 0, 1126, 1085, + 0, 0, 0, 1128, 0, 102, 0, 0, 0, -153, + 721, 1129, 0, 0, 0, 0, 0, 0, 0, 0, + 1184, 1149, 0, 0, 0, 0, 0, 1130, 1132, 8505, + 0, 0, 0, 0, 69, 556, 556, 0, -153, 0, + 0, 0, -61, -61, 0, 0, 0, 0, 0, 0, + 0, 9926, 9926, 0, 0, 0, 0, 0, 1136, 1133, + 1135, 0, 0, 0, }; - protected static readonly short [] yyRindex = { 2890, - 0, 0, 7273, 2890, 0, 0, 0, 1593, 0, 0, - 3117, 991, 0, 0, 0, 0, 0, 3117, 0, 0, - 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + protected static readonly short [] yyRindex = { 1467, + 0, 0, 7287, 1467, 0, 0, 0, 1508, 0, 0, + 3115, 2940, 0, 0, 0, 0, 0, 3115, 0, 0, + 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1597, 0, 0, 1597, 0, 0, - 1593, 3180, 2959, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1231, 0, 0, 0, 0, 0, 0, 0, - 0,12176, 0, 1225, 0, 0, 0, 1225, 0, 0, - 0, 0, 0, 0, 140, 0, 0, 0, 0, 0, - 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4726, 0, 0, 0, - 0, 0, 0, 166, 4663, 3939, 0, 0, 4504, 0, + 0, 0, 0, 1510, 0, 0, 1510, 0, 0, 1508, + 3178, 3009, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1144, 0, 0, 0, 0, 0, 0, 0, 0, +12212, 0, 1137, 0, 0, 0, 1137, 0, 0, 0, + 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, + 0, 0, 82, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4740, 0, 0, 0, 0, + 0, 0, 250, 4677, 3953, 0, 0, 4518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4819, - 4923, 5231, 5435, 5775, 5979, 6115, 6251, 6387, 6523, 1053, - 1538, 0, 0, 0, 0, 0, 0, 52, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4833, 4937, + 5245, 5449, 5789, 5993, 6129, 6265, 6401, 6537, 1754, 3685, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 846, 846, 3227, - 0, 541, 1226, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 182, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 796, 796, 3225, 0, + 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1597, 218, 0, 0, 0, 0, - 0, 0, 0, 3274, 246, 3341, 0, 0, 0, 0, + 0, 0, 1510, 272, 0, 0, 0, 0, 0, 0, + 0, 3272, 259, 3335, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3550, 0, 0, + 0, 0, 0, 0, 0, 3564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1236, 0, 0, 0, - 0, 0, 3550, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2270, 0, - 1607, 118, 2400, 0, 0, 0, 2547, 2400, 0, 0, - 0, 0, 0, 1231, 0, 0, 0, 92, 0, 0, + 0, 0, 0, 0, 1146, 0, 0, 0, 0, 0, + 3564, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2157, 0, 2691, 520, + 2287, 0, 0, 0, 2434, 2287, 0, 0, 0, 0, + 0, 1144, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1233, 1284, 0, 0, 1225, 0, 3550, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -226, 0, + 1140, 2538, 0, 0, 1137, 0, 3564, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1430, + 0, 0, 0, 0, 0, 0, 0, 1530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 3384, 2714, 0, 0, 0, 0, 2117, 1597, 1597, 0, - -199, 0, 8056, 1597, 1608, 0, 0, 159, 0, 0, + 20, 0, 0, 0, 0, 0, 0, 0, 3398, 2849, + 0, 0, 0, 0, 2004, 1510, 1510, 0, -180, 0, + 8070, 1510, 1515, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 284,11589, 0, 0, 0, - 3550, 0, 0, 0, 0, 0, 0, 0, 0,11978, - 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 862, 957, 0, 0, - 1241, 0, 0, 0, 0, 0, 99, 0, 0, 4027, - 1239, 0, 0, 0, 263, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1821, 0, 0, 0, 0, 0, + 0, 0, 0, 401,11571, 0, 0, 0, 3564, 0, + 0, 0, 0, 0, 0, 0, 0,11960, 0, 0, + 0, 0, 0, 0, 1141, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 676, 749, 0, 0, 1148, 0, + 0, 0, 0, 0, 8, 0, 0, 4041, 1147, 0, + 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1233, 0, - 0, 6642, 0, 115, 0, 0, 0, 0, 0, 0, - 8962, 0, 0, 0, 0, 0, 0, -127, 655, 0, - 0, 0, 1240, 0, 0, 0, 0, 0, 0, 0, - 3550, 0, 3550, 0, 4186, 0, 0, 0, 0, 181, - 0, 0, 0, 0, -28, 0, 0, 0, 4991, 0, + 0, 0, 0, 0, 0, 0, 1140, 0, 0, 6656, + 0, 39, 0, 0, 0, 0, 0, 0, 8976, 0, + 0, 0, 0, 0, 0, -122, 263, 0, 0, 0, + 1150, 0, 0, 0, 0, 0, 0, 0, 3564, 0, + 3564, 0, 4200, 0, 0, 0, 0, 177, 0, 0, + 0, 0, 121, 0, 0, 0, 5005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 5095, 5163, 5299, 5367, 5503, - 5571, 5639, 5707, 5843, 5911, 6047, 6183, 6319, 6455, 6579, - 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3830, 0, 0, 2117, 0, 0, - 0, 0, 1195, 0, 0, 0,12230, 0, 0, 707, - 0, 0, 0, 0, 0, 0, 678, 698, 0, 0, - 1244, 0, 0, 0, 0, 1248, 0, 0, 0, 0, - 0, 0,11168, 0, 0, 0, 721, 0, 0, 0, -12247, 0, 0, 736, 742, 751, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1242, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1249, 0, 0, 0, - 3616, 0, 0, 116, 0, -74, 3709, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1251, 0, 0, - 0, 0, 0, 0, 0, 0, 82, 144, 0, 0, - 0, 0, 0, 1250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 8962, 0, 0, + 0, 0, 0, 5109, 5177, 5313, 5381, 5517, 5585, 5653, + 5721, 5857, 5925, 6061, 6197, 6333, 6469, 6593, 0, 0, + 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3844, 0, 0, 2004, 0, 0, 0, 0, + 1105, 0, 0, 0,12229, 0, 0, 692, 0, 0, + 0, 0, 0, 0, 637, 653, 0, 0, 1151, 0, + 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, +11150, 0, 0, 0, 715, 0, 0, 0,12283, 0, + 0, 723, 731, 735, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1142, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1152, 0, 0, 0, 2598, 0, + 0, 44, 0, 35, 3723, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1159, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 371, 0, 0, 0, + 0, 0, 1156, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8976, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 190, 0, 0, 0, 1245, 0, 0, 0, 0, - 0, 0, 464, 0, 452, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -199, 0, 0, 0, 0, -12247, 8213, 0, 1246, 0, 712, 0, 0, 0, 0, - 1253, 0, 1206, 1227, 0, 0, 0, 0, 0, 1267, -12301, 0, 0, 0,12054, 0, 0, 0, 780, 0, - 0, 0, 0, 0, 0, 1988, 0, 0, 0, 0, + 0, 0, 186, 0, 0, 0, 1155, 0, 0, 0, + 0, 0, 0, 215, 0, 373, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -180, 0, 0, 0, + 0,12283, 8227, 0, 1165, 0, 672, 0, 0, 0, + 0, 1158, 0, 1118, 1121, 0, 0, 0, 0, 0, + 1164,12307, 0, 0, 0,12036, 0, 0, 0, 734, + 0, 0, 0, 0, 0, 1875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3868, 0, 4345, 1258, 0, 0, 0, 1255, 0, 0, - 0, 0, 343, 0, 0, 0, 0, 780, 0, 0, + 3882, 0, 4359, 1161, 0, 0, 0, 1170, 0, 0, + 0, 0, 359, 0, 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1268, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 787, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 738, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1270, 0, 0, 0, 0, 0, 794, 798, 0, - 0, 0, 0, 0, 0, 0, 1257, 700, 1272, 0, + 0, 1169, 0, 0, 0, 0, 0, 755, 760, 0, + 0, 0, 0, 0, 0, 0, 1175, 654, 1174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4027, 0, 0, 0, 0, 0, 1274, 0, 0, - 343, 0, 0, 825, 0, 1257, 0, 0, 0, 8962, - 0, 631, 645, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 123, 0, 1244, 9156, 0, 0, 0, 0, - 0,12343, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 719, 0, 730, 0, 0, 0, 0, - 1277, 0, 1245, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1282, 0, 7430, 0, 0, 0, 0, - 0, 0, 8962, 0, 0, 0, 0, 0, 0, 566, - 525, 0, 0, 0, 0, 0, 0, 0,12419,11978, - 0, 113, 113, 113, 0, 0, 0, 0, 0, 0, + 4041, 0, 0, 0, 0, 0, 1186, 0, 0, 359, + 0, 0, 775, 0, 1175, 0, 0, 0, 8976, 0, + 605, 657, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 104, 0, 1151, 9170, 0, 0, 0, 0, 0, +12355, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 664, 0, 682, 0, 0, 0, 0, 1180, + 0, 1155, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1188, 0, 7444, 0, 0, 0, 0, 0, + 0, 8976, 0, 0, 0, 0, 0, 0, 420, 608, + 0, 0, 0, 0, 0, 0, 0,12398,11960, 0, + 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0,12462, 0, 59, 0, 1294, 1294, - 1294, 0, 0, 0, 0, 0, 1299, 0, 0, -172, - 0, 0, 0, 0, 0, 0, 0, 0,12505, 0, - 0, 0, 0, 1304, 0, 0, 0, 122, 0, 0, - 0, 0, 581, 0, 0, 0, 0, 0, 0, 1303, - 0, 1308, 0, 0, 0, 3028, 1301, 560, 0, 210, + 0, 0, 0,12461, 0, -36, 0, 1194, 1194, 1194, + 0, 0, 0, 0, 0, 1190, 0, 0, -221, 0, + 0, 0, 0, 0, 0, 0, 0,12504, 0, 0, + 0, 0, 1197, 0, 0, 0, 79, 0, 0, 0, + 0, 563, 0, 0, 0, 0, 0, 0, 1195, 0, + 1198, 0, 0, 0, 3072, 1192, 523, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2827, 0, 0, 0, 9310, 9508, - 0, 0, 0, 628, 0, 0, 0, 0, 0, 0, - 0, 0, 366, 0, 0,11760, 0, 0, 9409, 0, + 0, 0, 0, 1276, 0, 0, 0, 9324, 9522, 0, + 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, + 0, 294, 0, 0,11742, 0, 0, 9423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,11828, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 9602, 0, 9310, 0, 0, 0, 628, 0, - 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, - 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4660, 324, 0, 9644, 0, 0, 0, - 9714, 0, 2827, 0, 0, 0, 2827, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 669, - 0, 1322, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2827, 0, 760, 0, 649, 0, 0, 0, 0, - 0, 0, 0,11978, 797, 0, 0, 0, 0, 0, - 1315, 0, 772, 0, 0, 0, 0, 0, 0, 0, - 800, 0, 0, 0, 0, 0, 0, 0, 0, 1314, - 0,11978,11978, 0,12010, 0, 0, 0, 0, 0, - 0, 1317, 3070, 0, 1319,11978,11304, 1320,11978, 0, - 0, 0, 0, 0, 0, 1323, 0, 0, 0,12623, - 0, 0, 0,11978, 0, 0, 0, 1325, 0, 0, - 128, 0,12547,12585, 0, 0, 0, 1327, 0, 0, - 0, 0, 0, 0, 1329, 0, 0,11978, 0, 597, - 0, 808, 0, 0, 0, 0, 0, 840, 0, 411, - 699, 0, 0, 0, 0, 0, 0, 0, 0, 1383, - 0, 1443, 0, 0, 0, 813, 0, 0, 0, 0, +11810, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9616, 0, 9324, 0, 0, 0, 634, 0, 0, + 0, 0, 401, 0, 0, 0, 0, 0, 0, 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 893, 442, 0, 9658, 0, 0, 0, 4674, + 0, 1276, 0, 0, 0, 1276, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, + 1207, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1276, 0, 541, 0, 569, 0, 0, 0, 0, 0, + 0, 0,11960, 745, 0, 0, 0, 0, 0, 1202, + 0, 621, 0, 0, 0, 0, 0, 0, 0, 759, + 0, 0, 0, 0, 0, 0, 0, 0, 1205, 0, +11960,11960, 0,11992, 0, 0, 0, 0, 0, 0, + 1206,12728, 0, 1208,11960,11286, 1213,11960, 0, 0, + 0, 0, 0, 0, 1214, 0, 0, 0,12698, 0, + 0, 0,11960, 0, 0, 0, 1215, 0, 0, 289, + 0,12622,12660, 0, 0, 0, 1219, 0, 0, 0, + 0, 0, 0, 1225, 0, 0,11960, 0, 566, 0, + 762, 0, 0, 0, 0, 0, 788, 0,12546,12584, + 0, 0, 0, 0, 0, 0, 0, 0, 1287, 0, + 1340, 0, 0, 0, 763, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,12623, 9676,11476, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1239, 1239, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, + 0, 0, 0, 0,12698, 1026,11458, 0, 573, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1147, 1147, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, }; protected static readonly short [] yyGindex = { 0, - 0, 1657, 0, 0, 0, 1, -9, -176, -42, 1658, - 0, 1697, 1706, 624, 0, 0, -3, 0, 0, 0, - 0, 0, 0, -850, -694, -210, -349, 0, 0, 0, - 0, 0, -191, 0, 0, 0, 771, 0, 882, 0, - 0, 0, 0, 627, 629, -17, -234, 0, -62, 0, - 473, 0, 500, -858, -595, -569, -567, -544, -504, -491, - -486, 0,-1160, 0, 10, 0, 114, 0,-1083, 0, - 0, 0, 145, 295, 0, 0, 0, 333,-1055, 0, - -271, -298, 1046, 0, 0, 0, -882, 281, 0, 0, - -500, 0, 0, 350, 0, 0, 325, 0, 0, 358, - 0, -516, -867, 0, 0, 0, 0, 0, 447, -13, - 0, 0, 879, 883, 888, 1054, -528, 0, 0, -275, - 898, 443, 0, -838, 0, 0, 0, 0, 0, 0, - 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 0, 0, 0, 0, -239, 437, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 519, 0, -505, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, - 0, 0, 355, 0, 0, 360, 359, 278, 0, 0, - 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, - 0, -52, 0, -12, -189, 0, 0, 424, 0, 481, - 0, 936, 0, 1237, -290, -267, -63, 812, 0, 586, - 0, -30, 11, 0, 0, 21, 0, 0, 0, 0, + 0, 1554, 0, 0, 0, 1, -9, -176, -48, 1557, + 0, 1593, 1606, 86, 0, -6, 0, 0, 0, 0, + 0, -807, -695, -217, -436, 0, 0, 0, 0, 0, + -191, 0, 0, 0, 674, 0, 781, 0, 0, 0, + 0, 530, 532, -17, -223, 0, -62, 0, 376, 0, + 405, -700, -587, -585, -571, -568, -565, -543, -534, 0, +-1143, 0, 16, 0, 67, 0,-1071, 0, 0, 0, + 111, 198, 0, 0, 0, 237,-1057, 0, -270, -297, + 961, 0, 0, 0, -883, 185, 0, 0, -500, 0, + 0, 251, 0, 0, 224, 0, 0, 257, 0, -514, + -880, 0, 0, 0, 0, 0, 353, -13, 0, 0, + 777, 778, 779, 957, -527, 0, 0, -318, 785, 350, + 0, -909, 0, 0, 0, 0, 0, 0, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 0, 0, 400, + 0, 0, 0, 0, -332, 333, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 413, 0, -502, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 169, 0, 0, + 252, 0, 0, 255, 262, 179, 0, 0, 0, 0, + 0, 0, 0, 0, 476, 0, 0, 0, 0, -46, + 0, -12, 26, 0, 0, 325, 0, 381, 0, 833, + 0, 1138, -289, -263, -64, 399, 0, 481, 0, -30, + 112, 0, 0, 916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -261, 0, 587, 0, 0, 8, 0, 0, - 0, 894, 0, -296, -125, 1038, 968, 0, 973, 0, - 1181, 1404, 1102, 0, 0, 781, 1716, 0, 0, 0, - 0, 1073, 0, 0, 0, 0, 0, -685, 1455, 0, - 0, 0, 0, 0, 1118, 382, 818, 785, 817, 1392, - 1396, 1398, 1405, 1407, 0, 1440, 0, 0, 0, 1079, - 1296, -730, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -299, 0, 0, 0, 0, -447, 0, - 684, 0, 596, 0, 679, 0, 0, 0, 744, -529, - -16, -315, -5, 0, 1696, 0, 66, 0, 68, 101, - 132, 135, 143, 147, 156, 162, 163, 176, 0, -672, - 0, -21, 0, 0, 880, 0, 802, 0, 0, 0, - 786, -241, 850, -844, 0, 902, -453, 0, 0, 0, - 0, 0, 0, 796, 0, 0, 791, 0, 0, 0, + -260, 0, 1375, 0, 0, -766, 0, 0, 0, 787, + 0, -298, -134, 956, 867, 0, 859, 0, 1079, 1303, + 988, 0, 0, 684, 1602, 0, 0, 0, 0, 962, + 0, 0, 0, 0, 0, -523, 1344, 0, 0, 0, + 0, 0, 1321, 448, 784, 690, 769, 1281, 1282, 1280, + 1283, 1285, 0, 1279, 0, 0, 0, 899, 1145, -730, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 728, 0, 0, 0, 0, 0, 0, 0, 0, - -29, 0, 1341, 0, 0, 0, 969, 0, 0, 0, - 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1445, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, - 0, 0, 0, 0, 723, 0, 0, 0, 0, 0, - 0, -19, 1043, 0, 0, 0, 1047, + 0, -286, 0, 0, 0, 0, -449, 0, 522, 0, + 435, 0, 517, 0, 0, 0, 582, -531, -15, -309, + -5, 0, 1538, 0, 48, 0, 70, 74, 85, 101, + 103, 113, 116, 132, 141, 145, 0, -658, 0, -21, + 0, 0, 719, 0, 644, 0, 0, 0, 624, -315, + 695, -847, 0, 739, -457, 0, 0, 0, 0, 0, + 0, 639, 0, 0, 641, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, + 0, 0, 0, 0, 0, 0, 0, 0, -27, 0, + 1203, 0, 0, 0, 827, 0, 0, 0, 0, 0, + 0, -171, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1306, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 482, 0, 0, 0, 0, 0, 0, + 0, 0, 583, 0, 0, 0, 0, 0, 0, -7, + 898, 0, 0, 0, 900, }; - protected static readonly short [] yyTable = { 110, - 156, 514, 434, 112, 18, 732, 294, 196, 190, 235, - 517, 157, 737, 431, 473, 44, 193, 430, 490, 681, - 533, 318, 557, 449, 773, 324, 329, 116, 231, 259, - 336, 510, 406, 703, 544, 498, 1012, 905, 261, 1132, - 866, 867, 781, 885, 469, 253, 1165, 1166, 310, 786, - 363, 934, 371, 1060, 708, 1254, 304, 804, 1061, 539, - 304, 362, 14, 370, 445, 1061, 311, 191, 313, 769, - 116, 1261, 664, 1332, 116, 196, 196, 571, 339, 1015, - 260, 674, 161, 897, 162, 899, 1043, 413, 1005, 1045, - 1319, 880, 709, 1193, 48, 785, 196, 413, 665, 712, - 292, 1360, 1446, 20, 290, 348, 48, 95, 559, 411, - 408, 251, 291, 572, 260, 689, 799, 163, 260, 260, - 260, 260, 260, 260, 260, 260, 349, 828, 360, 974, - 666, 677, 434, 473, 503, 678, 864, 522, 504, 16, - 110, 156, 634, 876, 112, 447, 770, 235, 164, 350, - 523, 165, 157, 349, 1160, 293, 348, 43, 6, 166, - 252, 292, 412, 167, 434, 560, 1333, 524, 116, 580, - 414, 506, 168, 800, 865, 415, 350, 416, 169, 170, - 414, 934, 805, 417, 418, 415, 474, 416, 196, 196, - 351, 448, 171, 417, 418, 785, 679, 198, 478, 292, - 690, 1, 447, 984, 349, 440, 1015, 771, 1003, 882, - 726, 730, 1062, 976, 868, 713, 293, 346, 48, 1062, - 449, 1447, 1126, 161, 15, 162, 1361, 350, 233, 192, - 1428, 472, 325, 330, 667, 360, 477, 1161, 557, 446, - 469, 351, 360, 675, 360, 975, 360, 649, 1044, 785, - 196, 1046, 1320, 355, 293, 532, 259, 1452, 163, 536, - 419, 877, 538, 557, 541, 486, 259, 543, 792, 1462, - 429, 1463, 489, 571, 1495, 540, 196, 493, 495, 1074, - 334, 682, 507, 880, 508, 2, 251, 750, 196, 164, - 360, 520, 165, 934, 531, 196, 528, 116, 530, 934, - 166, 529, 493, 2, 167, 474, 474, 260, 934, 572, - 1057, 387, 873, 168, 546, 547, 1069, 260, 1070, 169, - 170, 556, 260, 966, 1459, 1192, 116, 578, 652, 1424, - 1085, 572, 558, 171, 1215, 252, 1390, 196, 509, 304, - 196, 1234, 1112, 448, 1208, 438, 439, 388, 116, 1417, - 472, 592, 636, 638, 640, 600, 601, 602, 603, 604, - 605, 606, 607, 608, 609, 610, 292, 1472, 655, 3, - 4, 5, 6, 874, 196, 196, 1460, 656, 297, 434, - 298, 829, 793, 996, 1234, 95, 685, 632, 235, 1293, - 636, 788, 260, 790, 1496, 791, 1492, 881, 653, 858, - 448, 882, 196, 196, 260, 260, 260, 479, 980, 260, - 260, 737, 482, 391, 392, 6, 572, 1469, 650, 651, - 196, 293, 335, 700, 662, 710, 312, 389, 390, 647, - 636, 1138, 1310, 488, 196, 636, 1311, 750, 1143, 636, - 20, 233, 636, 668, 356, 642, 643, 233, 474, 233, - 473, 655, 519, 353, 636, 498, 1348, 738, 821, 679, - 656, 1338, 233, 1168, 749, 702, 435, 698, 757, 888, - 888, 887, 887, 346, 331, 1050, 48, 434, 1470, 655, - 331, 636, 680, 436, 1378, 1379, 331, 1381, 656, 331, - 331, 728, 357, 592, 563, 735, 483, 116, 1400, 353, - 636, 1407, 733, 331, 778, 738, 571, 780, 733, 741, - 743, 413, 324, 49, 751, 324, 1423, 636, 358, 759, - 679, 842, 636, 748, 761, 644, 636, 435, 324, 1246, - 292, 614, 615, 484, 324, 331, 196, 556, 737, 201, - 1445, 636, 572, 680, 436, 843, 779, 774, 558, 888, - 959, 887, 623, 358, 623, 634, 346, 733, 196, 637, - 639, 452, 556, 452, 116, 292, 738, 915, 636, 726, - 794, 794, 844, 558, 809, 964, 811, 314, 348, 634, - 726, 1454, 1455, 324, 346, 893, 485, 636, 346, 116, - 346, 346, 346, 346, 414, 635, 260, 55, 346, 415, - 878, 416, 251, 826, 1235, 202, 634, 417, 418, 623, - 773, 247, 572, 991, 968, 248, 872, 807, 452, 635, - 1001, 348, 474, 813, 726, 1291, 349, 48, 517, 358, - 1236, 358, 1237, 358, 358, 233, 358, 1486, 358, 860, - 1294, 523, 233, 196, 199, 827, 635, 1235, 263, 350, - 581, 252, 287, 288, 289, 1238, 295, 296, 744, 1086, - 582, 308, 309, 351, 196, 249, 246, 472, 314, 349, - 316, 48, 320, 1236, 1292, 1237, 199, 332, 333, 1054, - 358, 493, 358, 703, 536, 358, 259, 841, 894, 1295, - 250, 863, 350, 730, 48, 1239, 360, 735, 1238, 331, - 715, 369, 728, 649, 662, 262, 351, 48, 1240, 1031, - 349, 331, 48, 1241, 331, 331, 433, 48, 910, 48, - 48, 48, 48, 116, 116, 317, 349, 48, 331, 196, - 889, 48, 662, 350, 474, 1051, 317, 260, 1239, 474, - 95, 662, 900, 48, 901, 264, 48, 351, 48, 350, - 196, 1240, 903, 599, 774, 936, 1241, 349, 435, 907, - 331, 820, 350, 737, 1051, 196, 116, 350, 116, 196, - 616, 617, 48, 1315, 48, 48, 787, 360, 194, 592, - 350, 789, 1141, 653, 592, 917, 1328, 735, 359, 1105, - 912, 1258, 557, 361, 351, 912, 959, 912, 934, 935, - 912, 912, 918, 912, 912, 1346, 317, 918, 403, 918, - 822, 821, 918, 918, 684, 918, 918, 45, 685, 372, - 404, 196, 823, 1096, 557, 999, 1135, 1002, 114, 956, - 668, 489, 95, 1004, 718, 1097, 360, 918, 719, 196, - 196, 1284, 314, 393, 394, 369, 400, 982, 948, 1217, - 1233, 1084, 435, 1031, 985, 681, 557, 395, 396, 1013, - 397, 398, 1167, 914, 993, 317, 735, 360, 914, 1217, - 914, 114, 1411, 914, 914, 114, 914, 914, 583, 986, - 912, 474, 565, 890, 851, 511, 888, 845, 584, 566, - 995, 399, 918, 1233, 846, 1217, 317, 1040, 527, 328, - 328, 567, 401, 251, 921, 364, 196, 902, 1016, 921, - 1018, 921, 1020, 331, 921, 921, 331, 921, 921, 227, - 328, 228, 909, 565, 365, 366, 1030, 317, 196, 227, - 566, 230, 405, 317, 1464, 1251, 196, 668, 449, 921, - 318, 95, 567, 402, 367, 95, 435, 658, 1149, 1011, - 1334, 802, 252, 914, 1191, 368, 658, 298, 735, 48, - 1037, 493, 1038, 268, 1039, 657, 908, 931, 932, 114, - 1483, 908, 268, 908, 657, 436, 908, 908, 414, 908, - 908, 517, 48, 415, 1087, 416, 1088, 1501, 1502, 437, - 36, 417, 418, 116, 921, 48, 774, 967, 441, 1077, - 48, 1079, 764, 1080, 764, 48, 764, 48, 48, 48, - 48, 331, 328, 328, 1281, 48, 753, 331, 753, 48, - 753, 1281, 277, 331, 277, 474, 599, 331, 599, 277, - 227, 48, 1089, 727, 48, 336, 48, 504, 444, 336, - 331, 331, 115, 489, 115, 1117, 1118, 331, 331, 115, - 331, 331, 57, 384, 385, 386, 908, 1113, 735, 774, - 48, 470, 48, 48, 471, 1120, 196, 65, 65, 699, - 1030, 65, 331, 743, 328, 743, 954, 489, 954, 1125, - 489, 66, 235, 336, 1152, 66, 959, 434, 167, 491, - 167, 556, 167, 1035, 755, 334, 755, 1145, 114, 179, - 328, 179, 558, 179, 1148, 155, 235, 155, 492, 742, - 1326, 162, 328, 162, 116, 196, 489, 361, 116, 328, - 163, 116, 163, 556, 1326, 513, 336, 114, 1174, 1080, - 336, 518, 331, 336, 558, 336, 521, 1152, 346, 576, - 336, 1356, 346, 1357, 331, 346, 116, 346, 537, 114, - 116, 865, 346, 865, 542, 556, 1216, 1232, 68, 577, - 68, 328, 550, 185, 328, 185, 558, 156, 196, 156, - 120, 1204, 120, 282, 336, 282, 1216, 620, 621, 622, - 623, 127, 116, 127, 1265, 196, 289, 1249, 289, 489, - 350, 441, 1473, 1474, 887, 887, 519, 519, 328, 328, - 1232, 350, 1216, 636, 636, 663, 1130, 1131, 618, 619, - 585, 337, 116, 624, 625, 340, 341, 342, 343, 344, - 345, 346, 347, 683, 354, 686, 328, 328, 648, 495, - 688, 711, 331, 716, 331, 495, 714, 717, 739, 740, - 196, 196, 755, 1286, 756, 758, 760, 36, 196, 762, - 763, 36, 764, 331, 331, 765, 196, 196, 782, 196, - 783, 785, 36, 797, 798, 1306, 803, 36, 802, 808, - 810, 36, 818, 331, 36, 830, 812, 1306, 831, 196, - 833, 331, 196, 331, 331, 834, 36, 36, 837, 43, - 1306, 36, 36, 849, 1335, 854, 855, 36, 114, 36, - 36, 36, 36, 856, 857, 862, 198, 36, 580, 1306, - 861, 36, 879, 36, 883, 884, 886, 891, 895, 904, - 1391, 896, 912, 36, 496, 36, 36, 410, 36, 410, - 496, 922, 36, 927, 929, 933, 937, 1418, 328, 943, - 947, 944, 1212, 946, 976, 952, 949, 954, 410, 410, - 1430, 1432, 36, 972, 960, 735, 973, 1286, 36, 36, - 328, 981, 983, 990, 507, 114, 997, 489, 410, 1009, - 1014, 1008, 1024, 1075, 1033, 1047, 410, 1418, 1418, 410, - 1041, 1048, 328, 1056, 1440, 1049, 1058, 1068, 1078, 1072, - 114, 580, 1091, 1076, 1083, 1095, 580, 1212, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 1098, - 1099, 1100, 1103, 1289, 1290, 1106, 1101, 735, 1116, 337, - 580, 1121, 580, 1119, 580, 1128, 580, 580, 580, 500, - 474, 474, 1133, 1418, 1139, 1141, 1318, 1144, 1151, 1321, - 1173, 1176, 580, 1180, 1181, 1178, 1187, 1182, 545, 1161, - 1190, 1191, 1195, 735, 1198, 1203, 1250, 1199, 1207, 1247, - 1200, 1201, 1296, 1488, 1488, 1309, 1252, 328, 1267, 373, - 1497, 1497, 1253, 1255, 1262, 592, 592, 1288, 1313, 1314, - 1330, 580, 1323, 1324, 1327, 1340, 1342, 1345, 328, 545, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 1343, 611, 612, 613, 1331, 1347, 545, 545, 545, 545, - 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, - 545, 545, 1333, 1349, 114, 114, 1351, 1353, 1354, 1359, - 1364, 1367, 1382, 25, 1370, 26, 1371, 1372, 27, 331, - 1209, 1374, 1383, 28, 1386, 331, 1396, 29, 1401, 1403, - 1412, 1415, 1413, 328, 1416, 1422, 31, 1425, 1436, 1426, - 1437, 1439, 1441, 33, 1442, 1444, 1456, 114, 34, 114, - 1210, 1450, 35, 1457, 328, 1461, 1465, 331, 1466, 1475, - 1460, 331, 1468, 1459, 37, 1481, 38, 1482, 1503, 328, - 39, 1211, 9, 328, 1504, 1505, 950, 532, 40, 41, - 837, 32, 42, 490, 600, 321, 356, 942, 491, 805, - 447, 601, 669, 30, 22, 31, 489, 809, 30, 309, - 747, 515, 331, 206, 545, 31, 845, 331, 749, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 779, 757, 748, 96, 758, 331, 810, 750, 780, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 657, 331, 331, 328, 328, 331, 331, 331, 331, 331, - 812, 313, 331, 331, 814, 679, 657, 331, 331, 331, - 331, 331, 331, 331, 331, 500, 354, 331, 338, 123, - 500, 500, 105, 784, 285, 130, 331, 636, 124, 331, - 106, 331, 286, 331, 131, 636, 331, 232, 54, 236, - 21, 1025, 331, 500, 1123, 942, 1124, 1264, 1256, 1458, - 1427, 1467, 839, 500, 1303, 1414, 500, 500, 1409, 1443, - 328, 500, 1316, 969, 500, 1499, 500, 970, 500, 500, - 500, 500, 971, 1263, 852, 1337, 500, 1491, 965, 1260, - 500, 1431, 1438, 1433, 500, 1490, 1358, 871, 1307, 1196, - 328, 938, 500, 752, 914, 500, 1197, 500, 500, 796, - 989, 587, 1059, 500, 916, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, 500, 848, 300, 548, 869, - 626, 500, 500, 582, 114, 627, 500, 500, 628, 500, - 500, 500, 500, 500, 500, 500, 629, 500, 500, 630, - 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, - 839, 500, 500, 500, 500, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, - 500, 500, 500, 631, 767, 500, 1184, 500, 1268, 500, - 1188, 1140, 500, 407, 1102, 1071, 1109, 1053, 500, 1107, - 911, 1114, 356, 1042, 1170, 745, 1006, 646, 356, 1175, - 1266, 0, 0, 0, 940, 0, 582, 939, 0, 0, - 0, 582, 0, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 582, 0, 0, 0, 0, 0, 0, - 356, 0, 0, 0, 356, 582, 0, 582, 0, 582, - 0, 582, 582, 582, 0, 114, 0, 0, 0, 114, - 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 0, 0, 0, 0, 203, 356, 0, 114, 0, 0, - 356, 114, 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 0, 0, 0, 582, 0, 0, 356, - 0, 0, 0, 356, 356, 0, 356, 356, 356, 0, - 356, 356, 356, 114, 356, 356, 204, 774, 356, 356, - 356, 356, 328, 0, 545, 356, 356, 0, 0, 0, - 356, 356, 356, 356, 356, 356, 356, 356, 0, 328, - 0, 0, 0, 114, 0, 0, 0, 0, 0, 356, - 0, 0, 356, 0, 356, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 356, 205, 206, 207, 208, - 0, 209, 210, 211, 212, 213, 214, 215, 216, 0, - 0, 217, 218, 219, 220, 221, 222, 223, 224, 0, - 0, 0, 0, 0, 328, 328, 0, 0, 0, 0, - 0, 0, 328, 0, 0, 0, 839, 839, 0, 0, - 328, 328, 0, 328, 839, 839, 839, 839, 839, 0, - 839, 839, 0, 839, 839, 839, 839, 839, 839, 839, - 839, 0, 0, 328, 0, 839, 328, 839, 839, 839, - 839, 839, 839, 0, 0, 839, 331, 0, 0, 839, - 839, 0, 839, 839, 839, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 839, 0, 839, 0, 839, 839, - 0, 0, 839, 0, 839, 839, 839, 839, 839, 839, - 839, 839, 839, 839, 839, 839, 0, 839, 0, 0, - 839, 839, 0, 0, 839, 839, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 839, - 839, 839, 839, 839, 0, 0, 0, 839, 839, 0, - 0, 839, 0, 0, 0, 0, 839, 839, 839, 839, - 839, 0, 0, 0, 839, 0, 839, 0, 0, 0, - 0, 0, 839, 839, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 839, 839, 839, - 839, 0, 839, 774, 774, 0, 0, 0, 0, 839, - 0, 774, 774, 774, 774, 774, 0, 774, 774, 0, - 774, 774, 774, 774, 774, 774, 774, 0, 0, 734, - 0, 0, 774, 0, 774, 774, 774, 774, 774, 774, - 0, 0, 774, 0, 0, 0, 774, 774, 0, 774, - 774, 774, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 774, 0, 774, 0, 774, 774, 0, 0, 774, - 0, 774, 774, 774, 774, 774, 774, 774, 774, 774, - 774, 774, 774, 0, 774, 0, 0, 774, 774, 0, - 0, 774, 774, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 774, 774, 774, 774, - 774, 0, 0, 0, 774, 774, 0, 0, 774, 0, - 0, 0, 0, 774, 774, 774, 774, 774, 0, 0, - 0, 774, 331, 774, 0, 0, 0, 331, 331, 774, - 774, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, - 331, 0, 0, 0, 774, 774, 774, 774, 0, 774, - 331, 0, 0, 331, 331, 0, 774, 0, 331, 0, - 0, 331, 0, 331, 0, 331, 331, 331, 331, 0, - 0, 0, 0, 331, 0, 0, 0, 331, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 0, 0, 331, - 0, 0, 331, 0, 331, 331, 0, 0, 0, 0, - 331, 0, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 0, 0, 0, 0, 331, 331, - 0, 0, 0, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 0, 331, 331, 0, 0, 331, 331, - 331, 331, 331, 0, 0, 331, 331, 0, 0, 0, - 331, 331, 331, 331, 331, 331, 331, 331, 0, 0, - 0, 0, 0, 0, 0, 734, 0, 0, 0, 331, - 734, 734, 331, 0, 331, 0, 331, 0, 0, 331, - 0, 0, 0, 0, 0, 331, 361, 0, 0, 0, - 0, 0, 0, 734, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 734, 0, 0, 734, 734, 0, 0, - 0, 734, 0, 0, 734, 0, 734, 0, 734, 734, - 734, 734, 0, 0, 0, 0, 734, 0, 0, 0, - 734, 0, 0, 0, 734, 0, 0, 0, 0, 0, - 0, 0, 734, 0, 0, 734, 0, 734, 734, 0, - 0, 0, 0, 734, 0, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 0, 0, 0, 0, - 0, 734, 734, 0, 0, 0, 734, 734, 734, 734, - 734, 734, 0, 734, 734, 734, 0, 734, 734, 0, - 0, 734, 734, 734, 734, 324, 0, 0, 734, 734, - 324, 324, 0, 734, 734, 734, 734, 734, 734, 734, - 734, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 734, 324, 0, 734, 0, 734, 0, 734, - 0, 0, 734, 324, 0, 0, 324, 324, 734, 0, - 0, 324, 0, 0, 324, 0, 324, 0, 324, 324, - 324, 324, 0, 49, 0, 0, 324, 0, 0, 0, - 324, 0, 0, 0, 324, 0, 0, 0, 0, 0, - 0, 0, 324, 0, 0, 324, 0, 324, 324, 0, - 0, 0, 0, 324, 0, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 324, 324, 0, 0, 0, 0, - 0, 324, 324, 0, 0, 0, 324, 324, 324, 324, - 324, 324, 0, 324, 324, 324, 0, 324, 324, 0, - 0, 324, 324, 324, 324, 0, 0, 0, 324, 324, - 0, 0, 0, 324, 324, 324, 324, 324, 324, 324, - 324, 0, 361, 0, 0, 0, 0, 361, 361, 0, - 0, 0, 324, 0, 0, 324, 0, 324, 0, 324, - 0, 0, 324, 0, 0, 0, 28, 0, 324, 0, - 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 361, 0, 0, 361, 361, 0, 0, 0, 361, 0, - 0, 361, 0, 361, 0, 361, 361, 361, 361, 0, - 0, 0, 0, 361, 0, 0, 0, 361, 0, 0, - 0, 361, 0, 0, 0, 0, 0, 0, 0, 361, - 0, 0, 361, 0, 361, 361, 0, 0, 0, 35, - 361, 0, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 0, 0, 0, 0, 0, 361, 361, - 0, 0, 0, 361, 361, 0, 361, 361, 361, 0, - 361, 361, 361, 0, 361, 361, 0, 0, 361, 361, - 361, 361, 0, 0, 0, 361, 361, 0, 0, 0, - 361, 361, 361, 361, 361, 361, 361, 361, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 34, 361, - 0, 0, 361, 0, 361, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 49, 361, 49, 0, 49, 0, - 49, 0, 0, 49, 0, 49, 49, 0, 49, 0, - 49, 0, 49, 0, 49, 49, 49, 49, 0, 0, - 49, 49, 0, 0, 0, 0, 49, 49, 49, 49, - 49, 0, 0, 49, 49, 49, 0, 49, 0, 49, - 49, 49, 49, 49, 49, 49, 49, 28, 49, 49, - 49, 49, 0, 0, 49, 49, 49, 0, 49, 0, - 0, 0, 0, 49, 49, 0, 49, 49, 0, 49, - 49, 49, 0, 0, 0, 49, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 0, 49, 49, 0, - 0, 0, 28, 28, 0, 0, 0, 28, 0, 0, - 49, 28, 0, 28, 0, 0, 28, 0, 28, 28, - 0, 28, 0, 28, 0, 28, 0, 28, 28, 28, - 28, 0, 0, 28, 28, 0, 33, 0, 0, 28, - 0, 28, 28, 28, 0, 0, 28, 28, 28, 0, - 28, 49, 0, 28, 0, 28, 28, 28, 28, 0, - 0, 0, 28, 28, 28, 0, 35, 28, 28, 28, - 35, 0, 0, 0, 0, 0, 28, 28, 0, 28, - 28, 35, 28, 28, 28, 0, 35, 0, 28, 0, - 35, 0, 0, 35, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 35, 35, 0, 28, 0, - 35, 35, 0, 0, 28, 28, 35, 0, 35, 35, - 35, 35, 0, 28, 0, 0, 35, 0, 0, 0, - 35, 0, 35, 0, 0, 34, 0, 0, 0, 34, - 0, 0, 35, 0, 35, 35, 932, 35, 0, 0, - 34, 35, 0, 0, 0, 34, 0, 0, 0, 34, - 0, 0, 34, 0, 28, 0, 0, 0, 0, 0, - 0, 35, 0, 0, 34, 34, 0, 0, 35, 34, - 34, 0, 0, 0, 0, 34, 0, 34, 34, 34, - 34, 0, 0, 48, 0, 34, 0, 0, 0, 34, - 0, 34, 0, 0, 28, 0, 0, 0, 28, 0, - 0, 34, 0, 0, 34, 0, 34, 0, 0, 28, - 34, 0, 0, 0, 28, 0, 0, 0, 28, 0, - 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 34, 0, 0, 28, 28, 0, 34, 34, 28, 28, - 48, 0, 48, 0, 28, 0, 28, 28, 28, 28, - 7, 0, 0, 0, 28, 0, 0, 0, 28, 0, - 28, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 28, 0, 0, 28, 0, 28, 48, 0, 0, 28, - 0, 48, 0, 33, 0, 0, 48, 33, 48, 48, - 48, 48, 0, 933, 48, 0, 48, 0, 33, 28, - 48, 0, 0, 33, 0, 28, 28, 33, 0, 0, - 33, 0, 48, 0, 0, 48, 0, 48, 0, 0, + protected static readonly short [] yyTable = { 109, + 512, 155, 233, 111, 18, 292, 730, 194, 189, 515, + 735, 156, 429, 192, 447, 679, 428, 488, 570, 316, + 774, 43, 404, 471, 322, 327, 555, 701, 257, 334, + 542, 531, 569, 508, 496, 1011, 1131, 259, 905, 229, + 885, 782, 467, 650, 251, 787, 784, 770, 361, 308, + 369, 866, 1, 867, 937, 302, 805, 1164, 1165, 302, + 504, 537, 411, 662, 160, 309, 360, 311, 368, 706, + 14, 1253, 411, 1059, 194, 194, 1014, 337, 1004, 1060, + 1445, 480, 190, 880, 443, 1060, 161, 1260, 672, 663, + 162, 1042, 1359, 1044, 290, 194, 1318, 897, 249, 20, + 899, 163, 1159, 771, 1192, 985, 197, 6, 347, 406, + 640, 641, 288, 46, 579, 557, 994, 164, 873, 165, + 289, 664, 54, 800, 580, 46, 829, 433, 115, 166, + 434, 348, 167, 358, 346, 433, 409, 197, 821, 109, + 233, 155, 471, 111, 632, 412, 784, 250, 168, 291, + 413, 156, 414, 1214, 2, 412, 231, 169, 415, 416, + 413, 170, 414, 876, 772, 481, 793, 709, 415, 416, + 115, 505, 558, 506, 115, 249, 290, 42, 1389, 874, + 801, 806, 347, 446, 472, 1160, 194, 194, 880, 410, + 642, 332, 749, 196, 1494, 983, 476, 323, 328, 1446, + 784, 882, 1014, 976, 160, 348, 724, 290, 1125, 16, + 728, 447, 868, 711, 570, 438, 432, 1360, 353, 349, + 3, 4, 5, 6, 250, 665, 161, 507, 569, 470, + 162, 291, 15, 1061, 475, 417, 570, 46, 467, 1061, + 358, 163, 555, 444, 191, 427, 1427, 358, 194, 358, + 673, 358, 530, 1043, 257, 1045, 534, 164, 1319, 165, + 536, 539, 291, 484, 257, 541, 231, 555, 115, 166, + 487, 344, 167, 1451, 194, 491, 493, 290, 1073, 538, + 794, 877, 385, 710, 683, 1461, 194, 1462, 168, 518, + 937, 231, 529, 194, 526, 358, 528, 169, 738, 527, + 491, 170, 881, 472, 472, 94, 882, 687, 653, 436, + 437, 937, 544, 545, 1495, 755, 1331, 758, 386, 974, + 554, 570, 2, 1056, 1416, 966, 1423, 576, 1084, 712, + 556, 310, 291, 333, 654, 194, 830, 302, 194, 245, + 20, 1111, 749, 246, 48, 432, 354, 736, 470, 590, + 634, 636, 638, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 6, 1468, 677, 1191, 891, 891, + 1002, 477, 194, 194, 262, 433, 351, 432, 1471, 634, + 233, 46, 578, 995, 634, 630, 1207, 1292, 634, 1458, + 651, 653, 688, 247, 355, 736, 115, 486, 387, 388, + 194, 194, 937, 634, 44, 980, 678, 1491, 937, 1332, + 859, 434, 445, 290, 739, 113, 517, 654, 194, 653, + 231, 698, 351, 707, 645, 115, 1469, 677, 648, 649, + 634, 756, 194, 759, 660, 975, 433, 231, 666, 675, + 346, 1459, 1347, 676, 1137, 654, 472, 115, 891, 634, + 570, 1142, 890, 890, 496, 356, 736, 113, 561, 471, + 647, 113, 748, 700, 569, 696, 757, 678, 893, 445, + 1377, 1378, 434, 1380, 1309, 1049, 1167, 1068, 1310, 1069, + 1290, 312, 199, 864, 1399, 326, 326, 1406, 347, 726, + 482, 590, 446, 733, 680, 612, 613, 411, 1233, 346, + 391, 392, 1422, 1337, 677, 781, 326, 740, 742, 1453, + 1454, 348, 750, 1293, 393, 394, 329, 760, 747, 329, + 570, 865, 762, 635, 637, 349, 1444, 344, 290, 1291, + 634, 46, 890, 964, 194, 634, 554, 872, 346, 634, + 779, 1233, 1245, 483, 724, 775, 556, 347, 621, 446, + 621, 634, 959, 921, 634, 113, 194, 450, 921, 450, + 921, 554, 1294, 921, 921, 1485, 921, 921, 795, 795, + 348, 556, 810, 94, 812, 200, 1085, 249, 724, 915, + 412, 634, 780, 1000, 349, 413, 347, 414, 921, 878, + 356, 231, 432, 415, 416, 731, 115, 326, 326, 724, + 634, 731, 244, 634, 789, 621, 791, 774, 792, 348, + 344, 1234, 322, 1235, 450, 808, 827, 990, 322, 329, + 472, 814, 248, 349, 358, 329, 250, 1236, 260, 515, + 1237, 329, 660, 1238, 597, 329, 597, 861, 344, 358, + 359, 194, 344, 921, 344, 344, 344, 344, 329, 968, + 731, 843, 344, 315, 1234, 1239, 1235, 521, 828, 326, + 660, 1050, 194, 115, 1240, 470, 94, 322, 315, 660, + 1236, 822, 632, 1237, 743, 844, 1238, 231, 701, 491, + 329, 315, 534, 113, 257, 326, 329, 894, 115, 1050, + 432, 842, 1053, 728, 357, 733, 632, 326, 1239, 431, + 726, 356, 845, 356, 326, 356, 356, 1240, 356, 347, + 356, 915, 113, 633, 370, 329, 915, 397, 915, 910, + 1030, 915, 915, 632, 915, 915, 713, 329, 194, 889, + 329, 329, 348, 348, 113, 472, 347, 633, 401, 322, + 472, 846, 322, 900, 329, 901, 326, 788, 847, 326, + 402, 194, 356, 903, 356, 775, 936, 356, 924, 348, + 907, 1216, 1232, 924, 633, 924, 194, 347, 924, 924, + 194, 924, 924, 349, 1314, 563, 398, 852, 651, 735, + 590, 1216, 564, 326, 326, 590, 917, 1327, 733, 1104, + 348, 563, 399, 924, 565, 348, 959, 555, 564, 934, + 935, 915, 823, 400, 349, 1232, 1345, 1216, 403, 790, + 565, 326, 326, 735, 824, 358, 249, 597, 362, 296, + 358, 115, 194, 115, 435, 998, 1134, 1001, 666, 555, + 956, 433, 487, 1003, 614, 615, 890, 363, 364, 225, + 194, 194, 439, 520, 315, 468, 1095, 981, 924, 315, + 1083, 888, 679, 332, 984, 948, 521, 365, 1096, 1012, + 1140, 555, 1166, 1030, 992, 250, 733, 115, 366, 1257, + 115, 1410, 412, 522, 902, 442, 329, 413, 94, 414, + 469, 472, 329, 113, 581, 415, 416, 1283, 329, 909, + 315, 329, 329, 489, 582, 334, 315, 1039, 225, 334, + 226, 329, 113, 316, 113, 329, 194, 334, 1015, 113, + 1017, 334, 1019, 329, 334, 94, 334, 225, 647, 228, + 1280, 334, 94, 326, 1333, 490, 1029, 1280, 194, 656, + 447, 1190, 266, 1463, 666, 1250, 194, 329, 656, 655, + 735, 266, 275, 334, 275, 326, 917, 1148, 655, 275, + 113, 917, 295, 917, 296, 334, 917, 917, 733, 917, + 917, 491, 511, 1010, 967, 803, 1036, 326, 1037, 1482, + 1038, 1086, 911, 1087, 258, 113, 762, 911, 762, 911, + 762, 515, 911, 911, 501, 911, 911, 344, 502, 1500, + 1501, 344, 359, 329, 344, 775, 344, 516, 1076, 682, + 1078, 344, 1079, 683, 389, 390, 329, 329, 258, 329, + 329, 55, 258, 258, 258, 258, 258, 258, 258, 258, + 395, 396, 63, 63, 472, 822, 63, 741, 751, 741, + 751, 1088, 751, 165, 716, 165, 917, 165, 717, 535, + 725, 64, 487, 493, 502, 64, 329, 540, 329, 493, + 519, 177, 326, 177, 574, 177, 1112, 733, 775, 1034, + 548, 957, 911, 957, 1119, 931, 932, 329, 329, 1029, + 382, 383, 384, 326, 348, 233, 487, 1151, 1124, 487, + 618, 619, 620, 621, 1472, 1473, 959, 329, 753, 575, + 753, 554, 153, 115, 153, 329, 1144, 583, 329, 233, + 160, 556, 160, 1147, 161, 868, 161, 868, 113, 66, + 113, 66, 348, 439, 194, 487, 494, 352, 118, 408, + 118, 408, 494, 554, 183, 646, 183, 1173, 1079, 154, + 1151, 154, 280, 556, 280, 125, 287, 125, 287, 326, + 408, 408, 1116, 1117, 890, 890, 517, 517, 661, 1215, + 1231, 634, 634, 351, 113, 554, 681, 113, 1129, 1130, + 408, 684, 326, 622, 623, 556, 686, 194, 408, 1215, + 1203, 408, 616, 617, 708, 714, 351, 326, 715, 761, + 737, 326, 754, 1264, 194, 763, 1248, 764, 487, 351, + 765, 766, 784, 1231, 351, 1215, 783, 228, 798, 351, + 258, 351, 351, 351, 351, 786, 799, 803, 809, 351, + 258, 804, 811, 351, 115, 258, 813, 351, 115, 831, + 819, 115, 832, 433, 834, 351, 835, 838, 351, 42, + 351, 855, 850, 862, 856, 857, 858, 879, 196, 194, + 194, 863, 1285, 883, 371, 886, 115, 194, 884, 891, + 115, 326, 326, 895, 351, 194, 194, 896, 194, 904, + 912, 927, 922, 929, 1305, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 27, 1305, 933, 194, 943, + 949, 194, 115, 937, 944, 258, 27, 946, 947, 1305, + 952, 954, 972, 1334, 960, 973, 982, 258, 258, 258, + 976, 432, 258, 258, 989, 505, 1007, 1211, 1305, 27, + 351, 996, 115, 1390, 1008, 1013, 1023, 326, 1032, 1046, + 1040, 1057, 27, 1047, 1325, 1055, 1067, 27, 1048, 1071, + 1417, 1074, 27, 1077, 27, 27, 27, 27, 1325, 1075, + 27, 1082, 27, 1429, 1431, 1090, 27, 326, 1098, 1094, + 1099, 1097, 1100, 1102, 733, 1355, 1285, 1356, 27, 1105, + 1115, 27, 1211, 27, 1120, 1132, 487, 1118, 1140, 1143, + 1417, 1417, 1127, 1138, 1150, 1172, 1175, 1177, 1288, 1289, + 113, 1179, 1181, 1439, 1180, 1160, 1186, 27, 1189, 1194, + 1198, 1190, 1197, 27, 27, 1199, 1200, 1246, 1202, 1206, + 1249, 1317, 1251, 1295, 1320, 1254, 1252, 1308, 1400, 1323, + 1261, 1458, 1287, 335, 1312, 1266, 733, 338, 339, 340, + 341, 342, 343, 344, 345, 1326, 1417, 1313, 1329, 472, + 472, 1339, 1341, 1342, 1344, 261, 1346, 1322, 1330, 285, + 286, 287, 1352, 293, 294, 1350, 1353, 1358, 306, 307, + 1348, 1332, 733, 1366, 1363, 312, 1369, 314, 1370, 318, + 1371, 1373, 1487, 1487, 330, 331, 33, 1385, 1381, 1496, + 1496, 1382, 1412, 1395, 590, 590, 1411, 1402, 1414, 1415, + 1421, 1425, 1449, 1438, 1436, 1424, 1435, 1443, 367, 258, + 1441, 1455, 1440, 1456, 1460, 1465, 1474, 1464, 1459, 1467, + 1480, 113, 1481, 1502, 1503, 113, 1504, 9, 113, 953, + 530, 598, 838, 488, 945, 489, 805, 809, 445, 487, + 29, 599, 667, 21, 307, 326, 29, 513, 30, 498, + 745, 27, 27, 113, 30, 204, 27, 113, 94, 755, + 27, 846, 27, 746, 756, 27, 747, 27, 27, 810, + 27, 748, 27, 778, 27, 779, 27, 27, 27, 27, + 655, 812, 27, 27, 311, 677, 814, 655, 27, 113, + 27, 27, 27, 336, 329, 27, 27, 27, 326, 27, + 121, 103, 27, 283, 27, 27, 27, 27, 128, 122, + 104, 27, 27, 27, 284, 326, 27, 27, 27, 113, + 129, 634, 634, 230, 53, 27, 27, 234, 27, 27, + 21, 27, 27, 27, 1024, 942, 1122, 27, 1123, 1263, + 335, 1457, 1255, 1426, 1466, 1413, 1408, 1442, 312, 1302, + 258, 367, 969, 970, 971, 840, 965, 27, 1315, 1498, + 1336, 1262, 1259, 27, 27, 853, 1490, 1432, 1437, 543, + 326, 326, 27, 1430, 1195, 1489, 1357, 1306, 326, 938, + 1196, 916, 751, 988, 914, 797, 326, 326, 585, 326, + 849, 509, 298, 871, 1058, 546, 869, 624, 626, 625, + 629, 911, 627, 1183, 525, 628, 1267, 1187, 1139, 326, + 543, 768, 326, 27, 405, 1101, 1052, 840, 1113, 1070, + 1041, 1106, 609, 610, 611, 1108, 1169, 543, 543, 543, + 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, + 543, 543, 543, 33, 1005, 744, 644, 33, 1174, 1265, + 940, 939, 0, 0, 0, 0, 0, 0, 33, 0, + 0, 0, 0, 33, 0, 0, 0, 33, 0, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 33, 0, 0, 0, 33, 33, 0, 0, 0, 0, 33, 0, 33, 33, 33, 33, 0, - 0, 48, 0, 33, 0, 0, 5, 33, 0, 33, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 33, - 0, 48, 33, 0, 33, 0, 48, 0, 33, 0, - 48, 0, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 48, 0, 33, 0, - 48, 48, 0, 932, 0, 33, 48, 48, 48, 48, - 48, 48, 0, 0, 0, 0, 48, 0, 48, 0, - 48, 0, 48, 48, 0, 0, 0, 48, 0, 0, - 48, 0, 48, 0, 0, 48, 0, 48, 0, 0, - 0, 48, 48, 48, 0, 0, 0, 48, 48, 0, - 48, 0, 0, 48, 48, 48, 48, 48, 48, 0, - 0, 48, 0, 48, 0, 48, 0, 48, 0, 48, - 48, 0, 0, 0, 48, 0, 0, 48, 0, 48, - 0, 0, 48, 0, 48, 0, 0, 0, 48, 48, - 48, 0, 0, 0, 48, 48, 0, 0, 0, 0, - 48, 0, 48, 48, 48, 48, 0, 0, 48, 0, - 48, 0, 0, 0, 48, 0, 48, 7, 0, 0, - 0, 49, 0, 0, 0, 0, 48, 0, 0, 48, - 0, 48, 49, 0, 0, 48, 0, 49, 0, 0, - 0, 49, 0, 0, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 48, 49, 49, 0, 0, - 933, 49, 49, 0, 48, 0, 0, 49, 0, 49, - 49, 49, 49, 0, 0, 48, 0, 49, 0, 0, - 48, 49, 0, 49, 48, 0, 0, 48, 0, 0, - 0, 0, 0, 49, 0, 0, 49, 0, 49, 48, - 48, 0, 49, 0, 48, 48, 0, 0, 0, 0, - 48, 0, 48, 48, 48, 48, 0, 0, 0, 0, - 48, 0, 49, 0, 48, 0, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 0, 56, 48, - 0, 48, 0, 0, 0, 48, 57, 25, 58, 26, - 0, 0, 27, 59, 0, 60, 61, 28, 62, 63, - 64, 29, 0, 0, 0, 48, 0, 65, 0, 66, - 31, 67, 68, 69, 70, 0, 0, 33, 0, 0, - 0, 71, 34, 0, 72, 73, 35, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 74, 0, 37, 0, - 38, 75, 0, 0, 39, 0, 76, 77, 78, 79, - 80, 81, 40, 41, 82, 83, 42, 84, 0, 85, - 0, 0, 86, 87, 0, 331, 88, 89, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 91, 92, 93, 94, 0, 0, 0, 95, - 0, 0, 0, 96, 0, 0, 0, 0, 97, 98, - 99, 100, 101, 0, 0, 0, 102, 331, 103, 0, - 0, 0, 0, 0, 104, 105, 0, 0, 0, 0, + 0, 0, 0, 33, 0, 498, 0, 33, 0, 33, + 498, 498, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 33, 33, 0, 33, 0, 0, 0, 33, 0, + 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 543, 498, 498, 33, 0, + 0, 498, 0, 0, 498, 33, 498, 0, 498, 498, + 498, 498, 0, 0, 0, 0, 498, 0, 0, 0, + 498, 0, 0, 0, 498, 697, 0, 0, 0, 0, + 0, 0, 498, 0, 0, 498, 0, 498, 498, 0, + 0, 0, 0, 498, 772, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 0, 0, 0, 0, + 0, 498, 498, 0, 785, 741, 498, 498, 0, 498, + 498, 498, 498, 498, 498, 498, 0, 498, 498, 0, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 0, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 0, 0, 498, 0, 498, 0, 498, + 0, 0, 498, 840, 840, 0, 0, 0, 498, 0, + 0, 840, 840, 840, 840, 840, 0, 840, 840, 0, + 840, 840, 840, 840, 840, 840, 840, 840, 0, 0, + 0, 0, 840, 0, 840, 840, 840, 840, 840, 840, + 0, 0, 840, 0, 0, 0, 840, 840, 0, 840, + 840, 840, 0, 329, 0, 0, 0, 0, 0, 578, + 0, 840, 0, 840, 0, 840, 840, 0, 0, 840, + 0, 840, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 0, 840, 0, 0, 840, 840, 0, + 0, 840, 840, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 840, 840, 840, 840, + 840, 0, 0, 0, 840, 840, 0, 0, 840, 0, + 0, 0, 0, 840, 840, 840, 840, 840, 0, 0, + 0, 840, 0, 840, 0, 0, 0, 0, 0, 840, + 840, 0, 578, 0, 0, 0, 0, 578, 0, 578, + 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, + 0, 0, 0, 0, 840, 840, 840, 840, 0, 840, + 0, 578, 0, 578, 0, 578, 840, 578, 578, 578, + 772, 772, 0, 0, 0, 0, 0, 0, 772, 772, + 772, 772, 772, 578, 772, 772, 0, 772, 772, 772, + 772, 772, 772, 772, 0, 0, 732, 0, 0, 772, + 0, 772, 772, 772, 772, 772, 772, 0, 0, 772, + 0, 0, 0, 772, 772, 0, 772, 772, 772, 0, + 0, 0, 578, 0, 0, 0, 0, 0, 772, 0, + 772, 0, 772, 772, 0, 0, 772, 543, 772, 772, + 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, + 0, 772, 0, 0, 772, 772, 0, 0, 772, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 331, 0, 0, 0, 0, 0, 331, 0, 106, - 107, 108, 109, 0, 0, 0, 0, 0, 331, 0, - 0, 198, 0, 331, 0, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 0, 0, 0, - 0, 0, 331, 331, 0, 0, 0, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 0, 331, 331, 0, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 0, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 0, 502, 0, 0, 331, 0, 331, - 502, 0, 331, 0, 0, 0, 0, 0, 331, 0, - 0, 0, 0, 331, 0, 0, 331, 0, 331, 331, - 0, 0, 0, 331, 331, 0, 0, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 502, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 331, 331, 0, - 0, 0, 0, 0, 0, 331, 0, 0, 331, 0, - 0, 0, 0, 0, 331, 0, 0, 502, 0, 0, - 0, 0, 502, 0, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 924, 502, 502, 0, 502, - 502, 502, 502, 502, 502, 502, 502, 502, 502, 0, - 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 0, 498, 0, 0, 0, 0, 502, 498, - 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, + 0, 0, 0, 772, 772, 772, 772, 772, 0, 0, + 0, 772, 772, 0, 0, 772, 0, 0, 0, 0, + 772, 772, 772, 772, 772, 0, 0, 0, 772, 329, + 772, 0, 0, 0, 329, 329, 772, 772, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 322, 329, 0, 0, + 0, 772, 772, 772, 772, 0, 772, 0, 0, 0, + 329, 329, 0, 772, 0, 329, 0, 0, 329, 0, + 329, 0, 329, 329, 329, 329, 0, 0, 0, 0, + 329, 0, 0, 0, 329, 0, 0, 0, 329, 0, + 0, 0, 0, 0, 0, 0, 329, 0, 0, 329, + 0, 329, 329, 0, 0, 0, 0, 329, 0, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 0, 0, 0, 0, 329, 329, 0, 0, 0, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 0, 329, 329, 0, 0, 329, 329, 329, 329, 329, + 0, 0, 329, 329, 0, 0, 0, 329, 329, 329, + 329, 329, 329, 329, 329, 0, 0, 0, 0, 0, + 0, 0, 732, 0, 0, 0, 329, 732, 732, 329, + 0, 329, 0, 329, 0, 0, 329, 0, 0, 0, + 0, 0, 329, 359, 0, 0, 0, 0, 0, 0, + 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 732, 732, 0, 0, 0, 732, 0, + 0, 732, 0, 732, 0, 732, 732, 732, 732, 0, + 0, 0, 0, 732, 0, 0, 0, 732, 0, 0, + 0, 732, 0, 0, 0, 0, 0, 0, 0, 732, + 0, 0, 732, 0, 732, 732, 0, 0, 0, 0, + 732, 0, 732, 732, 732, 732, 732, 732, 732, 732, + 732, 732, 732, 0, 0, 0, 0, 0, 732, 732, + 0, 0, 0, 732, 732, 732, 732, 732, 732, 0, + 732, 732, 732, 0, 732, 732, 0, 329, 732, 732, + 732, 732, 322, 0, 0, 732, 732, 322, 322, 0, + 732, 732, 732, 732, 732, 732, 732, 732, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 732, + 322, 0, 732, 0, 732, 0, 732, 0, 0, 732, + 0, 0, 0, 322, 322, 732, 0, 0, 322, 0, + 0, 322, 0, 322, 0, 322, 322, 322, 322, 0, + 0, 0, 0, 322, 0, 0, 0, 322, 0, 0, + 0, 322, 0, 0, 0, 0, 0, 0, 0, 322, + 0, 0, 322, 0, 322, 322, 0, 0, 0, 0, + 322, 0, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 0, 0, 0, 0, 0, 322, 322, + 0, 0, 0, 322, 322, 322, 322, 322, 322, 0, + 322, 322, 322, 0, 322, 322, 0, 0, 322, 322, + 322, 322, 0, 0, 0, 322, 322, 0, 0, 0, + 322, 322, 322, 322, 322, 322, 322, 322, 0, 359, + 354, 0, 0, 0, 359, 359, 0, 0, 0, 322, + 0, 0, 322, 0, 322, 0, 322, 0, 0, 322, + 0, 0, 0, 0, 0, 322, 0, 359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 498, 0, 0, 924, 0, - 0, 0, 0, 924, 0, 924, 924, 924, 924, 924, - 924, 924, 924, 924, 924, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 924, 0, 924, - 388, 924, 0, 924, 924, 924, 498, 0, 0, 0, - 0, 498, 0, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 498, 498, 388, 498, 498, 498, - 498, 498, 498, 498, 0, 498, 498, 0, 498, 498, - 498, 498, 498, 498, 498, 498, 498, 498, 924, 498, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 0, 506, 0, 0, 0, 0, 498, 506, 0, - 498, 0, 0, 0, 0, 0, 498, 0, 0, 0, - 0, 324, 0, 0, 0, 0, 0, 324, 0, 388, - 388, 388, 388, 0, 388, 0, 388, 388, 0, 388, - 388, 388, 388, 388, 506, 388, 388, 388, 388, 0, - 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 0, 0, 0, 0, 324, 0, 388, 0, - 0, 388, 0, 0, 0, 506, 0, 388, 0, 0, - 506, 0, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 506, 0, 506, 506, 506, 506, - 506, 506, 506, 0, 506, 506, 0, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 0, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 0, 331, 746, 0, 0, 0, 506, 331, 0, 506, - 0, 25, 0, 26, 0, 506, 27, 0, 0, 0, - 0, 28, 0, 0, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, - 0, 33, 0, 331, 0, 0, 34, 0, 0, 0, - 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 0, 38, 0, 0, 0, 39, 0, - 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, - 42, 0, 0, 747, 331, 0, 0, 0, 0, 331, - 0, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 0, 0, 0, 0, 0, 0, 0, 292, - 0, 0, 0, 331, 0, 331, 331, 331, 331, 331, - 331, 331, 0, 331, 331, 0, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 0, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 0, - 431, 562, 0, 0, 322, 331, 431, 0, 331, 0, - 25, 0, 26, 0, 331, 27, 0, 0, 0, 0, - 28, 0, 0, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, - 33, 0, 431, 0, 0, 34, 0, 0, 0, 35, + 359, 359, 0, 0, 0, 359, 0, 0, 359, 0, + 359, 0, 359, 359, 359, 359, 0, 0, 0, 0, + 359, 0, 0, 0, 359, 0, 0, 0, 359, 0, + 0, 0, 0, 0, 0, 0, 359, 0, 0, 359, + 0, 359, 359, 0, 0, 0, 0, 359, 0, 359, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 0, 0, 0, 329, 0, 359, 359, 0, 0, 329, + 359, 359, 0, 359, 359, 359, 0, 359, 359, 359, + 0, 359, 359, 0, 0, 359, 359, 359, 359, 0, + 0, 0, 359, 359, 0, 0, 0, 359, 359, 359, + 359, 359, 359, 359, 359, 329, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 359, 0, 47, 359, + 0, 359, 0, 329, 0, 0, 0, 0, 0, 329, + 0, 0, 359, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, + 0, 329, 0, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 0, 0, 0, 0, + 329, 0, 0, 0, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 0, 329, 329, 0, 0, 329, + 329, 329, 329, 329, 0, 0, 329, 329, 0, 0, + 0, 329, 329, 329, 329, 329, 329, 329, 329, 34, + 0, 0, 0, 0, 0, 0, 354, 0, 0, 0, + 329, 0, 354, 329, 0, 329, 0, 329, 0, 0, + 329, 0, 0, 0, 0, 329, 329, 0, 329, 0, + 329, 329, 0, 0, 0, 329, 329, 0, 0, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 354, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 32, 329, + 329, 0, 0, 0, 0, 0, 0, 329, 0, 0, + 329, 0, 0, 0, 0, 0, 329, 0, 0, 354, + 0, 0, 0, 0, 354, 0, 354, 354, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 0, 0, 0, + 0, 0, 0, 354, 0, 0, 0, 354, 354, 0, + 354, 354, 354, 0, 354, 354, 354, 0, 354, 354, + 0, 27, 354, 354, 354, 354, 0, 0, 0, 354, + 354, 0, 0, 0, 354, 354, 354, 354, 354, 354, + 354, 354, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 354, 0, 47, 354, 0, 354, 47, + 0, 47, 0, 47, 31, 47, 0, 0, 47, 354, + 47, 47, 0, 47, 0, 47, 0, 47, 0, 47, + 47, 47, 47, 0, 0, 47, 47, 0, 0, 0, + 0, 47, 47, 47, 47, 47, 0, 0, 47, 47, + 47, 0, 47, 0, 47, 47, 47, 47, 47, 47, + 47, 47, 0, 47, 47, 47, 47, 0, 0, 47, + 47, 47, 0, 47, 0, 0, 0, 5, 47, 47, + 0, 47, 47, 0, 47, 47, 47, 0, 0, 0, + 47, 0, 0, 0, 0, 0, 34, 0, 0, 0, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 34, 47, 47, 0, 0, 34, 0, 0, 0, + 34, 0, 0, 34, 935, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 34, 34, 0, 0, 0, + 34, 34, 0, 0, 0, 0, 34, 0, 34, 34, + 34, 34, 0, 0, 0, 0, 34, 0, 0, 0, + 34, 0, 34, 0, 0, 32, 47, 0, 0, 32, + 0, 46, 34, 0, 34, 34, 0, 34, 0, 0, + 32, 34, 0, 0, 0, 32, 0, 0, 0, 32, + 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 34, 0, 0, 32, 32, 0, 34, 34, 32, + 32, 0, 0, 0, 0, 32, 0, 32, 32, 32, + 32, 0, 0, 0, 0, 32, 0, 0, 27, 32, + 0, 32, 27, 0, 7, 0, 0, 0, 0, 0, + 0, 32, 0, 27, 32, 0, 32, 0, 27, 0, + 32, 0, 27, 0, 0, 27, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 27, 0, + 32, 31, 27, 27, 0, 31, 32, 32, 27, 0, + 27, 27, 27, 27, 0, 0, 31, 0, 27, 0, + 0, 31, 27, 0, 27, 31, 0, 936, 31, 0, + 0, 0, 0, 0, 27, 0, 0, 27, 0, 27, + 31, 31, 0, 27, 0, 31, 31, 0, 0, 0, + 0, 31, 0, 31, 31, 31, 31, 0, 0, 0, + 0, 31, 0, 27, 5, 31, 0, 31, 46, 27, + 27, 0, 0, 0, 0, 0, 0, 31, 0, 46, + 31, 0, 31, 0, 46, 0, 31, 0, 46, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 46, 46, 0, 31, 0, 46, 46, + 0, 935, 0, 31, 46, 46, 46, 46, 46, 46, + 0, 0, 0, 0, 46, 0, 46, 0, 46, 0, + 46, 46, 0, 0, 0, 46, 0, 0, 46, 0, + 46, 0, 0, 46, 0, 46, 0, 0, 0, 46, + 46, 46, 0, 0, 0, 46, 46, 0, 46, 0, + 0, 46, 46, 46, 46, 46, 46, 0, 0, 46, + 0, 46, 0, 46, 0, 46, 0, 46, 46, 0, + 0, 0, 46, 0, 0, 46, 0, 46, 0, 0, + 46, 0, 46, 0, 0, 0, 46, 46, 46, 0, + 0, 0, 46, 46, 0, 0, 0, 0, 46, 0, + 46, 46, 46, 46, 0, 0, 46, 0, 46, 0, + 0, 7, 46, 0, 46, 47, 0, 0, 0, 0, + 0, 0, 0, 0, 46, 0, 47, 46, 0, 46, + 0, 47, 0, 46, 0, 47, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 38, 0, 0, 0, 39, 0, 0, - 0, 0, 0, 0, 0, 40, 41, 0, 0, 42, - 0, 0, 321, 431, 0, 0, 0, 0, 431, 0, - 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, - 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 431, 0, 431, 431, 431, 431, 431, 431, - 431, 0, 431, 431, 0, 431, 431, 431, 431, 431, - 431, 431, 431, 431, 431, 0, 431, 431, 431, 431, - 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, - 431, 431, 431, 431, 431, 431, 431, 431, 0, 391, - 887, 0, 0, 354, 431, 391, 0, 431, 0, 25, - 0, 26, 0, 431, 27, 0, 0, 0, 0, 28, - 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 33, - 0, 391, 0, 0, 34, 0, 0, 0, 35, 0, + 47, 47, 0, 46, 0, 47, 47, 0, 0, 0, + 0, 47, 0, 47, 47, 47, 47, 0, 0, 0, + 0, 47, 0, 0, 936, 47, 0, 47, 46, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 0, 46, + 47, 0, 47, 0, 46, 0, 47, 0, 46, 0, + 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 46, 46, 0, 47, 0, 46, 46, + 0, 0, 0, 0, 46, 0, 46, 46, 46, 46, + 0, 0, 0, 0, 46, 0, 0, 0, 46, 0, + 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 0, 55, 46, 0, 46, 0, 0, 0, 46, + 56, 24, 57, 25, 0, 0, 26, 58, 0, 59, + 60, 27, 61, 62, 63, 28, 0, 0, 0, 46, + 0, 64, 0, 65, 30, 66, 67, 68, 69, 0, + 0, 32, 0, 0, 0, 70, 33, 0, 71, 72, + 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 73, 0, 36, 0, 37, 74, 0, 0, 38, 0, + 75, 76, 77, 78, 79, 80, 39, 40, 81, 82, + 41, 83, 0, 84, 0, 0, 85, 86, 0, 329, + 87, 88, 0, 0, 0, 329, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89, 90, 91, 92, 93, + 0, 0, 0, 94, 0, 0, 0, 95, 0, 0, + 0, 0, 96, 97, 98, 99, 100, 0, 0, 0, + 101, 329, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 0, 38, 0, 0, 0, 39, 0, 0, 0, - 0, 0, 0, 0, 40, 41, 0, 0, 42, 0, - 0, 321, 391, 0, 0, 0, 0, 391, 0, 391, - 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 391, 0, 391, 391, 391, 391, 391, 391, 391, - 0, 391, 0, 0, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 0, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 0, 537, 0, - 353, 0, 354, 391, 537, 0, 391, 0, 0, 0, - 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, - 537, 353, 0, 0, 230, 0, 353, 0, 353, 353, - 353, 353, 0, 0, 0, 0, 353, 0, 0, 0, - 353, 331, 0, 0, 353, 0, 0, 331, 0, 0, - 0, 737, 353, 0, 0, 353, 0, 353, 0, 0, - 0, 537, 0, 0, 0, 0, 537, 0, 537, 537, - 537, 537, 537, 537, 537, 537, 537, 537, 537, 0, - 0, 353, 0, 331, 0, 0, 0, 0, 0, 0, - 537, 0, 537, 0, 537, 0, 537, 537, 537, 737, - 537, 537, 0, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 537, 0, 0, 0, 537, 537, 537, 537, - 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 537, 537, 549, 537, 0, 353, 0, 0, - 549, 0, 331, 0, 0, 0, 0, 0, 331, 0, - 0, 537, 0, 0, 331, 331, 331, 331, 331, 331, - 737, 331, 0, 331, 331, 0, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 549, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 0, - 0, 0, 0, 331, 0, 331, 0, 0, 331, 0, - 0, 0, 0, 0, 331, 0, 0, 549, 0, 0, - 0, 0, 549, 0, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 0, 0, 0, 553, 0, - 0, 0, 0, 0, 553, 0, 549, 0, 549, 0, - 549, 0, 549, 549, 549, 0, 549, 549, 0, 0, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 0, - 0, 0, 549, 549, 549, 549, 549, 549, 549, 549, - 553, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 549, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 556, 549, 0, 0, - 0, 0, 556, 0, 0, 0, 0, 0, 0, 0, - 0, 553, 0, 0, 0, 0, 553, 0, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 556, 0, - 553, 0, 553, 0, 553, 0, 553, 553, 553, 0, - 553, 553, 0, 0, 553, 553, 553, 553, 0, 0, - 0, 553, 553, 0, 0, 0, 553, 553, 553, 553, - 553, 553, 553, 553, 0, 0, 0, 0, 0, 556, - 0, 0, 0, 0, 556, 553, 556, 556, 556, 556, - 556, 556, 556, 556, 556, 556, 556, 0, 0, 0, - 554, 553, 0, 0, 0, 0, 554, 0, 556, 0, - 556, 0, 556, 0, 556, 556, 556, 0, 556, 556, - 0, 0, 556, 556, 556, 556, 0, 0, 0, 556, - 556, 0, 0, 0, 556, 556, 556, 556, 556, 556, - 556, 556, 554, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 556, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 555, 556, - 0, 0, 0, 0, 555, 0, 0, 0, 0, 0, - 0, 0, 0, 554, 0, 0, 0, 0, 554, 0, + 0, 0, 0, 105, 106, 107, 108, 0, 0, 0, + 0, 201, 329, 0, 0, 196, 0, 329, 0, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 0, 0, 0, 0, 0, 329, 0, 0, 0, + 0, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 580, 329, 329, 202, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 0, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 0, 500, 0, + 0, 329, 0, 329, 500, 0, 329, 0, 0, 0, + 0, 0, 329, 203, 204, 205, 206, 0, 207, 208, + 209, 210, 211, 212, 213, 214, 0, 0, 215, 216, + 217, 218, 219, 220, 221, 222, 0, 0, 0, 0, + 500, 0, 0, 580, 0, 0, 0, 0, 580, 0, + 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 580, 0, 580, 0, 580, 0, 580, 580, + 580, 500, 0, 0, 0, 0, 500, 0, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 927, + 500, 500, 0, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 580, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500, 500, 500, 500, 500, 500, 0, 496, 0, 0, + 0, 0, 500, 496, 0, 0, 0, 0, 0, 0, + 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, + 0, 0, 927, 0, 0, 0, 0, 927, 0, 927, + 927, 927, 927, 927, 927, 927, 927, 927, 927, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 386, 0, + 0, 927, 0, 927, 386, 927, 0, 927, 927, 927, + 496, 0, 0, 0, 0, 496, 0, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 496, 496, + 386, 496, 496, 496, 496, 496, 496, 496, 0, 496, + 496, 0, 496, 496, 496, 496, 496, 496, 496, 496, + 496, 496, 927, 496, 496, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 0, 504, 0, 0, 0, + 0, 496, 504, 0, 496, 0, 0, 0, 0, 0, + 496, 0, 0, 0, 0, 322, 0, 0, 0, 0, + 0, 322, 0, 386, 386, 386, 386, 0, 386, 0, + 386, 386, 0, 386, 386, 386, 386, 386, 504, 386, + 386, 386, 386, 0, 386, 386, 386, 386, 386, 386, + 386, 386, 386, 386, 386, 386, 386, 386, 386, 386, + 386, 386, 386, 386, 386, 386, 0, 0, 0, 0, + 322, 0, 386, 0, 0, 386, 0, 0, 0, 504, + 0, 386, 0, 0, 504, 0, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 504, 0, + 504, 504, 504, 504, 504, 504, 504, 0, 504, 504, + 0, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 0, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 0, 329, 745, 0, 0, 0, + 504, 329, 0, 504, 0, 24, 0, 25, 0, 504, + 26, 0, 0, 0, 0, 27, 0, 0, 0, 28, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, + 0, 0, 0, 0, 0, 32, 0, 329, 0, 0, + 33, 0, 0, 0, 34, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 0, 37, 0, + 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, + 39, 40, 0, 0, 41, 0, 0, 746, 329, 0, + 0, 0, 0, 329, 0, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 329, 0, 329, + 329, 329, 329, 329, 329, 329, 0, 329, 329, 0, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 0, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 0, 429, 560, 0, 0, 320, 329, + 429, 0, 329, 0, 24, 0, 25, 0, 329, 26, + 0, 0, 0, 0, 27, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 429, 0, 0, 33, + 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 0, 0, + 0, 38, 0, 0, 0, 0, 0, 0, 0, 39, + 40, 0, 0, 41, 0, 0, 319, 429, 0, 0, + 0, 0, 429, 0, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 429, 0, 429, 429, + 429, 429, 429, 429, 429, 0, 429, 429, 0, 429, + 429, 429, 429, 429, 429, 429, 429, 429, 429, 0, + 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, 429, 429, + 429, 429, 0, 389, 887, 0, 0, 352, 429, 389, + 0, 429, 0, 24, 0, 25, 0, 429, 26, 0, + 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 32, 0, 389, 0, 0, 33, 0, + 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 0, 0, 0, + 38, 0, 0, 0, 0, 0, 0, 0, 39, 40, + 0, 0, 41, 0, 0, 319, 389, 0, 0, 0, + 0, 389, 0, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 389, 0, 389, 389, 389, + 389, 389, 389, 389, 0, 389, 0, 0, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 0, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 389, 389, 389, 389, 389, 389, 389, 389, 389, + 389, 0, 535, 0, 350, 0, 352, 389, 535, 0, + 389, 0, 0, 0, 0, 0, 389, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 350, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 350, 0, 0, 0, 535, 350, 0, 0, 227, 0, + 350, 0, 350, 350, 350, 350, 0, 0, 0, 0, + 350, 0, 0, 0, 350, 329, 0, 0, 350, 0, + 0, 329, 0, 0, 0, 735, 350, 0, 0, 350, + 0, 350, 0, 0, 0, 535, 0, 0, 0, 0, + 535, 0, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 0, 0, 350, 0, 329, 0, 0, + 0, 0, 0, 0, 535, 0, 535, 0, 535, 0, + 535, 535, 535, 735, 535, 535, 0, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 0, 0, 0, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 547, 535, + 0, 350, 0, 0, 547, 0, 329, 0, 0, 0, + 0, 0, 329, 0, 0, 535, 0, 0, 329, 329, + 329, 329, 329, 329, 735, 329, 0, 329, 329, 0, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 547, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 0, 0, 0, 0, 329, 0, 329, + 0, 0, 329, 0, 0, 0, 0, 0, 329, 0, + 0, 547, 0, 0, 0, 0, 547, 0, 547, 547, + 547, 547, 547, 547, 547, 547, 547, 547, 547, 0, + 0, 0, 551, 0, 0, 0, 0, 0, 551, 0, + 547, 0, 547, 0, 547, 0, 547, 547, 547, 0, + 547, 547, 0, 0, 547, 547, 547, 547, 547, 547, + 547, 547, 547, 0, 0, 0, 547, 547, 547, 547, + 547, 547, 547, 547, 551, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 547, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 554, 547, 0, 0, 0, 0, 554, 0, 0, 0, + 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, + 551, 0, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 554, 0, 551, 0, 551, 0, 551, 0, + 551, 551, 551, 0, 551, 551, 0, 0, 551, 551, + 551, 551, 0, 0, 0, 551, 551, 0, 0, 0, + 551, 551, 551, 551, 551, 551, 551, 551, 0, 0, + 0, 0, 0, 554, 0, 0, 0, 0, 554, 551, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 555, 0, 554, 0, 554, 0, 554, 0, 554, 554, + 554, 0, 0, 0, 552, 551, 0, 0, 0, 0, + 552, 0, 554, 0, 554, 0, 554, 0, 554, 554, 554, 0, 554, 554, 0, 0, 554, 554, 554, 554, - 0, 0, 0, 554, 554, 0, 559, 0, 554, 554, - 554, 554, 554, 554, 554, 554, 0, 0, 0, 0, - 0, 555, 0, 0, 0, 0, 555, 554, 555, 555, - 555, 555, 555, 555, 555, 555, 555, 555, 555, 0, - 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, - 555, 0, 555, 0, 555, 0, 555, 555, 555, 0, - 555, 555, 0, 0, 555, 555, 555, 555, 0, 0, - 0, 555, 555, 0, 560, 0, 555, 555, 555, 555, - 555, 555, 555, 555, 0, 0, 0, 0, 0, 559, - 0, 0, 0, 0, 559, 555, 559, 559, 559, 559, + 0, 0, 0, 554, 554, 0, 0, 0, 554, 554, + 554, 554, 554, 554, 554, 554, 552, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 554, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 553, 554, 0, 0, 0, 0, 553, 0, + 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, + 0, 0, 552, 0, 552, 552, 552, 552, 552, 552, + 552, 552, 552, 552, 552, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 553, 0, 552, 0, 552, 0, + 552, 0, 552, 552, 552, 0, 552, 552, 0, 0, + 552, 552, 552, 552, 0, 0, 0, 552, 552, 0, + 557, 0, 552, 552, 552, 552, 552, 552, 552, 552, + 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, + 553, 552, 553, 553, 553, 553, 553, 553, 553, 553, + 553, 553, 553, 0, 0, 0, 0, 552, 0, 0, + 0, 0, 0, 0, 553, 0, 553, 0, 553, 0, + 553, 553, 553, 0, 553, 553, 0, 0, 553, 553, + 553, 553, 0, 0, 0, 553, 553, 0, 558, 0, + 553, 553, 553, 553, 553, 553, 553, 553, 0, 0, + 0, 0, 0, 557, 0, 0, 0, 0, 557, 553, + 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, + 557, 0, 0, 0, 0, 553, 0, 0, 0, 0, + 0, 0, 557, 0, 557, 0, 557, 0, 557, 557, + 557, 0, 0, 0, 0, 0, 557, 557, 557, 557, + 0, 0, 0, 557, 557, 0, 559, 0, 557, 557, + 557, 557, 557, 557, 557, 557, 0, 0, 0, 0, + 0, 558, 0, 0, 0, 0, 558, 557, 558, 558, + 558, 558, 558, 558, 558, 558, 558, 558, 558, 0, + 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, + 558, 0, 558, 0, 558, 0, 558, 558, 558, 0, + 0, 0, 0, 0, 558, 558, 558, 558, 0, 0, + 0, 558, 558, 0, 560, 0, 558, 558, 558, 558, + 558, 558, 558, 558, 0, 0, 0, 0, 0, 559, + 0, 0, 0, 0, 559, 558, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 0, 0, 0, - 0, 555, 0, 0, 0, 0, 0, 0, 559, 0, + 0, 558, 0, 0, 0, 0, 0, 0, 559, 0, 559, 0, 559, 0, 559, 559, 559, 0, 0, 0, 0, 0, 559, 559, 559, 559, 0, 0, 0, 559, 559, 0, 561, 0, 559, 559, 559, 559, 559, 559, @@ -10235,14 +10309,14 @@ void case_957() 0, 0, 0, 0, 0, 0, 560, 0, 560, 0, 560, 0, 560, 560, 560, 0, 0, 0, 0, 0, 560, 560, 560, 560, 0, 0, 0, 560, 560, 0, - 562, 0, 560, 560, 560, 560, 560, 560, 560, 560, + 562, 0, 0, 0, 560, 560, 560, 560, 560, 560, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 561, 560, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 560, 0, 0, 0, 0, 0, 0, 561, 0, 561, 0, 561, 0, 561, 561, 561, 0, 0, 0, 0, 0, 561, 561, 561, 561, 0, 0, 0, 561, 561, 0, 563, 0, - 561, 561, 561, 561, 561, 561, 561, 561, 0, 0, + 0, 0, 561, 561, 561, 561, 561, 561, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 562, 561, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 0, 0, 0, 0, 561, 0, 0, 0, 0, @@ -10268,15 +10342,15 @@ void case_957() 565, 565, 565, 565, 565, 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 565, 0, 565, 0, 565, 0, 565, 565, 565, 0, 0, 0, 0, 0, - 565, 565, 565, 565, 0, 0, 0, 565, 565, 0, - 567, 0, 0, 0, 565, 565, 565, 565, 565, 565, + 0, 0, 565, 565, 0, 0, 0, 565, 565, 0, + 567, 0, 0, 0, 0, 0, 565, 565, 565, 565, 0, 0, 0, 0, 0, 566, 0, 0, 0, 0, 566, 565, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 0, 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, 566, 0, 566, 0, 566, 0, - 566, 566, 566, 0, 0, 0, 0, 0, 566, 566, + 566, 566, 566, 0, 0, 0, 0, 0, 0, 0, 566, 566, 0, 0, 0, 566, 566, 0, 568, 0, - 0, 0, 566, 566, 566, 566, 566, 566, 0, 0, + 0, 0, 0, 0, 566, 566, 566, 566, 0, 0, 0, 0, 0, 567, 0, 0, 0, 0, 567, 566, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 0, 0, 0, 0, 566, 0, 0, 0, 0, @@ -10290,920 +10364,886 @@ void case_957() 568, 0, 568, 0, 568, 0, 568, 568, 568, 0, 0, 0, 0, 0, 0, 0, 568, 568, 0, 0, 0, 568, 568, 0, 570, 0, 0, 0, 0, 0, - 568, 568, 568, 568, 0, 0, 0, 0, 0, 569, + 0, 0, 568, 568, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 569, 568, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 0, 0, 0, 0, 568, 0, 0, 0, 0, 0, 0, 569, 0, 569, 0, 569, 0, 569, 569, 569, 0, 0, 0, 0, 0, 0, 0, 569, 569, 0, 0, 0, 569, - 569, 0, 571, 0, 0, 0, 0, 0, 569, 569, + 569, 0, 571, 0, 0, 0, 0, 0, 0, 0, 569, 569, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 570, 569, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 570, 0, 570, 0, 570, 0, 570, 570, 570, 0, 0, 0, 0, 0, - 0, 0, 570, 570, 0, 0, 0, 570, 570, 0, + 0, 0, 0, 570, 0, 0, 0, 570, 570, 0, 572, 0, 0, 0, 0, 0, 0, 0, 570, 570, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 571, 570, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 571, 0, 571, 0, 571, 0, 571, 571, 571, 0, 0, 0, 0, 0, 0, 0, - 571, 571, 0, 0, 0, 571, 571, 0, 573, 0, + 0, 571, 0, 0, 0, 571, 571, 0, 573, 0, 0, 0, 0, 0, 0, 0, 571, 571, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 572, 571, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 572, 0, 572, 0, 572, 0, 572, 572, 572, 0, 0, 0, 0, 0, 0, 0, 0, 572, - 0, 0, 0, 572, 572, 0, 574, 0, 0, 0, + 0, 0, 0, 0, 572, 0, 574, 0, 0, 0, 0, 0, 0, 0, 572, 572, 0, 0, 0, 0, 0, 573, 0, 0, 0, 0, 573, 572, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 573, 0, 573, 0, 573, 0, 573, 573, 573, 0, 0, 0, 0, 0, 0, 0, 0, 573, 0, 0, - 0, 573, 573, 0, 575, 0, 0, 0, 0, 0, + 0, 0, 573, 0, 575, 0, 0, 0, 0, 0, 0, 0, 573, 573, 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, 574, 573, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 0, 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 574, 0, 574, 0, 574, 0, 574, 574, 574, 0, 0, 0, - 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 574, 0, 576, 0, 0, 0, 0, 0, 0, 0, 574, 574, 0, 0, 0, 0, 0, 575, 0, 0, 0, 0, 575, 574, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 0, 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, 575, 0, 575, 0, - 575, 0, 575, 575, 575, 0, 0, 0, 0, 0, - 0, 0, 0, 575, 0, 0, 0, 0, 575, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 575, 575, + 575, 0, 575, 575, 575, 0, 0, 0, 577, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 575, 575, 0, 0, 0, 0, 0, 576, 0, 0, 0, 0, 576, 575, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 0, 0, 0, 0, 575, 0, 0, 0, 0, 0, 0, 576, 0, 576, 0, 576, 0, - 576, 576, 576, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 576, 0, 578, 0, - 0, 0, 0, 0, 0, 0, 576, 576, 0, 0, - 0, 0, 0, 577, 0, 0, 0, 0, 577, 576, - 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, - 577, 0, 0, 0, 0, 576, 0, 0, 0, 0, - 0, 0, 577, 0, 577, 0, 577, 0, 577, 577, - 577, 0, 0, 0, 579, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 577, 577, 0, 0, 0, 0, - 0, 578, 0, 0, 0, 0, 578, 577, 578, 578, - 578, 578, 578, 578, 578, 578, 578, 578, 578, 0, + 576, 576, 576, 0, 0, 0, 0, 329, 0, 0, + 0, 735, 0, 0, 0, 0, 576, 0, 0, 0, + 0, 577, 0, 0, 0, 0, 577, 576, 577, 577, + 577, 577, 577, 577, 577, 577, 577, 577, 577, 576, + 0, 0, 0, 329, 0, 0, 0, 0, 0, 0, + 577, 0, 577, 0, 577, 576, 577, 577, 577, 735, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, - 578, 0, 578, 0, 578, 0, 578, 578, 578, 0, - 0, 0, 0, 331, 0, 0, 0, 737, 0, 0, - 0, 0, 578, 0, 0, 0, 0, 579, 0, 0, - 0, 0, 579, 578, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 579, 578, 0, 0, 0, 331, - 0, 0, 0, 0, 0, 0, 579, 0, 579, 0, - 579, 578, 579, 579, 579, 737, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 579, + 0, 0, 0, 0, 0, 577, 0, 0, 0, 0, + 0, 0, 329, 0, 0, 0, 0, 0, 329, 0, + 0, 577, 0, 0, 329, 0, 329, 0, 329, 0, + 735, 329, 0, 329, 329, 0, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 0, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 0, + 0, 55, 0, 329, 0, 329, 0, 0, 329, 56, + 24, 57, 25, 0, 329, 26, 58, 0, 59, 60, + 27, 61, 62, 63, 28, 0, 0, 0, 0, 0, + 64, 0, 65, 30, 66, 67, 68, 69, 0, 0, + 32, 0, 0, 0, 70, 33, 0, 71, 72, 34, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, + 0, 36, 0, 37, 74, 0, 0, 38, 0, 75, + 76, 77, 78, 79, 80, 39, 40, 81, 82, 41, + 83, 0, 84, 0, 0, 85, 86, 0, 0, 87, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 91, 92, 93, 0, + 0, 0, 94, 0, 0, 0, 95, 0, 0, 0, + 0, 96, 97, 98, 99, 100, 0, 0, 0, 101, + 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 265, 0, + 0, 0, 105, 106, 107, 108, 56, 24, 57, 25, + 0, 0, 26, 58, 0, 59, 60, 27, 61, 62, + 63, 28, 0, 0, 0, 0, 0, 64, 0, 65, + 30, 66, 67, 68, 69, 0, 0, 32, 0, 0, + 0, 70, 33, 0, 71, 72, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 73, 0, 36, 0, + 37, 74, 0, 0, 38, 0, 75, 76, 77, 78, + 79, 80, 39, 40, 81, 82, 41, 83, 0, 84, + 0, 0, 85, 86, 0, 0, 87, 88, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 89, 90, 91, 92, 93, 0, 0, 0, 94, + 0, 0, 0, 95, 0, 0, 0, 0, 96, 97, + 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, + 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 579, 0, 0, 0, 0, 0, 0, 331, 0, - 0, 0, 0, 0, 331, 0, 0, 579, 0, 0, - 331, 0, 331, 0, 331, 0, 737, 331, 0, 331, - 331, 0, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 0, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 0, 0, 56, 0, 331, - 0, 331, 0, 0, 331, 57, 25, 58, 26, 0, - 331, 27, 59, 0, 60, 61, 28, 62, 63, 64, - 29, 0, 0, 0, 0, 0, 65, 0, 66, 31, - 67, 68, 69, 70, 0, 0, 33, 0, 0, 0, - 71, 34, 0, 72, 73, 35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 0, 37, 0, 38, - 75, 0, 0, 39, 0, 76, 77, 78, 79, 80, - 81, 40, 41, 82, 83, 42, 84, 0, 85, 0, - 0, 86, 87, 0, 0, 88, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 549, 0, 0, 0, 105, + 106, 107, 108, 56, 24, 57, 25, 0, 0, 26, + 58, 0, 59, 60, 27, 61, 62, 63, 28, 0, + 0, 0, 0, 0, 64, 0, 65, 30, 66, 67, + 68, 69, 0, 0, 32, 0, 0, 0, 70, 33, + 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 0, 36, 0, 37, 74, 0, + 0, 38, 0, 75, 76, 77, 78, 79, 80, 39, + 40, 81, 82, 41, 83, 0, 84, 0, 0, 85, + 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, + 91, 92, 93, 0, 0, 0, 94, 0, 0, 0, + 95, 0, 0, 0, 0, 96, 97, 98, 99, 100, + 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, + 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 0, 0, 0, 95, 0, - 0, 0, 96, 0, 0, 0, 0, 97, 98, 99, - 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, + 0, 0, 932, 0, 0, 0, 105, 550, 107, 108, + 932, 932, 932, 932, 0, 0, 932, 932, 0, 932, + 932, 932, 932, 932, 932, 932, 0, 0, 0, 0, + 0, 932, 0, 932, 932, 932, 932, 932, 932, 0, + 0, 932, 0, 0, 0, 932, 932, 0, 932, 932, + 932, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 932, 0, 932, 0, 932, 932, 0, 0, 932, 0, + 932, 932, 932, 932, 932, 932, 932, 932, 932, 932, + 932, 932, 0, 932, 0, 0, 932, 932, 0, 0, + 932, 932, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 932, 932, 932, 932, 932, + 0, 0, 0, 932, 0, 0, 0, 932, 0, 0, + 0, 0, 932, 932, 932, 932, 932, 0, 0, 0, + 932, 0, 932, 0, 0, 0, 0, 0, 932, 932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 267, 0, 0, 0, 106, 107, - 108, 109, 57, 25, 58, 26, 0, 0, 27, 59, - 0, 60, 61, 28, 62, 63, 64, 29, 0, 0, - 0, 0, 0, 65, 0, 66, 31, 67, 68, 69, - 70, 0, 0, 33, 0, 0, 0, 71, 34, 0, - 72, 73, 35, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 74, 0, 37, 0, 38, 75, 0, 0, - 39, 0, 76, 77, 78, 79, 80, 81, 40, 41, - 82, 83, 42, 84, 0, 85, 0, 0, 86, 87, - 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 91, 92, - 93, 94, 0, 0, 0, 95, 0, 0, 0, 96, - 0, 0, 0, 0, 97, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 0, 0, 0, 0, 0, - 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 783, + 0, 0, 0, 932, 932, 932, 932, 783, 783, 783, + 783, 0, 0, 783, 783, 0, 783, 783, 783, 783, + 783, 783, 783, 0, 0, 0, 0, 0, 783, 0, + 783, 783, 783, 783, 783, 783, 0, 0, 783, 0, + 0, 0, 783, 783, 0, 783, 783, 783, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 783, 0, 783, + 0, 783, 783, 0, 0, 783, 0, 783, 783, 783, + 783, 783, 783, 783, 783, 783, 783, 783, 783, 0, + 783, 0, 0, 783, 783, 0, 0, 783, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 551, 0, 0, 0, 106, 107, 108, 109, 57, - 25, 58, 26, 0, 0, 27, 59, 0, 60, 61, - 28, 62, 63, 64, 29, 0, 0, 0, 0, 0, - 65, 0, 66, 31, 67, 68, 69, 70, 0, 0, - 33, 0, 0, 0, 71, 34, 0, 72, 73, 35, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, - 0, 37, 0, 38, 75, 0, 0, 39, 0, 76, - 77, 78, 79, 80, 81, 40, 41, 82, 83, 42, - 84, 0, 85, 0, 0, 86, 87, 0, 0, 88, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, - 0, 0, 95, 0, 0, 0, 96, 0, 0, 0, - 0, 97, 98, 99, 100, 101, 0, 0, 0, 102, - 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, + 0, 0, 783, 783, 783, 783, 783, 0, 0, 0, + 783, 0, 0, 0, 783, 0, 0, 0, 0, 783, + 783, 783, 783, 783, 0, 0, 0, 783, 0, 783, + 0, 0, 0, 0, 0, 783, 783, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 929, 0, - 0, 0, 106, 552, 108, 109, 929, 929, 929, 929, - 0, 0, 929, 929, 0, 929, 929, 929, 929, 929, - 929, 929, 0, 0, 0, 0, 0, 929, 0, 929, - 929, 929, 929, 929, 929, 0, 0, 929, 0, 0, - 0, 929, 929, 0, 929, 929, 929, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 929, 0, 929, 0, - 929, 929, 0, 0, 929, 0, 929, 929, 929, 929, - 929, 929, 929, 929, 929, 929, 929, 929, 0, 929, - 0, 0, 929, 929, 0, 0, 929, 929, 0, 0, + 0, 0, 0, 0, 0, 0, 731, 0, 0, 0, + 783, 783, 783, 783, 56, 24, 0, 25, 0, 0, + 26, 253, 0, 1033, 0, 27, 61, 62, 0, 28, + 0, 0, 24, 0, 25, 64, 0, 26, 30, 0, + 0, 0, 27, 0, 0, 32, 28, 0, 0, 0, + 33, 0, 71, 72, 34, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 36, 33, 37, 74, + 0, 34, 38, 0, 0, 76, 0, 78, 0, 80, + 39, 40, 254, 36, 41, 37, 0, 0, 0, 38, + 0, 86, 0, 0, 87, 88, 0, 39, 40, 0, + 0, 41, 0, 0, 319, 0, 0, 0, 0, 89, + 90, 91, 92, 300, 0, 0, 0, 511, 732, 0, + 0, 95, 0, 0, 0, 0, 0, 97, 98, 99, + 100, 0, 0, 0, 101, 0, 102, 0, 0, 0, + 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 929, 929, 929, 929, 929, 0, 0, 0, 929, - 0, 0, 0, 929, 0, 0, 0, 0, 929, 929, - 929, 929, 929, 0, 0, 0, 929, 0, 929, 0, - 0, 0, 0, 0, 929, 929, 0, 0, 0, 0, + 0, 0, 0, 918, 0, 0, 0, 105, 301, 107, + 108, 56, 24, 0, 25, 0, 0, 26, 253, 0, + 1155, 0, 27, 61, 62, 352, 28, 0, 0, 24, + 0, 25, 64, 0, 26, 30, 0, 0, 0, 27, + 0, 0, 32, 28, 0, 0, 0, 33, 0, 71, + 72, 34, 30, 0, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 36, 33, 37, 74, 919, 34, 38, + 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, + 36, 41, 37, 0, 0, 0, 38, 0, 86, 0, + 0, 87, 88, 0, 39, 40, 0, 0, 41, 0, + 0, 319, 0, 0, 0, 0, 89, 90, 91, 92, + 300, 0, 0, 0, 511, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, + 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, + 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, + 62, 0, 28, 0, 105, 301, 107, 108, 64, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 352, 33, 0, 71, 72, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, + 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, + 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 784, 0, 0, 0, 929, - 929, 929, 929, 784, 784, 784, 784, 0, 0, 784, - 784, 0, 784, 784, 784, 784, 784, 784, 784, 0, - 0, 0, 0, 0, 784, 0, 784, 784, 784, 784, - 784, 784, 0, 0, 784, 0, 0, 0, 784, 784, - 0, 784, 784, 784, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 784, 0, 784, 0, 784, 784, 0, - 0, 784, 0, 784, 784, 784, 784, 784, 784, 784, - 784, 784, 784, 784, 784, 0, 784, 0, 0, 784, - 784, 0, 0, 784, 784, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 784, 784, - 784, 784, 784, 0, 0, 0, 784, 0, 0, 0, - 784, 0, 0, 0, 0, 784, 784, 784, 784, 784, - 0, 0, 0, 784, 0, 784, 0, 0, 0, 0, - 0, 784, 784, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 89, 90, 91, 92, 300, 0, 0, 0, + 718, 987, 0, 0, 95, 0, 0, 0, 0, 0, + 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, + 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 733, 0, 0, 0, 784, 784, 784, 784, - 57, 25, 0, 26, 0, 0, 27, 255, 0, 1034, - 0, 28, 62, 63, 0, 29, 0, 0, 25, 0, - 26, 65, 0, 27, 31, 0, 0, 0, 28, 0, - 0, 33, 29, 0, 0, 0, 34, 0, 72, 73, - 35, 31, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 37, 34, 38, 75, 0, 35, 39, 0, - 0, 77, 0, 79, 0, 81, 40, 41, 256, 37, - 42, 38, 0, 0, 0, 39, 0, 87, 0, 0, - 88, 89, 0, 40, 41, 0, 0, 42, 0, 0, - 321, 0, 0, 0, 0, 90, 91, 92, 93, 302, - 0, 0, 0, 513, 734, 0, 0, 96, 0, 0, - 0, 0, 0, 98, 99, 100, 101, 0, 0, 0, - 102, 0, 103, 0, 0, 0, 0, 0, 104, 105, + 0, 0, 0, 0, 0, 0, 0, 0, 731, 0, + 105, 719, 107, 108, 0, 0, 56, 24, 0, 25, + 0, 720, 26, 253, 0, 0, 0, 27, 61, 62, + 0, 28, 0, 0, 170, 0, 170, 64, 0, 170, + 30, 0, 0, 0, 170, 0, 0, 32, 170, 0, + 0, 0, 33, 0, 71, 72, 34, 170, 0, 0, + 0, 0, 0, 0, 170, 0, 0, 0, 36, 170, + 37, 74, 919, 170, 38, 0, 0, 76, 0, 78, + 0, 80, 39, 40, 254, 170, 41, 170, 0, 0, + 0, 170, 0, 86, 0, 0, 87, 88, 0, 170, + 170, 0, 0, 170, 0, 0, 170, 0, 0, 0, + 0, 89, 90, 91, 92, 300, 0, 0, 0, 511, + 0, 0, 0, 95, 0, 0, 0, 0, 0, 97, + 98, 99, 100, 0, 0, 0, 101, 0, 102, 0, + 0, 956, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 918, - 0, 0, 0, 106, 303, 108, 109, 57, 25, 0, - 26, 0, 0, 27, 255, 0, 1156, 0, 28, 62, - 63, 354, 29, 0, 0, 25, 0, 26, 65, 0, - 27, 31, 0, 0, 0, 28, 0, 0, 33, 29, - 0, 0, 0, 34, 0, 72, 73, 35, 31, 0, - 0, 0, 0, 0, 0, 33, 0, 0, 0, 37, - 34, 38, 75, 919, 35, 39, 0, 0, 77, 0, - 79, 0, 81, 40, 41, 256, 37, 42, 38, 0, - 0, 0, 39, 0, 87, 0, 0, 88, 89, 0, - 40, 41, 0, 0, 42, 0, 0, 321, 0, 0, - 0, 0, 90, 91, 92, 93, 302, 0, 0, 0, - 513, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, - 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, - 0, 0, 0, 57, 25, 0, 26, 0, 0, 27, - 255, 0, 0, 0, 28, 62, 63, 0, 29, 0, - 106, 303, 108, 109, 65, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 354, 34, - 0, 72, 73, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 38, 75, 0, - 0, 39, 0, 0, 77, 0, 79, 0, 81, 40, - 41, 256, 0, 42, 0, 0, 0, 0, 0, 0, - 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 302, 0, 0, 0, 720, 988, 0, 0, - 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, - 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 699, 0, 0, 0, 105, + 301, 107, 108, 56, 24, 0, 25, 0, 0, 26, + 253, 0, 0, 0, 27, 61, 62, 170, 28, 0, + 0, 170, 0, 170, 64, 0, 170, 30, 0, 0, + 0, 170, 0, 0, 32, 170, 0, 0, 0, 33, + 0, 71, 72, 34, 170, 0, 0, 0, 0, 0, + 0, 170, 0, 0, 0, 36, 170, 37, 74, 0, + 170, 38, 0, 0, 76, 0, 78, 0, 80, 39, + 40, 254, 170, 41, 170, 0, 84, 0, 170, 0, + 86, 0, 0, 87, 88, 0, 170, 170, 0, 0, + 170, 0, 0, 170, 0, 0, 0, 0, 89, 90, + 91, 92, 300, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, + 0, 0, 0, 101, 0, 102, 956, 0, 0, 0, + 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, + 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, + 27, 61, 62, 0, 28, 0, 105, 301, 107, 108, + 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 170, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 733, 0, 106, 721, 108, 109, - 0, 0, 57, 25, 0, 26, 0, 722, 27, 255, - 0, 0, 0, 28, 62, 63, 0, 29, 0, 0, - 172, 0, 172, 65, 0, 172, 31, 0, 0, 0, - 172, 0, 0, 33, 172, 0, 0, 0, 34, 0, - 72, 73, 35, 172, 0, 0, 0, 0, 0, 0, - 172, 0, 0, 0, 37, 172, 38, 75, 919, 172, - 39, 0, 0, 77, 0, 79, 0, 81, 40, 41, - 256, 172, 42, 172, 0, 0, 0, 172, 0, 87, - 0, 0, 88, 89, 0, 172, 172, 0, 0, 172, - 0, 0, 172, 0, 0, 0, 0, 90, 91, 92, - 93, 302, 0, 0, 0, 513, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 98, 99, 100, 101, 0, - 0, 0, 102, 0, 103, 0, 0, 953, 0, 0, - 104, 105, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, + 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, + 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, + 0, 0, 718, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, + 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 701, 0, 0, 0, 106, 303, 108, 109, 57, - 25, 0, 26, 0, 0, 27, 255, 0, 0, 0, - 28, 62, 63, 172, 29, 0, 0, 172, 0, 172, - 65, 0, 172, 31, 0, 0, 0, 172, 0, 0, - 33, 172, 0, 0, 0, 34, 0, 72, 73, 35, - 172, 0, 0, 0, 0, 0, 0, 172, 0, 0, - 0, 37, 172, 38, 75, 0, 172, 39, 0, 0, - 77, 0, 79, 0, 81, 40, 41, 256, 172, 42, - 172, 0, 85, 0, 172, 0, 87, 0, 0, 88, - 89, 0, 172, 172, 0, 0, 172, 0, 0, 172, - 0, 0, 0, 0, 90, 91, 92, 93, 302, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, - 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, - 0, 103, 953, 0, 0, 0, 0, 104, 105, 0, - 0, 0, 0, 0, 0, 57, 25, 0, 26, 0, - 0, 27, 255, 0, 0, 0, 28, 62, 63, 0, - 29, 0, 106, 303, 108, 109, 65, 0, 0, 31, - 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 172, 34, 0, 72, 73, 35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, - 75, 0, 0, 39, 0, 0, 77, 0, 79, 0, - 81, 40, 41, 256, 0, 42, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 302, 0, 0, 0, 720, 0, - 0, 0, 96, 0, 0, 0, 0, 0, 98, 99, - 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, + 731, 0, 105, 719, 107, 108, 0, 0, 56, 24, + 0, 25, 0, 720, 26, 253, 0, 0, 0, 27, + 61, 62, 0, 28, 0, 0, 24, 0, 25, 64, + 0, 26, 30, 0, 0, 0, 27, 0, 0, 32, + 28, 0, 0, 0, 33, 0, 71, 72, 34, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 36, 33, 37, 74, 0, 34, 38, 0, 0, 76, + 0, 78, 0, 80, 39, 40, 254, 36, 41, 37, + 0, 0, 0, 38, 0, 86, 0, 0, 87, 88, + 0, 39, 40, 0, 0, 41, 0, 0, 319, 0, + 0, 0, 0, 89, 90, 91, 92, 300, 0, 0, + 0, 511, 0, 0, 0, 95, 0, 0, 0, 0, + 0, 97, 98, 99, 100, 0, 0, 0, 101, 0, + 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 733, 0, 106, 721, - 108, 109, 0, 0, 57, 25, 0, 26, 0, 722, - 27, 255, 0, 0, 0, 28, 62, 63, 0, 29, - 0, 0, 25, 0, 26, 65, 0, 27, 31, 0, - 0, 0, 28, 0, 0, 33, 29, 0, 0, 0, - 34, 0, 72, 73, 35, 31, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 0, 37, 34, 38, 75, - 0, 35, 39, 0, 0, 77, 0, 79, 0, 81, - 40, 41, 256, 37, 42, 38, 0, 0, 0, 39, - 0, 87, 0, 0, 88, 89, 0, 40, 41, 0, - 0, 42, 0, 0, 321, 0, 0, 0, 0, 90, - 91, 92, 93, 302, 0, 0, 0, 513, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 98, 99, 100, - 101, 0, 0, 0, 102, 0, 103, 0, 0, 0, - 0, 0, 104, 105, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, + 0, 105, 301, 107, 108, 56, 24, 0, 25, 0, + 0, 26, 253, 0, 0, 0, 27, 61, 62, 352, + 28, 0, 0, 24, 0, 25, 64, 0, 26, 30, + 0, 0, 0, 27, 0, 0, 32, 28, 0, 0, + 0, 33, 0, 71, 72, 34, 30, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 36, 33, 37, + 74, 0, 34, 38, 0, 0, 76, 0, 78, 0, + 80, 39, 40, 254, 36, 41, 37, 0, 0, 0, + 38, 0, 86, 0, 0, 87, 88, 0, 39, 40, + 0, 0, 41, 0, 0, 513, 0, 0, 0, 0, + 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, + 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, + 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, + 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 586, 0, 0, 0, 106, 303, 108, - 109, 57, 25, 0, 26, 0, 0, 27, 255, 0, - 0, 0, 28, 62, 63, 354, 29, 0, 0, 25, - 0, 26, 65, 0, 27, 31, 0, 0, 0, 28, - 0, 0, 33, 29, 0, 0, 0, 34, 0, 72, - 73, 35, 31, 0, 0, 0, 0, 0, 0, 33, - 0, 0, 0, 37, 34, 38, 75, 0, 35, 39, - 0, 0, 77, 0, 79, 0, 81, 40, 41, 256, - 37, 42, 38, 0, 0, 0, 39, 0, 87, 0, - 0, 88, 89, 0, 40, 41, 0, 0, 42, 0, - 0, 515, 0, 0, 0, 0, 90, 91, 92, 93, - 94, 0, 0, 0, 0, 0, 0, 0, 96, 0, - 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, - 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, - 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 906, 0, 0, 0, 105, 106, + 107, 108, 56, 24, 0, 25, 0, 0, 26, 253, + 0, 0, 0, 27, 61, 62, 352, 28, 0, 0, + 24, 0, 25, 64, 0, 26, 30, 0, 0, 0, + 27, 0, 0, 32, 28, 0, 0, 0, 33, 0, + 71, 72, 34, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 36, 33, 37, 74, 0, 34, + 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, + 254, 36, 41, 37, 0, 0, 0, 38, 0, 86, + 0, 0, 87, 88, 0, 39, 40, 0, 0, 41, + 0, 0, 566, 0, 0, 0, 0, 89, 90, 91, + 92, 300, 0, 0, 0, 0, 0, 0, 0, 95, + 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, + 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, + 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 906, 0, 0, 0, 106, 107, 108, 109, 57, 25, - 0, 26, 0, 0, 27, 255, 0, 0, 0, 28, - 62, 63, 354, 29, 0, 0, 25, 0, 26, 65, - 0, 27, 31, 0, 0, 0, 28, 0, 0, 33, - 29, 0, 0, 0, 34, 0, 72, 73, 35, 31, - 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 37, 34, 38, 75, 0, 35, 39, 0, 0, 77, - 0, 79, 0, 81, 40, 41, 256, 37, 42, 38, - 0, 0, 0, 39, 0, 87, 0, 0, 88, 89, - 0, 40, 41, 0, 0, 42, 0, 0, 568, 0, - 0, 0, 0, 90, 91, 92, 93, 302, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 98, 99, 100, 101, 0, 0, 0, 102, 0, - 103, 0, 0, 0, 0, 0, 104, 105, 0, 0, + 0, 602, 0, 0, 0, 105, 301, 107, 108, 602, + 602, 0, 602, 0, 0, 602, 602, 0, 0, 0, + 602, 602, 602, 352, 602, 0, 0, 24, 0, 25, + 602, 0, 26, 602, 0, 0, 0, 27, 0, 0, + 602, 28, 0, 0, 0, 602, 0, 602, 602, 602, + 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, + 0, 602, 33, 602, 602, 0, 34, 602, 0, 0, + 602, 0, 602, 0, 602, 602, 602, 602, 36, 602, + 37, 0, 0, 0, 38, 0, 602, 0, 0, 602, + 602, 0, 39, 40, 0, 0, 41, 0, 0, 746, + 0, 0, 0, 0, 602, 602, 602, 602, 602, 0, + 0, 0, 0, 0, 0, 0, 602, 0, 0, 0, + 0, 0, 602, 602, 602, 602, 0, 0, 0, 602, + 0, 602, 0, 0, 0, 0, 0, 602, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 604, 0, 0, - 0, 106, 303, 108, 109, 604, 604, 0, 604, 0, - 0, 604, 604, 0, 0, 0, 604, 604, 604, 354, - 604, 0, 0, 25, 0, 26, 604, 0, 27, 604, - 0, 0, 0, 28, 0, 0, 604, 29, 0, 0, - 0, 604, 0, 604, 604, 604, 31, 0, 0, 0, - 0, 0, 0, 33, 0, 0, 0, 604, 34, 604, - 604, 0, 35, 604, 0, 0, 604, 0, 604, 0, - 604, 604, 604, 604, 37, 604, 38, 0, 0, 0, - 39, 0, 604, 0, 0, 604, 604, 0, 40, 41, - 0, 0, 42, 0, 0, 747, 0, 0, 0, 0, - 604, 604, 604, 604, 604, 0, 0, 0, 0, 0, - 0, 0, 604, 0, 0, 0, 0, 0, 604, 604, - 604, 604, 0, 0, 0, 604, 0, 604, 0, 0, - 0, 0, 0, 604, 604, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 494, 0, + 0, 0, 602, 602, 602, 602, 56, 24, 0, 25, + 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, + 352, 28, 0, 0, 0, 0, 0, 64, 0, 0, + 30, 0, 0, 0, 0, 0, 0, 32, 0, 448, + 0, 329, 33, 0, 71, 72, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, + 37, 74, 449, 0, 38, 0, 0, 76, 0, 78, + 0, 80, 39, 40, 254, 450, 41, 329, 0, 0, + 452, 0, 0, 0, 0, 453, 0, 454, 455, 456, + 457, 0, 0, 0, 0, 458, 0, 0, 0, 459, + 0, 89, 90, 91, 255, 0, 0, 0, 0, 0, + 0, 460, 0, 95, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 496, 0, 0, 0, 604, 604, - 604, 604, 57, 25, 0, 26, 0, 0, 27, 255, - 0, 0, 0, 28, 62, 63, 354, 29, 0, 0, - 0, 0, 0, 65, 0, 0, 31, 0, 0, 0, - 0, 0, 0, 33, 0, 450, 0, 331, 34, 0, - 72, 73, 35, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 37, 0, 38, 75, 451, 0, - 39, 0, 0, 77, 0, 79, 0, 81, 40, 41, - 256, 452, 42, 331, 0, 0, 454, 0, 0, 0, - 0, 455, 0, 456, 457, 458, 459, 0, 0, 0, - 0, 460, 0, 0, 0, 461, 0, 90, 91, 92, - 257, 0, 0, 0, 0, 0, 0, 462, 0, 96, - 463, 0, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 465, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 331, 331, 331, 331, - 737, 0, 0, 331, 331, 106, 497, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 0, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 0, - 48, 0, 1314, 0, 48, 331, 48, 0, 331, 48, - 0, 48, 48, 0, 48, 0, 48, 0, 48, 0, - 48, 48, 48, 48, 0, 0, 48, 48, 0, 0, - 0, 0, 48, 0, 48, 48, 48, 0, 0, 48, - 0, 48, 0, 48, 0, 0, 48, 0, 48, 48, - 48, 48, 0, 0, 0, 48, 48, 48, 0, 0, - 48, 48, 48, 0, 0, 0, 0, 0, 0, 48, - 48, 0, 48, 48, 0, 48, 48, 48, 0, 0, - 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, - 0, 48, 0, 48, 0, 48, 0, 81, 48, 0, - 48, 48, 0, 48, 0, 48, 48, 48, 0, 48, - 48, 48, 48, 0, 0, 48, 48, 0, 0, 0, - 0, 48, 0, 48, 48, 48, 0, 0, 48, 0, - 48, 0, 48, 0, 0, 48, 0, 48, 48, 48, - 48, 0, 0, 0, 48, 48, 48, 48, 0, 48, - 48, 48, 0, 0, 0, 0, 0, 0, 48, 48, - 0, 48, 48, 0, 48, 48, 48, 0, 0, 0, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, - 48, 0, 48, 0, 48, 0, 82, 48, 0, 48, - 48, 0, 48, 0, 48, 48, 48, 0, 48, 48, - 48, 48, 0, 0, 48, 48, 0, 0, 0, 0, - 48, 0, 48, 48, 48, 0, 0, 48, 0, 48, - 0, 48, 0, 0, 48, 0, 48, 48, 48, 48, - 0, 0, 0, 48, 48, 48, 48, 0, 48, 48, - 48, 0, 0, 0, 0, 0, 0, 48, 48, 0, - 48, 48, 0, 48, 48, 48, 0, 0, 0, 48, + 463, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 329, 329, 329, 329, 735, 0, 0, 329, 329, 105, + 495, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 0, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 0, 46, 0, 1313, 0, 46, 329, + 46, 0, 329, 46, 0, 46, 46, 0, 46, 0, + 46, 0, 46, 0, 46, 46, 46, 46, 0, 0, + 46, 46, 0, 0, 0, 0, 46, 0, 46, 46, + 46, 0, 0, 46, 0, 46, 0, 46, 0, 0, + 46, 0, 46, 46, 46, 46, 0, 0, 0, 46, + 46, 46, 0, 0, 46, 46, 46, 0, 0, 0, + 0, 0, 0, 46, 46, 0, 46, 46, 0, 46, + 46, 46, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 0, 48, 0, 48, 48, - 0, 48, 0, 48, 48, 212, 48, 0, 48, 0, - 48, 0, 48, 48, 48, 48, 0, 0, 48, 48, - 0, 0, 0, 0, 48, 0, 48, 48, 48, 0, - 0, 48, 0, 48, 331, 48, 0, 0, 48, 0, - 48, 48, 48, 48, 0, 0, 0, 48, 48, 48, - 0, 0, 48, 48, 48, 48, 0, 331, 0, 0, - 0, 48, 48, 0, 48, 48, 28, 48, 48, 48, - 331, 0, 0, 48, 0, 331, 0, 0, 331, 0, - 331, 0, 331, 331, 331, 331, 0, 0, 0, 28, - 331, 0, 0, 48, 331, 0, 0, 0, 331, 213, - 0, 0, 28, 0, 352, 0, 331, 28, 0, 331, - 0, 331, 28, 0, 28, 28, 28, 28, 0, 0, - 28, 0, 28, 0, 0, 0, 28, 352, 0, 0, - 331, 0, 0, 0, 450, 331, 0, 0, 28, 0, - 352, 28, 331, 28, 263, 352, 331, 0, 229, 48, - 352, 0, 352, 352, 352, 352, 0, 451, 0, 331, - 352, 0, 0, 0, 352, 0, 0, 28, 352, 0, - 452, 0, 0, 28, 28, 454, 352, 0, 0, 352, - 455, 352, 456, 457, 458, 459, 0, 0, 0, 0, - 460, 331, 0, 0, 461, 0, 0, 0, 1299, 0, - 0, 57, 25, 0, 26, 352, 462, 27, 255, 463, - 0, 464, 28, 62, 63, 0, 29, 0, 0, 0, - 0, 0, 65, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 465, 0, 34, 0, 72, - 73, 35, 0, 588, 0, 0, 0, 0, 0, 0, - 589, 0, 0, 37, 0, 38, 75, 0, 0, 39, - 0, 352, 77, 0, 79, 0, 81, 40, 41, 256, - 0, 42, 0, 0, 0, 0, 0, 0, 590, 0, - 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 1300, 0, 0, 0, 0, 90, 91, 92, 93, - 94, 0, 0, 0, 0, 0, 0, 0, 96, 913, - 0, 591, 0, 0, 98, 99, 100, 101, 0, 0, - 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, - 105, 0, 0, 0, 0, 0, 0, 57, 25, 0, - 26, 0, 0, 27, 255, 0, 0, 0, 28, 62, - 63, 0, 29, 0, 106, 107, 108, 109, 65, 0, - 0, 31, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 34, 0, 72, 73, 35, 0, 588, - 0, 0, 0, 0, 0, 0, 589, 0, 0, 37, - 0, 38, 75, 0, 0, 39, 0, 0, 77, 0, - 79, 0, 81, 40, 41, 256, 0, 42, 0, 0, - 0, 0, 0, 0, 590, 0, 0, 88, 89, 0, + 0, 0, 0, 46, 0, 46, 0, 46, 0, 46, + 0, 79, 46, 0, 46, 46, 0, 46, 0, 46, + 46, 46, 0, 46, 46, 46, 46, 0, 0, 46, + 46, 0, 0, 0, 0, 46, 0, 46, 46, 46, + 0, 0, 46, 0, 46, 0, 46, 0, 0, 46, + 0, 46, 46, 46, 46, 0, 0, 0, 46, 46, + 46, 46, 0, 46, 46, 46, 0, 0, 0, 0, + 0, 0, 46, 46, 0, 46, 46, 0, 46, 46, + 46, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 93, 94, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 591, 0, 0, - 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, - 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, - 0, 0, 0, 57, 25, 0, 26, 0, 0, 27, - 255, 0, 0, 0, 28, 62, 63, 0, 29, 0, - 106, 107, 108, 109, 65, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 34, - 0, 72, 73, 35, 0, 588, 0, 0, 0, 0, - 0, 0, 589, 0, 0, 37, 0, 38, 75, 0, - 0, 39, 0, 0, 77, 0, 79, 0, 81, 40, - 41, 256, 0, 42, 0, 0, 0, 0, 0, 0, - 590, 0, 0, 88, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 94, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, - 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 0, 0, 0, 0, 57, - 25, 0, 26, 0, 0, 27, 255, 0, 0, 0, - 28, 62, 63, 0, 29, 0, 106, 107, 108, 109, - 65, 0, 0, 31, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 34, 0, 72, 73, 35, + 0, 0, 46, 0, 46, 0, 46, 0, 46, 0, + 80, 46, 0, 46, 46, 0, 46, 0, 46, 46, + 46, 0, 46, 46, 46, 46, 0, 0, 46, 46, + 0, 0, 0, 0, 46, 0, 46, 46, 46, 0, + 0, 46, 0, 46, 0, 46, 0, 0, 46, 0, + 46, 46, 46, 46, 0, 0, 0, 46, 46, 46, + 46, 0, 46, 46, 46, 0, 0, 0, 0, 0, + 0, 46, 46, 0, 46, 46, 0, 46, 46, 46, + 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, + 46, 0, 46, 46, 0, 46, 0, 46, 46, 210, + 46, 0, 46, 0, 46, 0, 46, 46, 46, 46, + 0, 0, 46, 46, 0, 0, 0, 0, 46, 0, + 46, 46, 46, 0, 0, 46, 0, 46, 329, 46, + 0, 0, 46, 0, 46, 46, 46, 46, 0, 0, + 0, 46, 46, 46, 0, 0, 46, 46, 46, 46, + 0, 329, 0, 0, 0, 46, 46, 0, 46, 46, + 0, 46, 46, 46, 329, 0, 0, 46, 0, 329, + 0, 0, 329, 0, 329, 0, 329, 329, 329, 329, + 0, 0, 0, 0, 329, 0, 0, 46, 329, 0, + 0, 0, 329, 211, 0, 0, 448, 0, 0, 0, + 329, 0, 0, 329, 0, 329, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 449, + 0, 0, 0, 0, 329, 0, 0, 0, 0, 329, + 0, 0, 450, 0, 0, 0, 329, 452, 261, 0, + 329, 0, 453, 46, 454, 455, 456, 457, 0, 0, + 0, 0, 458, 329, 0, 0, 459, 0, 0, 0, + 1298, 0, 0, 56, 24, 0, 25, 0, 460, 26, + 253, 461, 0, 462, 27, 61, 62, 0, 28, 0, + 0, 0, 0, 0, 64, 329, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 463, 0, 33, + 0, 71, 72, 34, 0, 586, 0, 0, 0, 0, + 0, 0, 587, 0, 0, 36, 0, 37, 74, 0, + 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, + 40, 254, 0, 41, 0, 0, 0, 0, 0, 0, + 588, 0, 0, 87, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 1299, 0, 0, 0, 0, 89, 90, + 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, + 95, 913, 0, 589, 0, 0, 97, 98, 99, 100, + 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, + 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, + 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, + 27, 61, 62, 0, 28, 0, 105, 106, 107, 108, + 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, + 0, 586, 0, 0, 0, 0, 0, 0, 587, 0, + 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, + 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, + 0, 0, 0, 0, 0, 0, 588, 0, 0, 87, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 91, 92, 93, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 589, + 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, + 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, + 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, + 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, + 28, 0, 105, 106, 107, 108, 64, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 71, 72, 34, 0, 586, 0, 0, + 0, 0, 0, 0, 587, 0, 0, 36, 0, 37, + 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, + 80, 39, 40, 254, 0, 41, 0, 0, 0, 0, + 0, 0, 588, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 38, 75, 0, 0, 39, 0, 0, - 77, 0, 79, 0, 81, 40, 41, 256, 0, 42, - 0, 0, 85, 0, 0, 0, 87, 0, 0, 88, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 302, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, - 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, - 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, - 0, 0, 0, 0, 0, 57, 25, 0, 26, 0, - 0, 27, 255, 0, 0, 0, 28, 62, 63, 0, - 29, 0, 106, 303, 108, 109, 65, 0, 0, 31, - 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 34, 0, 72, 73, 35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, - 75, 0, 0, 39, 0, 0, 77, 0, 79, 0, - 81, 40, 41, 256, 0, 42, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, + 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, + 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, + 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, + 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, + 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, + 0, 0, 27, 61, 62, 0, 28, 0, 105, 106, + 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, + 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, + 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, + 0, 41, 0, 0, 84, 0, 0, 0, 86, 0, + 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, + 300, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, + 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, + 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, + 62, 0, 28, 0, 105, 301, 107, 108, 64, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, + 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, + 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 302, 0, 0, 0, 0, 870, - 0, 0, 96, 0, 0, 0, 0, 0, 98, 99, - 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, - 0, 57, 25, 0, 26, 0, 0, 27, 255, 0, - 0, 0, 28, 62, 63, 0, 29, 0, 106, 303, - 108, 109, 65, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 33, 0, 0, 0, 0, 34, 0, 72, - 73, 35, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 38, 75, 0, 0, 39, - 0, 0, 77, 0, 79, 0, 81, 40, 41, 256, - 0, 42, 0, 0, 0, 0, 0, 0, 87, 0, - 0, 88, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 91, 92, 93, - 302, 0, 0, 0, 513, 0, 0, 0, 96, 0, - 0, 0, 0, 0, 98, 99, 100, 101, 0, 0, - 0, 102, 0, 103, 0, 0, 0, 0, 0, 104, - 105, 0, 0, 0, 0, 0, 0, 57, 25, 0, - 26, 0, 0, 27, 255, 0, 0, 0, 28, 62, - 63, 0, 29, 0, 106, 303, 108, 109, 65, 0, - 0, 31, 0, 0, 0, 0, 0, 0, 33, 0, - 0, 0, 0, 34, 0, 72, 73, 35, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, - 0, 38, 75, 0, 0, 39, 0, 0, 77, 0, - 79, 0, 81, 40, 41, 256, 0, 42, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 88, 89, 0, + 0, 0, 89, 90, 91, 92, 300, 0, 0, 0, + 0, 870, 0, 0, 95, 0, 0, 0, 0, 0, + 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, + 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, + 0, 0, 0, 56, 24, 0, 25, 0, 0, 26, + 253, 0, 0, 0, 27, 61, 62, 0, 28, 0, + 105, 301, 107, 108, 64, 0, 0, 30, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, + 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, + 0, 38, 0, 0, 76, 0, 78, 0, 80, 39, + 40, 254, 0, 41, 0, 0, 0, 0, 0, 0, + 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 89, 90, + 91, 92, 300, 0, 0, 0, 511, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, + 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, + 0, 103, 104, 0, 0, 0, 0, 0, 0, 56, + 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, + 27, 61, 62, 0, 28, 0, 105, 301, 107, 108, + 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 90, 91, 92, 93, 302, 0, 0, 0, - 507, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 98, 99, 100, 101, 0, 0, 0, 102, 0, 103, - 0, 0, 0, 0, 0, 104, 105, 0, 0, 0, - 0, 0, 0, 57, 25, 0, 26, 0, 0, 27, - 255, 0, 0, 0, 28, 62, 63, 0, 29, 0, - 106, 303, 108, 109, 65, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 33, 0, 0, 0, 0, 34, - 0, 72, 73, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 38, 75, 0, - 0, 39, 0, 0, 77, 0, 79, 0, 81, 40, - 41, 256, 0, 42, 0, 0, 0, 0, 0, 0, - 87, 0, 0, 88, 89, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 91, - 92, 93, 302, 0, 0, 0, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 98, 99, 100, 101, - 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 0, 0, 0, 0, 57, - 25, 0, 26, 0, 0, 27, 255, 0, 0, 0, - 28, 62, 63, 0, 29, 0, 106, 303, 108, 109, - 65, 0, 0, 31, 0, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 34, 0, 72, 73, 35, + 0, 36, 0, 37, 74, 0, 0, 38, 0, 0, + 76, 0, 78, 0, 80, 39, 40, 254, 0, 41, + 0, 0, 0, 0, 0, 0, 86, 0, 0, 87, + 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 91, 92, 300, 0, + 0, 0, 505, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 97, 98, 99, 100, 0, 0, 0, 101, + 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, + 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, + 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, + 28, 0, 105, 301, 107, 108, 64, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 71, 72, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, + 80, 39, 40, 254, 0, 41, 0, 0, 0, 0, + 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 38, 75, 0, 0, 39, 0, 0, - 77, 0, 79, 0, 81, 40, 41, 256, 0, 42, - 0, 0, 0, 0, 0, 0, 87, 0, 0, 88, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 90, 91, 92, 93, 94, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, - 0, 0, 98, 99, 100, 101, 0, 0, 0, 102, - 0, 103, 0, 0, 0, 0, 0, 104, 105, 0, - 0, 0, 0, 0, 0, 57, 25, 0, 26, 0, - 0, 27, 255, 0, 0, 0, 28, 62, 63, 0, - 29, 0, 106, 107, 108, 109, 65, 0, 0, 31, - 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, - 0, 34, 0, 72, 73, 35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 38, - 75, 0, 0, 39, 0, 0, 77, 0, 79, 0, - 81, 40, 41, 256, 0, 42, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 88, 89, 0, 0, 0, + 89, 90, 91, 92, 300, 0, 0, 0, 0, 0, + 0, 0, 95, 0, 0, 0, 0, 0, 97, 98, + 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, + 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, + 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, + 0, 0, 27, 61, 62, 0, 28, 0, 105, 301, + 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 33, 0, 71, + 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 36, 0, 37, 74, 0, 0, 38, + 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, + 0, 41, 0, 0, 0, 0, 0, 0, 86, 0, + 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 89, 90, 91, 92, + 93, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 97, 98, 99, 100, 0, 0, + 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, + 104, 0, 0, 0, 0, 0, 0, 56, 24, 0, + 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, + 62, 0, 28, 0, 105, 106, 107, 108, 64, 0, + 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 71, 72, 34, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 37, 74, 0, 0, 38, 0, 0, 76, 0, + 78, 0, 80, 39, 40, 254, 0, 41, 0, 0, + 0, 0, 0, 0, 86, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 90, 91, 92, 93, 94, 0, 0, 0, 0, 0, - 0, 0, 96, 0, 0, 0, 0, 0, 98, 99, - 100, 101, 0, 0, 0, 102, 0, 103, 0, 0, - 0, 0, 0, 104, 105, 0, 0, 0, 0, 0, - 0, 78, 78, 0, 78, 0, 0, 78, 78, 0, - 0, 0, 78, 78, 78, 0, 78, 0, 106, 1026, - 108, 109, 78, 0, 0, 78, 0, 0, 0, 0, - 0, 0, 78, 0, 0, 0, 0, 78, 0, 78, - 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 78, 0, 78, 78, 0, 0, 78, - 0, 0, 78, 0, 78, 0, 78, 78, 78, 78, - 0, 78, 0, 0, 0, 0, 0, 0, 78, 0, - 0, 78, 78, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, - 78, 0, 0, 0, 0, 0, 0, 0, 78, 0, - 0, 0, 0, 0, 78, 78, 78, 78, 0, 0, - 0, 78, 0, 78, 0, 0, 0, 0, 0, 78, - 78, 0, 0, 0, 0, 0, 0, 135, 135, 0, - 135, 0, 0, 135, 135, 0, 0, 0, 135, 135, - 135, 0, 135, 0, 78, 78, 78, 78, 135, 0, - 0, 135, 0, 0, 0, 0, 0, 0, 135, 0, - 0, 0, 0, 135, 0, 135, 135, 135, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 0, 135, 135, 0, 0, 135, 0, 0, 135, 0, - 135, 0, 135, 135, 135, 135, 0, 135, 0, 0, - 0, 0, 0, 0, 135, 0, 0, 135, 135, 0, + 0, 0, 89, 90, 91, 92, 93, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, + 97, 98, 99, 100, 0, 0, 0, 101, 0, 102, + 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, + 0, 0, 0, 76, 76, 0, 76, 0, 0, 76, + 76, 0, 0, 0, 76, 76, 76, 0, 76, 0, + 105, 1025, 107, 108, 76, 0, 0, 76, 0, 0, + 0, 0, 0, 0, 76, 0, 0, 0, 0, 76, + 0, 76, 76, 76, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 0, 76, 76, 0, + 0, 76, 0, 0, 76, 0, 76, 0, 76, 76, + 76, 76, 0, 76, 0, 0, 0, 0, 0, 0, + 76, 0, 0, 76, 76, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, + 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, + 76, 0, 0, 0, 0, 0, 76, 76, 76, 76, + 0, 0, 0, 76, 0, 76, 0, 0, 0, 0, + 0, 76, 76, 0, 0, 0, 0, 0, 0, 133, + 133, 0, 133, 0, 0, 133, 133, 0, 0, 0, + 133, 133, 133, 0, 133, 0, 76, 76, 76, 76, + 133, 0, 0, 133, 0, 0, 0, 0, 0, 0, + 133, 0, 0, 0, 0, 133, 0, 133, 133, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 135, 135, 135, 135, 135, 0, 0, 0, - 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, - 135, 135, 135, 135, 0, 0, 0, 135, 0, 135, - 0, 0, 0, 0, 0, 135, 135, 0, 0, 0, - 0, 0, 0, 57, 25, 0, 26, 0, 0, 27, - 255, 0, 0, 0, 28, 62, 63, 0, 29, 0, - 135, 135, 135, 135, 65, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 33, 0, 28, 0, 28, 34, - 0, 72, 73, 35, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 38, 75, 28, - 0, 39, 0, 0, 77, 0, 79, 0, 81, 40, - 41, 256, 28, 42, 0, 0, 0, 28, 0, 0, - 0, 0, 28, 0, 28, 28, 28, 28, 0, 0, - 0, 0, 28, 0, 0, 0, 28, 0, 90, 91, - 92, 257, 302, 0, 0, 0, 0, 0, 28, 0, - 96, 28, 0, 28, 0, 0, 98, 99, 100, 101, - 0, 0, 0, 102, 0, 103, 0, 0, 0, 0, - 0, 104, 105, 0, 0, 0, 0, 28, 0, 0, - 0, 0, 0, 28, 28, 0, 0, 0, 0, 0, - 0, 637, 0, 637, 0, 637, 106, 258, 637, 109, - 637, 637, 0, 637, 0, 637, 0, 637, 0, 637, - 637, 637, 0, 0, 0, 637, 637, 0, 0, 0, - 0, 637, 0, 637, 637, 0, 0, 0, 637, 0, - 0, 0, 637, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 637, 637, 0, 637, 0, 0, 0, - 637, 637, 0, 0, 0, 0, 0, 0, 637, 637, - 57, 25, 637, 26, 0, 637, 27, 255, 0, 0, - 637, 28, 62, 63, 0, 29, 0, 0, 0, 0, - 0, 65, 0, 0, 31, 0, 0, 0, 0, 0, - 0, 33, 637, 637, 0, 0, 34, 0, 72, 73, - 35, 0, 0, 0, 0, 637, 0, 0, 0, 0, - 0, 0, 37, 0, 38, 75, 0, 0, 39, 0, - 0, 77, 0, 79, 0, 81, 40, 41, 256, 0, - 42, 0, 0, 85, 0, 0, 0, 0, 0, 0, - 25, 0, 26, 0, 0, 27, 637, 0, 0, 0, - 28, 0, 0, 0, 29, 90, 91, 92, 257, 0, - 0, 0, 0, 31, 636, 0, 636, 96, 0, 636, - 33, 636, 636, 0, 636, 34, 636, 0, 636, 35, - 636, 636, 636, 0, 0, 0, 636, 636, 0, 0, - 0, 37, 636, 38, 636, 636, 0, 39, 0, 636, - 0, 0, 0, 636, 0, 40, 41, 0, 0, 42, - 0, 0, 321, 106, 258, 636, 0, 636, 0, 0, - 0, 636, 636, 0, 0, 0, 0, 0, 0, 636, - 636, 0, 636, 636, 636, 0, 636, 636, 292, 636, - 636, 636, 636, 0, 636, 0, 636, 0, 636, 636, - 636, 0, 0, 0, 636, 636, 0, 0, 0, 0, - 636, 0, 636, 636, 0, 0, 0, 636, 0, 0, - 0, 636, 0, 0, 0, 0, 636, 0, 0, 0, - 0, 0, 0, 636, 0, 636, 0, 0, 0, 636, - 636, 0, 0, 322, 0, 0, 0, 636, 636, 0, - 0, 636, 0, 0, 636, 0, 25, 0, 26, 636, - 0, 27, 0, 0, 1269, 0, 28, 636, 677, 0, - 29, 0, 678, 1270, 1271, 0, 0, 0, 1272, 31, - 0, 0, 0, 0, 1273, 0, 33, 0, 25, 0, - 26, 34, 0, 27, 0, 35, 1269, 0, 28, 0, - 677, 0, 29, 0, 678, 1270, 1271, 37, 0, 38, - 1272, 31, 0, 39, 0, 0, 1273, 0, 33, 0, - 0, 40, 41, 34, 0, 42, 0, 35, 1274, 0, - 0, 0, 48, 1275, 48, 636, 0, 48, 0, 37, - 0, 38, 48, 0, 0, 39, 48, 0, 0, 0, - 0, 0, 0, 40, 41, 48, 0, 42, 0, 0, - 1274, 0, 48, 0, 48, 1275, 48, 48, 1276, 48, - 0, 48, 0, 48, 48, 48, 0, 0, 48, 0, - 48, 0, 0, 48, 0, 48, 0, 48, 0, 48, - 0, 0, 48, 0, 48, 0, 0, 48, 48, 48, - 0, 48, 0, 48, 48, 48, 0, 48, 48, 1277, - 48, 0, 48, 48, 0, 48, 0, 48, 48, 0, - 0, 48, 48, 0, 48, 0, 0, 0, 0, 48, - 48, 48, 0, 48, 0, 0, 48, 0, 48, 153, - 25, 1277, 26, 48, 0, 27, 0, 48, 0, 48, - 28, 48, 0, 0, 29, 0, 48, 0, 0, 48, - 0, 48, 0, 31, 0, 48, 0, 0, 48, 153, - 33, 0, 0, 48, 48, 34, 0, 48, 0, 35, - 48, 565, 0, 0, 0, 48, 0, 0, 566, 0, - 0, 37, 0, 38, 0, 0, 0, 39, 0, 0, - 567, 0, 0, 0, 0, 40, 41, 0, 0, 42, - 0, 25, 568, 26, 0, 0, 27, 48, 0, 0, - 0, 28, 0, 0, 0, 29, 0, 0, 0, 30, - 485, 0, 485, 0, 31, 485, 0, 0, 0, 32, - 485, 33, 0, 0, 485, 0, 34, 0, 0, 0, - 35, 36, 0, 485, 0, 0, 0, 0, 0, 0, - 485, 48, 37, 0, 38, 485, 0, 0, 39, 485, - 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, - 42, 485, 0, 485, 173, 0, 173, 485, 0, 173, - 0, 0, 0, 569, 173, 485, 485, 0, 173, 485, - 0, 172, 485, 172, 0, 0, 172, 173, 0, 0, - 0, 172, 0, 0, 173, 172, 0, 0, 0, 173, - 0, 0, 0, 173, 172, 0, 0, 0, 0, 0, - 0, 172, 0, 0, 0, 173, 172, 173, 0, 0, - 172, 173, 0, 0, 0, 0, 0, 0, 0, 173, - 173, 0, 172, 173, 172, 182, 173, 182, 172, 0, - 182, 0, 0, 0, 43, 182, 172, 172, 0, 182, - 172, 0, 0, 172, 0, 0, 0, 0, 182, 0, - 0, 0, 0, 485, 0, 182, 0, 0, 0, 0, - 182, 0, 0, 35, 182, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 35, 0, 182, 0, 182, 35, - 0, 0, 182, 35, 0, 0, 35, 0, 0, 0, - 182, 182, 0, 0, 182, 0, 0, 182, 35, 35, - 0, 0, 0, 35, 35, 0, 0, 173, 0, 35, - 0, 35, 35, 35, 35, 0, 0, 0, 0, 35, - 0, 0, 0, 35, 172, 35, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 35, 0, 35, 35, 33, - 35, 0, 0, 0, 35, 0, 0, 0, 0, 0, - 33, 0, 0, 0, 0, 33, 0, 0, 0, 33, - 0, 0, 33, 0, 35, 0, 0, 0, 0, 0, - 35, 35, 0, 0, 33, 33, 0, 0, 182, 33, - 33, 0, 48, 0, 0, 33, 0, 33, 33, 33, - 33, 0, 0, 48, 0, 33, 0, 0, 48, 33, - 0, 33, 48, 0, 0, 48, 0, 0, 0, 0, - 0, 33, 0, 0, 33, 0, 33, 48, 48, 0, - 33, 0, 48, 48, 0, 48, 0, 0, 48, 0, - 48, 48, 48, 48, 0, 0, 48, 0, 48, 0, - 33, 48, 48, 0, 48, 48, 33, 33, 48, 0, - 0, 0, 0, 0, 48, 0, 0, 48, 0, 48, - 48, 48, 0, 48, 0, 48, 48, 48, 0, 0, - 0, 48, 0, 48, 48, 48, 48, 0, 0, 0, - 0, 48, 0, 48, 0, 48, 0, 48, 0, 37, - 48, 0, 0, 0, 0, 0, 0, 48, 0, 0, - 48, 0, 48, 48, 0, 48, 48, 48, 48, 0, - 0, 0, 0, 48, 0, 48, 48, 48, 48, 0, - 0, 48, 0, 48, 0, 0, 48, 48, 48, 0, - 0, 0, 38, 0, 0, 0, 0, 0, 0, 48, - 0, 48, 48, 48, 48, 0, 48, 0, 0, 0, - 0, 48, 0, 48, 48, 48, 48, 0, 0, 0, - 0, 48, 0, 0, 0, 48, 48, 0, 48, 0, - 0, 0, 0, 450, 296, 0, 0, 48, 0, 48, - 48, 0, 48, 0, 48, 0, 0, 0, 0, 48, - 0, 48, 48, 48, 48, 0, 451, 0, 0, 48, - 0, 0, 0, 48, 0, 0, 48, 0, 0, 452, - 0, 0, 297, 453, 454, 48, 450, 0, 48, 455, - 48, 456, 457, 458, 459, 0, 0, 0, 0, 460, - 0, 0, 0, 461, 0, 0, 0, 0, 0, 451, - 0, 0, 0, 0, 48, 462, 48, 48, 463, 0, - 464, 0, 452, 0, 0, 0, 0, 454, 0, 0, - 0, 0, 455, 0, 456, 457, 458, 459, 0, 0, - 0, 0, 460, 0, 465, 0, 461, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 462, 0, - 0, 463, 0, 464, 0, 0, 0, 0, 0, 0, + 0, 133, 0, 133, 133, 0, 0, 133, 0, 0, + 133, 0, 133, 0, 133, 133, 133, 133, 0, 133, + 0, 0, 0, 0, 0, 0, 133, 0, 0, 133, + 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 133, 133, 133, 133, 133, 0, + 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, + 0, 0, 133, 133, 133, 133, 0, 0, 0, 133, + 0, 133, 0, 0, 0, 0, 0, 133, 133, 0, + 0, 0, 0, 0, 0, 56, 24, 0, 25, 0, + 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, + 28, 0, 133, 133, 133, 133, 64, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 27, 0, + 27, 33, 0, 71, 72, 34, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, + 74, 27, 0, 38, 0, 0, 76, 0, 78, 0, + 80, 39, 40, 254, 27, 41, 0, 0, 0, 27, + 0, 0, 0, 0, 27, 0, 27, 27, 27, 27, + 0, 0, 0, 0, 27, 0, 0, 0, 27, 0, + 89, 90, 91, 255, 300, 0, 0, 0, 0, 0, + 27, 0, 95, 27, 0, 27, 0, 0, 97, 98, + 99, 100, 0, 0, 0, 101, 0, 102, 0, 0, + 0, 0, 0, 103, 104, 0, 0, 0, 0, 27, + 0, 0, 0, 0, 0, 27, 27, 0, 0, 0, + 0, 0, 0, 635, 0, 635, 0, 635, 105, 256, + 635, 108, 635, 635, 0, 635, 0, 635, 0, 635, + 0, 635, 635, 635, 0, 0, 0, 635, 635, 0, + 0, 0, 0, 635, 0, 635, 635, 0, 0, 0, + 635, 0, 0, 0, 635, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 635, 635, 0, 635, 0, + 0, 0, 635, 635, 0, 0, 0, 0, 0, 0, + 635, 635, 56, 24, 635, 25, 0, 635, 26, 253, + 0, 0, 635, 27, 61, 62, 0, 28, 0, 0, + 0, 0, 0, 64, 0, 0, 30, 0, 0, 0, + 0, 0, 0, 32, 635, 635, 0, 0, 33, 0, + 71, 72, 34, 0, 0, 0, 0, 635, 0, 0, + 0, 0, 0, 0, 36, 0, 37, 74, 0, 0, + 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, + 254, 0, 41, 0, 0, 84, 0, 0, 0, 0, + 0, 0, 24, 0, 25, 0, 0, 26, 635, 1208, + 0, 0, 27, 0, 0, 0, 28, 89, 90, 91, + 255, 0, 0, 0, 0, 30, 634, 0, 634, 95, + 0, 634, 32, 634, 634, 0, 634, 33, 634, 1209, + 634, 34, 634, 634, 634, 0, 0, 0, 634, 634, + 0, 0, 0, 36, 634, 37, 634, 634, 0, 38, + 1210, 634, 0, 0, 0, 634, 0, 39, 40, 0, + 0, 41, 0, 0, 319, 105, 256, 634, 0, 634, + 0, 0, 0, 634, 634, 0, 0, 0, 0, 0, + 0, 634, 634, 0, 634, 634, 634, 0, 634, 634, + 0, 634, 634, 634, 634, 0, 634, 0, 634, 0, + 634, 634, 634, 0, 0, 0, 634, 634, 0, 0, + 0, 0, 634, 0, 634, 634, 0, 0, 0, 634, + 0, 0, 0, 634, 0, 0, 0, 0, 634, 0, + 0, 0, 0, 0, 0, 634, 0, 634, 0, 0, + 0, 634, 634, 0, 0, 352, 0, 0, 0, 634, + 634, 0, 0, 634, 0, 0, 634, 0, 24, 0, + 25, 634, 0, 26, 0, 0, 1268, 0, 27, 634, + 675, 0, 28, 0, 676, 1269, 1270, 0, 0, 0, + 1271, 30, 0, 0, 0, 0, 1272, 0, 32, 0, + 24, 0, 25, 33, 0, 26, 0, 34, 1268, 0, + 27, 0, 675, 0, 28, 0, 676, 1269, 1270, 36, + 0, 37, 1271, 30, 0, 38, 0, 0, 1272, 0, + 32, 0, 0, 39, 40, 33, 0, 41, 0, 34, + 1273, 0, 0, 0, 46, 1274, 46, 634, 0, 46, + 0, 36, 0, 37, 46, 0, 0, 38, 46, 0, + 0, 0, 0, 0, 0, 39, 40, 46, 0, 41, + 0, 0, 1273, 0, 46, 0, 46, 1274, 46, 46, + 1275, 46, 0, 46, 0, 46, 46, 46, 0, 0, + 46, 0, 46, 0, 0, 46, 0, 46, 0, 46, + 0, 46, 0, 0, 46, 0, 46, 0, 0, 46, + 46, 46, 0, 46, 0, 46, 46, 46, 0, 46, + 46, 1276, 46, 0, 46, 46, 0, 46, 0, 46, + 46, 0, 0, 46, 46, 0, 46, 0, 0, 0, + 0, 46, 46, 46, 0, 46, 0, 0, 46, 0, + 46, 151, 24, 1276, 25, 46, 0, 26, 0, 46, + 0, 46, 27, 46, 0, 0, 28, 0, 46, 0, + 0, 46, 0, 46, 0, 30, 0, 46, 0, 0, + 46, 151, 32, 0, 0, 46, 46, 33, 0, 46, + 0, 34, 46, 563, 0, 0, 0, 46, 0, 0, + 564, 0, 0, 36, 0, 37, 0, 0, 0, 38, + 0, 0, 565, 0, 0, 0, 0, 39, 40, 0, + 0, 41, 0, 24, 566, 25, 0, 0, 26, 46, + 0, 0, 0, 27, 0, 0, 0, 28, 0, 0, + 0, 29, 24, 0, 25, 0, 30, 26, 0, 0, + 0, 31, 27, 32, 0, 0, 28, 0, 33, 0, + 0, 0, 34, 35, 0, 30, 0, 0, 0, 0, + 0, 0, 32, 46, 36, 0, 37, 33, 0, 0, + 38, 34, 0, 0, 0, 0, 0, 0, 39, 40, + 0, 0, 41, 36, 0, 37, 483, 0, 483, 38, + 0, 483, 0, 0, 0, 567, 483, 39, 40, 0, + 483, 41, 0, 171, 319, 171, 0, 0, 171, 483, + 0, 0, 0, 171, 0, 0, 483, 171, 0, 0, + 0, 483, 0, 0, 0, 483, 171, 0, 0, 0, + 290, 0, 0, 171, 0, 0, 0, 483, 171, 483, + 0, 0, 171, 483, 0, 0, 0, 0, 0, 0, + 0, 483, 483, 0, 171, 483, 171, 170, 483, 170, + 171, 0, 170, 0, 0, 0, 42, 170, 171, 171, + 0, 170, 171, 0, 0, 171, 0, 0, 0, 0, + 170, 180, 0, 180, 0, 320, 180, 170, 0, 0, + 0, 180, 170, 0, 0, 180, 170, 0, 0, 0, + 0, 0, 0, 0, 180, 0, 0, 0, 170, 0, + 170, 180, 0, 0, 170, 0, 180, 0, 0, 0, + 180, 0, 170, 170, 0, 33, 170, 0, 0, 170, + 0, 0, 180, 0, 180, 0, 33, 0, 180, 483, + 0, 33, 0, 0, 0, 33, 180, 180, 33, 0, + 180, 0, 0, 180, 0, 0, 171, 0, 0, 0, + 33, 33, 0, 0, 0, 33, 33, 0, 31, 0, + 0, 33, 0, 33, 33, 33, 33, 0, 0, 31, + 0, 33, 0, 0, 31, 33, 0, 33, 31, 0, + 0, 31, 0, 0, 0, 0, 0, 33, 0, 33, + 33, 0, 33, 31, 31, 0, 33, 0, 31, 31, + 170, 0, 0, 0, 31, 0, 31, 31, 31, 31, + 0, 0, 0, 0, 31, 0, 33, 0, 31, 0, + 31, 46, 33, 33, 180, 0, 0, 0, 0, 0, + 31, 0, 46, 31, 0, 31, 0, 46, 0, 31, + 0, 46, 0, 0, 46, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 46, 0, 31, + 0, 46, 46, 0, 46, 31, 31, 46, 0, 46, + 46, 46, 46, 0, 0, 46, 0, 46, 0, 0, + 46, 46, 0, 46, 46, 0, 0, 46, 0, 0, + 0, 0, 0, 46, 0, 0, 46, 0, 46, 46, + 46, 0, 46, 0, 46, 46, 46, 0, 0, 0, + 46, 0, 46, 46, 46, 46, 0, 0, 0, 0, + 46, 0, 46, 0, 46, 0, 46, 0, 35, 46, + 0, 0, 0, 0, 0, 0, 46, 0, 0, 46, + 0, 46, 46, 0, 46, 46, 0, 46, 0, 0, + 0, 0, 46, 0, 46, 46, 46, 46, 0, 0, + 0, 0, 46, 0, 0, 46, 46, 46, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, 46, 0, + 46, 46, 46, 46, 0, 46, 0, 0, 0, 0, + 46, 0, 46, 46, 46, 46, 0, 0, 0, 0, + 46, 0, 0, 0, 46, 46, 0, 46, 0, 46, + 46, 0, 0, 192, 0, 0, 46, 0, 46, 46, + 46, 46, 46, 46, 0, 0, 0, 0, 46, 0, + 46, 46, 46, 46, 0, 0, 46, 0, 46, 0, + 0, 0, 46, 46, 0, 46, 0, 46, 46, 0, + 0, 194, 0, 0, 46, 0, 46, 46, 46, 46, + 0, 46, 0, 0, 0, 0, 46, 0, 46, 46, + 46, 46, 0, 0, 0, 0, 46, 0, 0, 0, + 46, 46, 0, 46, 0, 0, 0, 0, 46, 294, + 46, 0, 46, 0, 46, 46, 0, 46, 0, 46, + 0, 0, 0, 0, 46, 0, 46, 46, 46, 46, + 0, 46, 0, 0, 46, 0, 0, 0, 46, 0, + 0, 46, 0, 0, 46, 0, 0, 295, 448, 46, + 46, 0, 0, 46, 46, 46, 46, 46, 46, 46, + 0, 0, 46, 0, 46, 0, 0, 0, 46, 0, + 0, 449, 0, 0, 0, 0, 0, 0, 448, 46, + 46, 46, 46, 46, 450, 46, 0, 0, 451, 452, + 0, 0, 0, 0, 453, 0, 454, 455, 456, 457, + 0, 449, 0, 0, 458, 0, 0, 0, 459, 46, + 0, 0, 0, 0, 450, 0, 0, 0, 0, 452, + 460, 0, 0, 461, 453, 462, 454, 455, 456, 457, + 0, 0, 0, 0, 458, 0, 0, 0, 459, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, + 460, 0, 0, 461, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 465, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 463, }; protected static readonly short [] yyCheck = { 17, - 17, 300, 192, 17, 4, 511, 69, 20, 18, 52, - 301, 17, 513, 190, 249, 6, 20, 189, 290, 467, - 320, 85, 338, 234, 554, 88, 89, 17, 48, 60, - 93, 299, 158, 487, 331, 297, 919, 768, 60, 1095, - 713, 714, 571, 738, 236, 59, 1130, 1131, 78, 579, - 114, 0, 116, 256, 256, 1216, 74, 256, 268, 327, - 78, 114, 256, 116, 325, 268, 80, 256, 82, 256, - 60, 1232, 256, 325, 64, 88, 89, 353, 96, 924, - 60, 256, 17, 756, 17, 758, 256, 256, 256, 256, - 256, 256, 294, 1177, 294, 268, 109, 256, 282, 256, - 363, 256, 256, 335, 268, 343, 306, 367, 372, 376, - 173, 371, 276, 353, 94, 256, 372, 17, 98, 99, - 100, 101, 102, 103, 104, 105, 391, 656, 256, 256, - 314, 277, 322, 368, 370, 281, 256, 256, 374, 257, - 158, 158, 410, 256, 158, 372, 368, 190, 17, 414, - 269, 17, 158, 391, 256, 418, 343, 418, 0, 17, - 420, 363, 429, 17, 354, 429, 418, 286, 158, 359, - 339, 256, 17, 429, 294, 344, 414, 346, 17, 17, - 339, 256, 381, 352, 353, 344, 249, 346, 201, 202, - 428, 234, 17, 352, 353, 368, 342, 429, 261, 363, - 341, 256, 429, 368, 391, 225, 1051, 429, 894, 374, - 507, 510, 422, 381, 715, 372, 418, 0, 418, 422, - 431, 375, 1090, 158, 418, 158, 381, 414, 369, 418, - 1391, 249, 88, 89, 418, 363, 254, 339, 554, 230, - 432, 428, 370, 418, 372, 372, 374, 437, 418, 422, - 263, 418, 418, 109, 418, 319, 287, 1418, 158, 323, - 429, 374, 325, 579, 328, 287, 297, 330, 256, 1430, - 429, 1432, 290, 549, 256, 328, 289, 295, 296, 1010, - 277, 471, 367, 256, 369, 358, 371, 527, 301, 158, - 418, 309, 158, 368, 316, 308, 314, 287, 316, 374, - 158, 315, 320, 358, 158, 368, 369, 287, 257, 549, - 983, 262, 368, 158, 332, 333, 1002, 297, 1004, 158, - 158, 338, 302, 852, 263, 1176, 316, 357, 256, 1385, - 1025, 571, 338, 158, 256, 420, 256, 350, 423, 357, - 353, 1200, 1073, 372, 1195, 201, 202, 298, 338, 256, - 368, 369, 415, 416, 417, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 363, 1451, 256, 424, - 425, 426, 427, 429, 387, 388, 315, 256, 367, 569, - 369, 657, 370, 884, 1243, 367, 374, 405, 431, 1272, - 263, 581, 372, 583, 376, 585, 1480, 370, 441, 699, - 429, 374, 415, 416, 384, 385, 386, 263, 862, 389, - 390, 294, 256, 394, 395, 257, 656, 264, 438, 439, - 433, 418, 419, 486, 444, 488, 368, 378, 379, 433, - 272, 1104, 1283, 289, 447, 277, 1287, 677, 1111, 281, - 335, 369, 315, 447, 266, 349, 350, 369, 511, 369, - 685, 339, 308, 372, 296, 717, 1324, 266, 648, 368, - 339, 1312, 369, 1136, 527, 487, 368, 481, 531, 349, - 350, 349, 350, 256, 357, 976, 418, 667, 325, 367, - 363, 323, 368, 368, 1352, 1353, 369, 1355, 367, 372, - 373, 509, 314, 511, 350, 513, 340, 487, 1366, 418, - 342, 1369, 363, 386, 374, 314, 782, 570, 369, 523, - 524, 256, 369, 257, 527, 372, 1384, 272, 256, 537, - 429, 272, 277, 527, 542, 429, 281, 429, 363, 1202, - 363, 387, 388, 376, 369, 418, 549, 554, 421, 305, - 1408, 296, 782, 429, 429, 296, 416, 561, 554, 429, - 849, 429, 372, 375, 374, 272, 339, 418, 571, 415, - 416, 372, 579, 374, 554, 363, 375, 802, 323, 363, - 588, 589, 323, 579, 637, 851, 639, 368, 343, 296, - 877, 1420, 1421, 418, 367, 418, 429, 342, 371, 579, - 373, 374, 375, 376, 339, 272, 576, 418, 381, 344, - 726, 346, 371, 374, 1200, 305, 323, 352, 353, 429, - 1140, 369, 852, 881, 341, 373, 381, 635, 429, 296, - 418, 343, 685, 641, 418, 256, 391, 418, 919, 367, - 1200, 369, 1200, 371, 372, 369, 374, 1476, 376, 702, - 256, 269, 369, 656, 21, 416, 323, 1243, 62, 414, - 418, 420, 66, 67, 68, 1200, 70, 71, 286, 381, - 428, 75, 76, 428, 677, 423, 376, 685, 82, 391, - 84, 261, 86, 1243, 305, 1243, 53, 91, 92, 979, - 418, 699, 420, 1137, 748, 423, 717, 678, 751, 305, - 376, 709, 414, 992, 284, 1200, 357, 715, 1243, 357, - 381, 115, 720, 893, 339, 376, 428, 297, 1200, 944, - 391, 369, 302, 1200, 372, 373, 381, 307, 781, 309, - 310, 311, 312, 713, 714, 386, 391, 317, 386, 742, - 744, 321, 367, 414, 797, 977, 386, 717, 1243, 802, - 367, 376, 760, 333, 762, 371, 336, 428, 338, 414, - 763, 1243, 766, 372, 768, 818, 1243, 391, 373, 777, - 371, 376, 414, 421, 1006, 778, 756, 414, 758, 782, - 389, 390, 362, 1290, 364, 365, 428, 357, 368, 797, - 414, 428, 367, 826, 802, 803, 1303, 805, 418, 1061, - 339, 376, 1108, 373, 428, 344, 1095, 346, 816, 817, - 349, 350, 339, 352, 353, 1322, 386, 344, 401, 346, - 294, 1001, 349, 350, 370, 352, 353, 6, 374, 379, - 413, 834, 306, 369, 1140, 888, 1098, 890, 17, 847, - 834, 849, 367, 896, 370, 381, 357, 374, 374, 852, - 853, 376, 256, 382, 383, 259, 389, 865, 839, 1199, - 1200, 1023, 373, 1088, 872, 1303, 1172, 396, 397, 922, - 398, 399, 1134, 339, 882, 386, 884, 357, 344, 1219, - 346, 60, 1373, 349, 350, 64, 352, 353, 418, 872, - 429, 944, 306, 373, 308, 299, 742, 306, 428, 313, - 883, 384, 429, 1243, 313, 1245, 386, 960, 312, 88, - 89, 325, 385, 371, 339, 373, 919, 763, 926, 344, - 928, 346, 930, 373, 349, 350, 376, 352, 353, 371, - 109, 373, 778, 306, 392, 393, 944, 368, 941, 371, - 313, 373, 390, 374, 1435, 1207, 949, 941, 1149, 374, - 381, 367, 325, 400, 412, 367, 373, 367, 1125, 372, - 376, 374, 420, 429, 376, 423, 376, 369, 976, 261, - 951, 979, 953, 367, 955, 367, 339, 354, 355, 158, - 1471, 344, 376, 346, 376, 376, 349, 350, 339, 352, - 353, 1272, 284, 344, 372, 346, 374, 1493, 1494, 418, - 0, 352, 353, 983, 429, 297, 1010, 853, 415, 1017, - 302, 1019, 372, 1021, 374, 307, 376, 309, 310, 311, - 312, 357, 201, 202, 1254, 317, 372, 363, 374, 321, - 376, 1261, 374, 369, 376, 1088, 372, 373, 374, 381, - 371, 333, 1032, 370, 336, 367, 338, 374, 418, 371, - 386, 373, 374, 1061, 376, 354, 355, 370, 371, 381, - 373, 374, 375, 386, 387, 388, 429, 1075, 1076, 1073, - 362, 256, 364, 365, 418, 1083, 368, 370, 371, 483, - 1088, 374, 418, 374, 263, 376, 370, 1095, 372, 1089, - 1098, 370, 1125, 415, 1127, 374, 1385, 1277, 370, 376, - 372, 1108, 374, 949, 374, 277, 376, 1115, 287, 370, - 289, 372, 1108, 374, 1122, 370, 1149, 372, 376, 523, - 1300, 370, 301, 372, 1104, 1128, 1134, 373, 1108, 308, - 370, 1111, 372, 1140, 1314, 367, 367, 316, 1146, 1147, - 371, 376, 373, 374, 1140, 376, 376, 1180, 367, 372, - 381, 1331, 371, 1333, 373, 374, 1136, 376, 294, 338, - 1140, 372, 381, 374, 294, 1172, 1199, 1200, 372, 376, - 374, 350, 343, 370, 353, 372, 1172, 370, 1181, 372, - 374, 1189, 376, 374, 415, 376, 1219, 393, 394, 395, - 396, 374, 1172, 376, 1247, 1198, 374, 1205, 376, 1207, - 414, 415, 364, 365, 349, 350, 372, 373, 387, 388, - 1243, 414, 1245, 364, 365, 369, 1093, 1094, 391, 392, - 418, 94, 1202, 397, 398, 98, 99, 100, 101, 102, - 103, 104, 105, 375, 418, 372, 415, 416, 418, 368, - 372, 376, 371, 368, 373, 374, 372, 374, 372, 372, - 1253, 1254, 372, 1257, 372, 372, 294, 257, 1261, 294, - 374, 261, 372, 392, 393, 372, 1269, 1270, 374, 1272, - 372, 376, 272, 371, 256, 1278, 375, 277, 374, 294, - 294, 281, 356, 412, 284, 372, 381, 1290, 374, 1292, - 375, 420, 1295, 0, 423, 374, 296, 297, 373, 418, - 1303, 301, 302, 381, 1308, 372, 374, 307, 487, 309, - 310, 311, 312, 374, 374, 374, 429, 317, 256, 1322, - 376, 321, 423, 323, 372, 374, 367, 421, 372, 372, - 1363, 373, 343, 333, 368, 335, 336, 371, 338, 373, - 374, 374, 342, 294, 294, 374, 418, 1380, 527, 370, - 367, 371, 1198, 418, 381, 256, 375, 256, 392, 393, - 1393, 1394, 362, 256, 374, 1373, 256, 1371, 368, 369, - 549, 372, 280, 256, 367, 554, 368, 1385, 412, 343, - 376, 372, 370, 423, 371, 374, 420, 1420, 1421, 423, - 376, 374, 571, 372, 1402, 376, 370, 372, 347, 372, - 579, 339, 367, 381, 351, 381, 344, 1253, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 381, - 256, 256, 376, 1269, 1270, 368, 372, 1435, 347, 302, - 368, 370, 370, 374, 372, 375, 374, 375, 376, 0, - 1493, 1494, 370, 1476, 375, 367, 1292, 370, 372, 1295, - 348, 368, 390, 374, 374, 418, 372, 418, 331, 339, - 348, 376, 368, 1471, 375, 368, 376, 367, 381, 356, - 367, 367, 337, 1477, 1478, 305, 371, 656, 372, 381, - 1484, 1485, 374, 368, 368, 1493, 1494, 368, 418, 418, - 369, 429, 418, 371, 371, 367, 371, 371, 677, 372, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 376, 384, 385, 386, 418, 371, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 418, 381, 713, 714, 373, 371, 367, 371, - 381, 369, 373, 265, 371, 267, 372, 372, 270, 256, - 272, 374, 373, 275, 374, 262, 374, 279, 256, 374, - 418, 372, 376, 742, 372, 370, 288, 418, 418, 376, - 376, 372, 418, 295, 376, 372, 367, 756, 300, 758, - 302, 381, 304, 372, 763, 368, 381, 294, 370, 368, - 315, 298, 372, 263, 316, 371, 318, 371, 368, 778, - 322, 323, 0, 782, 372, 372, 0, 367, 330, 331, - 376, 376, 334, 368, 372, 337, 0, 0, 368, 376, - 372, 372, 418, 370, 367, 370, 368, 376, 368, 367, - 376, 372, 339, 418, 507, 368, 372, 344, 372, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 368, 376, 376, 418, 376, 363, 376, 372, 368, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 367, 378, 379, 852, 853, 382, 383, 384, 385, 386, - 372, 368, 389, 390, 372, 368, 376, 394, 395, 396, - 397, 398, 399, 400, 401, 256, 418, 373, 367, 376, - 261, 262, 376, 576, 376, 376, 413, 315, 376, 416, - 376, 418, 376, 420, 376, 263, 423, 51, 12, 52, - 5, 941, 429, 284, 1088, 834, 1088, 1245, 1219, 1425, - 1388, 1441, 677, 294, 1278, 1376, 297, 298, 1371, 1405, - 919, 302, 1290, 855, 305, 1485, 307, 855, 309, 310, - 311, 312, 855, 1243, 691, 1309, 317, 1479, 851, 1231, - 321, 1393, 1398, 1394, 325, 1478, 1333, 720, 1278, 1180, - 949, 826, 333, 527, 797, 336, 1181, 338, 339, 589, - 877, 368, 992, 344, 802, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 685, 72, 334, 717, - 399, 362, 363, 256, 983, 400, 367, 368, 401, 370, - 371, 372, 373, 374, 375, 376, 402, 378, 379, 403, + 298, 17, 51, 17, 4, 68, 509, 20, 18, 299, + 511, 17, 189, 20, 232, 465, 188, 288, 351, 84, + 552, 6, 157, 247, 87, 88, 336, 485, 59, 92, + 329, 318, 351, 297, 295, 919, 1094, 59, 769, 47, + 736, 569, 234, 256, 58, 577, 268, 256, 113, 77, + 115, 710, 256, 712, 0, 73, 256, 1129, 1130, 77, + 256, 325, 256, 256, 17, 79, 113, 81, 115, 256, + 256, 1215, 256, 256, 87, 88, 924, 95, 256, 268, + 256, 256, 256, 256, 325, 268, 17, 1231, 256, 282, + 17, 256, 256, 256, 363, 108, 256, 756, 371, 335, + 759, 17, 256, 368, 1176, 872, 21, 0, 391, 172, + 349, 350, 268, 294, 418, 372, 883, 17, 368, 17, + 276, 314, 418, 372, 428, 306, 654, 373, 17, 17, + 376, 414, 17, 256, 343, 373, 376, 52, 376, 157, + 189, 157, 366, 157, 408, 339, 368, 420, 17, 418, + 344, 157, 346, 256, 358, 339, 369, 17, 352, 353, + 344, 17, 346, 256, 429, 340, 256, 256, 352, 353, + 59, 367, 429, 369, 63, 371, 363, 418, 256, 429, + 429, 381, 391, 232, 247, 339, 199, 200, 256, 429, + 429, 277, 525, 429, 256, 368, 259, 87, 88, 375, + 422, 374, 1050, 381, 157, 414, 505, 363, 1089, 257, + 508, 429, 713, 256, 547, 223, 191, 381, 108, 428, + 424, 425, 426, 427, 420, 418, 157, 423, 547, 247, + 157, 418, 418, 422, 252, 429, 569, 418, 430, 422, + 363, 157, 552, 228, 418, 429, 1390, 370, 261, 372, + 418, 374, 317, 418, 285, 418, 321, 157, 418, 157, + 323, 326, 418, 285, 295, 328, 369, 577, 157, 157, + 288, 0, 157, 1417, 287, 293, 294, 363, 1009, 326, + 370, 374, 262, 372, 374, 1429, 299, 1431, 157, 307, + 256, 369, 314, 306, 312, 418, 314, 157, 256, 313, + 318, 157, 370, 366, 367, 367, 374, 256, 256, 199, + 200, 257, 330, 331, 376, 256, 325, 256, 298, 256, + 336, 654, 358, 982, 256, 853, 1384, 355, 1024, 372, + 336, 368, 418, 419, 256, 348, 655, 355, 351, 369, + 335, 1072, 675, 373, 257, 320, 266, 266, 366, 367, + 413, 414, 415, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 257, 264, 368, 1175, 349, 350, + 894, 261, 385, 386, 371, 368, 372, 352, 1450, 272, + 429, 418, 357, 884, 277, 403, 1194, 1271, 281, 263, + 439, 339, 341, 423, 314, 314, 285, 287, 378, 379, + 413, 414, 368, 296, 6, 863, 368, 1479, 374, 418, + 697, 368, 372, 363, 372, 17, 306, 339, 431, 367, + 369, 484, 418, 486, 431, 314, 325, 429, 436, 437, + 323, 372, 445, 372, 442, 372, 429, 369, 445, 277, + 343, 315, 1323, 281, 1103, 367, 509, 336, 429, 342, + 783, 1110, 349, 350, 715, 375, 375, 59, 348, 683, + 435, 63, 525, 485, 783, 479, 529, 429, 418, 429, + 1351, 1352, 429, 1354, 1282, 976, 1135, 1001, 1286, 1003, + 256, 368, 305, 256, 1365, 87, 88, 1368, 391, 507, + 376, 509, 372, 511, 469, 385, 386, 256, 1199, 343, + 382, 383, 1383, 1311, 342, 568, 108, 521, 522, 1419, + 1420, 414, 525, 256, 396, 397, 373, 535, 525, 376, + 853, 294, 540, 413, 414, 428, 1407, 256, 363, 305, + 272, 418, 429, 852, 547, 277, 552, 381, 343, 281, + 374, 1242, 1201, 429, 363, 559, 552, 391, 372, 429, + 374, 263, 850, 339, 296, 157, 569, 372, 344, 374, + 346, 577, 305, 349, 350, 1475, 352, 353, 586, 587, + 414, 577, 635, 367, 637, 305, 381, 371, 877, 803, + 339, 323, 416, 418, 428, 344, 391, 346, 374, 724, + 256, 369, 567, 352, 353, 363, 485, 199, 200, 418, + 342, 369, 376, 315, 579, 429, 581, 1139, 583, 414, + 339, 1199, 363, 1199, 429, 633, 374, 881, 369, 357, + 683, 639, 376, 428, 357, 363, 420, 1199, 376, 919, + 1199, 369, 339, 1199, 372, 373, 374, 700, 367, 357, + 373, 654, 371, 429, 373, 374, 375, 376, 386, 341, + 418, 272, 381, 386, 1242, 1199, 1242, 269, 416, 261, + 367, 977, 675, 552, 1199, 683, 367, 418, 386, 376, + 1242, 646, 272, 1242, 286, 296, 1242, 369, 1136, 697, + 418, 386, 747, 285, 715, 287, 371, 750, 577, 1005, + 665, 676, 979, 991, 418, 713, 296, 299, 1242, 381, + 718, 367, 323, 369, 306, 371, 372, 1242, 374, 391, + 376, 339, 314, 272, 379, 357, 344, 384, 346, 782, + 944, 349, 350, 323, 352, 353, 381, 369, 741, 743, + 372, 373, 414, 414, 336, 798, 391, 296, 401, 369, + 803, 306, 372, 761, 386, 763, 348, 428, 313, 351, + 413, 764, 418, 767, 420, 769, 819, 423, 339, 414, + 778, 1198, 1199, 344, 323, 346, 779, 391, 349, 350, + 783, 352, 353, 428, 1289, 306, 389, 308, 827, 421, + 798, 1218, 313, 385, 386, 803, 804, 1302, 806, 1060, + 414, 306, 385, 374, 325, 414, 1094, 1107, 313, 817, + 818, 429, 294, 400, 428, 1242, 1321, 1244, 390, 428, + 325, 413, 414, 294, 306, 357, 371, 370, 373, 369, + 357, 710, 835, 712, 418, 888, 1097, 890, 835, 1139, + 848, 373, 850, 896, 387, 388, 373, 392, 393, 371, + 853, 854, 415, 256, 386, 256, 369, 865, 429, 386, + 1022, 741, 1302, 277, 872, 840, 269, 412, 381, 922, + 367, 1171, 1133, 1087, 882, 420, 884, 756, 423, 376, + 759, 1372, 339, 286, 764, 418, 357, 344, 367, 346, + 418, 944, 363, 485, 418, 352, 353, 376, 369, 779, + 368, 372, 373, 376, 428, 367, 374, 960, 371, 371, + 373, 373, 374, 381, 376, 386, 919, 367, 926, 381, + 928, 371, 930, 373, 374, 367, 376, 371, 893, 373, + 1253, 381, 367, 525, 376, 376, 944, 1260, 941, 367, + 1148, 376, 367, 1434, 941, 1206, 949, 418, 376, 367, + 421, 376, 374, 415, 376, 547, 339, 1124, 376, 381, + 552, 344, 367, 346, 369, 415, 349, 350, 976, 352, + 353, 979, 367, 372, 854, 374, 951, 569, 953, 1470, + 955, 372, 339, 374, 59, 577, 372, 344, 374, 346, + 376, 1271, 349, 350, 370, 352, 353, 367, 374, 1492, + 1493, 371, 373, 373, 374, 1009, 376, 376, 1016, 370, + 1018, 381, 1020, 374, 394, 395, 370, 371, 93, 373, + 374, 375, 97, 98, 99, 100, 101, 102, 103, 104, + 398, 399, 370, 371, 1087, 1000, 374, 374, 372, 376, + 374, 1031, 376, 370, 370, 372, 429, 374, 374, 294, + 370, 370, 1060, 368, 374, 374, 371, 294, 373, 374, + 376, 370, 654, 372, 372, 374, 1074, 1075, 1072, 949, + 343, 370, 429, 372, 1082, 354, 355, 392, 393, 1087, + 386, 387, 388, 675, 414, 1124, 1094, 1126, 1088, 1097, + 391, 392, 393, 394, 364, 365, 1384, 412, 374, 376, + 376, 1107, 370, 982, 372, 420, 1114, 418, 423, 1148, + 370, 1107, 372, 1121, 370, 372, 372, 374, 710, 372, + 712, 374, 414, 415, 1127, 1133, 368, 418, 374, 371, + 376, 373, 374, 1139, 370, 418, 372, 1145, 1146, 370, + 1179, 372, 374, 1139, 376, 374, 374, 376, 376, 741, + 392, 393, 354, 355, 349, 350, 372, 373, 369, 1198, + 1199, 364, 365, 261, 756, 1171, 375, 759, 1092, 1093, + 412, 372, 764, 395, 396, 1171, 372, 1180, 420, 1218, + 1188, 423, 389, 390, 376, 368, 284, 779, 374, 294, + 372, 783, 372, 1246, 1197, 294, 1204, 374, 1206, 297, + 372, 372, 372, 1242, 302, 1244, 374, 305, 371, 307, + 285, 309, 310, 311, 312, 376, 256, 374, 294, 317, + 295, 375, 294, 321, 1103, 300, 381, 325, 1107, 372, + 356, 1110, 374, 373, 375, 333, 374, 373, 336, 418, + 338, 372, 381, 376, 374, 374, 374, 423, 429, 1252, + 1253, 374, 1256, 372, 381, 367, 1135, 1260, 374, 421, + 1139, 853, 854, 372, 362, 1268, 1269, 373, 1271, 372, + 343, 294, 374, 294, 1277, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 0, 1289, 374, 1291, 370, + 375, 1294, 1171, 418, 371, 370, 261, 418, 367, 1302, + 256, 256, 256, 1307, 374, 256, 280, 382, 383, 384, + 381, 1276, 387, 388, 256, 367, 372, 1197, 1321, 284, + 418, 368, 1201, 1362, 343, 376, 370, 919, 371, 374, + 376, 370, 297, 374, 1299, 372, 372, 302, 376, 372, + 1379, 423, 307, 347, 309, 310, 311, 312, 1313, 381, + 315, 351, 317, 1392, 1393, 367, 321, 949, 256, 381, + 256, 381, 372, 376, 1372, 1330, 1370, 1332, 333, 368, + 347, 336, 1252, 338, 370, 370, 1384, 374, 367, 370, + 1419, 1420, 375, 375, 372, 348, 368, 418, 1268, 1269, + 982, 374, 418, 1401, 374, 339, 372, 362, 348, 368, + 367, 376, 375, 368, 369, 367, 367, 356, 368, 381, + 376, 1291, 371, 337, 1294, 368, 374, 305, 256, 371, + 368, 263, 368, 93, 418, 372, 1434, 97, 98, 99, + 100, 101, 102, 103, 104, 371, 1475, 418, 369, 1492, + 1493, 367, 371, 376, 371, 61, 371, 418, 418, 65, + 66, 67, 371, 69, 70, 373, 367, 371, 74, 75, + 381, 418, 1470, 369, 381, 81, 371, 83, 372, 85, + 372, 374, 1476, 1477, 90, 91, 0, 374, 373, 1483, + 1484, 373, 376, 374, 1492, 1493, 418, 374, 372, 372, + 370, 376, 381, 372, 376, 418, 418, 372, 114, 574, + 376, 367, 418, 372, 368, 370, 368, 381, 315, 372, + 371, 1103, 371, 368, 372, 1107, 372, 0, 1110, 0, + 367, 372, 376, 368, 0, 368, 376, 376, 372, 368, + 370, 372, 418, 367, 367, 1127, 368, 372, 368, 0, + 376, 256, 257, 1135, 370, 418, 261, 1139, 418, 376, + 265, 372, 267, 376, 376, 270, 372, 272, 273, 376, + 275, 372, 277, 368, 279, 368, 281, 282, 283, 284, + 367, 372, 287, 288, 368, 368, 372, 376, 293, 1171, + 295, 296, 297, 367, 373, 300, 301, 302, 1180, 304, + 376, 376, 307, 376, 309, 310, 311, 312, 376, 376, + 376, 316, 317, 318, 376, 1197, 321, 322, 323, 1201, + 376, 315, 263, 50, 12, 330, 331, 51, 333, 334, + 5, 336, 337, 338, 941, 835, 1087, 342, 1087, 1244, + 300, 1424, 1218, 1387, 1440, 1375, 1370, 1404, 254, 1277, + 715, 257, 856, 856, 856, 675, 852, 362, 1289, 1484, + 1308, 1242, 1230, 368, 369, 689, 1478, 1393, 1397, 329, + 1252, 1253, 377, 1392, 1179, 1477, 1332, 1277, 1260, 827, + 1180, 803, 525, 877, 798, 587, 1268, 1269, 366, 1271, + 683, 297, 71, 718, 991, 332, 715, 397, 399, 398, + 402, 783, 400, 1162, 310, 401, 1252, 1171, 1107, 1291, + 370, 547, 1294, 418, 157, 1052, 978, 0, 1075, 1005, + 962, 1063, 382, 383, 384, 1065, 1136, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 257, 898, 523, 421, 261, 1146, 1248, + 833, 832, -1, -1, -1, -1, -1, -1, 272, -1, + -1, -1, -1, 277, -1, -1, -1, 281, -1, -1, + 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 296, 297, -1, -1, -1, 301, 302, -1, + -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, + -1, -1, -1, 317, -1, 256, -1, 321, -1, 323, + 261, 262, -1, -1, -1, -1, -1, -1, -1, 333, + -1, 335, 336, -1, 338, -1, -1, -1, 342, -1, + -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 505, 297, 298, 362, -1, + -1, 302, -1, -1, 305, 369, 307, -1, 309, 310, + 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, + 321, -1, -1, -1, 325, 481, -1, -1, -1, -1, + -1, -1, 333, -1, -1, 336, -1, 338, 339, -1, + -1, -1, -1, 344, 0, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, + -1, 362, 363, -1, 574, 521, 367, 368, -1, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 0, 392, 393, 394, 395, 396, 397, 398, 399, 400, + -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 404, 549, 416, 1163, 418, 1253, 420, - 1172, 1108, 423, 158, 1053, 1006, 1066, 978, 429, 1064, - 782, 1076, 256, 962, 1137, 525, 898, 423, 262, 1147, - 1249, -1, -1, -1, 832, -1, 339, 831, -1, -1, - -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, - 294, -1, -1, -1, 298, 368, -1, 370, -1, 372, - -1, 374, 375, 376, -1, 1104, -1, -1, -1, 1108, - -1, -1, 1111, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 1128, - -1, -1, -1, -1, 285, 339, -1, 1136, -1, -1, - 344, 1140, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, 429, -1, -1, 363, - -1, -1, -1, 367, 368, -1, 370, 371, 372, -1, - 374, 375, 376, 1172, 378, 379, 327, 0, 382, 383, - 384, 385, 1181, -1, 877, 389, 390, -1, -1, -1, - 394, 395, 396, 397, 398, 399, 400, 401, -1, 1198, - -1, -1, -1, 1202, -1, -1, -1, -1, -1, 413, - -1, -1, 416, -1, 418, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 429, 377, 378, 379, 380, - -1, 382, 383, 384, 385, 386, 387, 388, 389, -1, - -1, 392, 393, 394, 395, 396, 397, 398, 399, -1, - -1, -1, -1, -1, 1253, 1254, -1, -1, -1, -1, - -1, -1, 1261, -1, -1, -1, 256, 257, -1, -1, - 1269, 1270, -1, 1272, 264, 265, 266, 267, 268, -1, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - 280, -1, -1, 1292, -1, 285, 1295, 287, 288, 289, - 290, 291, 292, -1, -1, 295, 0, -1, -1, 299, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 314, -1, 316, -1, 318, 319, - -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, - 340, 341, -1, -1, 344, 345, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, - -1, 371, -1, -1, -1, -1, 376, 377, 378, 379, - 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, - -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 417, 418, 419, - 420, -1, 422, 256, 257, -1, -1, -1, -1, 429, + 411, 412, 413, -1, -1, 416, -1, 418, -1, 420, + -1, -1, 423, 256, 257, -1, -1, -1, 429, -1, -1, 264, 265, 266, 267, 268, -1, 270, 271, -1, - 273, 274, 275, 276, 277, 278, 279, -1, -1, 0, + 273, 274, 275, 276, 277, 278, 279, 280, -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, 302, - 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, + 303, 304, -1, 0, -1, -1, -1, -1, -1, 256, -1, 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, -1, @@ -11211,324 +11251,368 @@ void case_957() -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, -1, 371, -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, -1, - -1, 384, 256, 386, -1, -1, -1, 261, 262, 392, - 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - 284, -1, -1, -1, 417, 418, 419, 420, -1, 422, - 294, -1, -1, 297, 298, -1, 429, -1, 302, -1, + -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, + 393, -1, 339, -1, -1, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, -1, 417, 418, 419, 420, -1, 422, + -1, 368, -1, 370, -1, 372, 429, 374, 375, 376, + 256, 257, -1, -1, -1, -1, -1, -1, 264, 265, + 266, 267, 268, 390, 270, 271, -1, 273, 274, 275, + 276, 277, 278, 279, -1, -1, 0, -1, -1, 285, + -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, + -1, -1, -1, 299, 300, -1, 302, 303, 304, -1, + -1, -1, 429, -1, -1, -1, -1, -1, 314, -1, + 316, -1, 318, 319, -1, -1, 322, 877, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + -1, 337, -1, -1, 340, 341, -1, -1, 344, 345, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, 367, 368, -1, -1, 371, -1, -1, -1, -1, + 376, 377, 378, 379, 380, -1, -1, -1, 384, 256, + 386, -1, -1, -1, 261, 262, 392, 393, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, 284, -1, -1, + -1, 417, 418, 419, 420, -1, 422, -1, -1, -1, + 297, 298, -1, 429, -1, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 339, -1, -1, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, -1, -1, -1, 362, 363, -1, -1, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + -1, 378, 379, -1, -1, 382, 383, 384, 385, 386, + -1, -1, 389, 390, -1, -1, -1, 394, 395, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, 256, -1, -1, -1, 413, 261, 262, 416, + -1, 418, -1, 420, -1, -1, 423, -1, -1, -1, + -1, -1, 429, 0, -1, -1, -1, -1, -1, -1, + 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 297, 298, -1, -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, -1, -1, -1, -1, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, -1, 378, 379, -1, -1, 382, 383, - 384, 385, 386, -1, -1, 389, 390, -1, -1, -1, + 354, 355, 356, -1, -1, -1, -1, -1, 362, 363, + -1, -1, -1, 367, 368, 369, 370, 371, 372, -1, + 374, 375, 376, -1, 378, 379, -1, 0, 382, 383, + 384, 385, 256, -1, -1, 389, 390, 261, 262, -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, - -1, -1, -1, -1, -1, 256, -1, -1, -1, 413, - 261, 262, 416, -1, 418, -1, 420, -1, -1, 423, - -1, -1, -1, -1, -1, 429, 0, -1, -1, -1, - -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 294, -1, -1, 297, 298, -1, -1, - -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, - 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, - -1, -1, 333, -1, -1, 336, -1, 338, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - -1, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, -1, 374, 375, 376, -1, 378, 379, -1, - -1, 382, 383, 384, 385, 256, -1, -1, 389, 390, - 261, 262, -1, 394, 395, 396, 397, 398, 399, 400, - 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 413, 284, -1, 416, -1, 418, -1, 420, - -1, -1, 423, 294, -1, -1, 297, 298, 429, -1, - -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, - 311, 312, -1, 0, -1, -1, 317, -1, -1, -1, - 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, - -1, -1, 333, -1, -1, 336, -1, 338, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, - -1, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, -1, 374, 375, 376, -1, 378, 379, -1, - -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, - -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, - 401, -1, 256, -1, -1, -1, -1, 261, 262, -1, - -1, -1, 413, -1, -1, 416, -1, 418, -1, 420, - -1, -1, 423, -1, -1, -1, 0, -1, 429, -1, - 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 294, -1, -1, 297, 298, -1, -1, -1, 302, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 413, + 284, -1, 416, -1, 418, -1, 420, -1, -1, 423, + -1, -1, -1, 297, 298, 429, -1, -1, 302, -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, -1, -1, -1, -1, -1, -1, 333, - -1, -1, 336, -1, 338, 339, -1, -1, -1, 0, + -1, -1, 336, -1, 338, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, 362, 363, - -1, -1, -1, 367, 368, -1, 370, 371, 372, -1, + -1, -1, -1, 367, 368, 369, 370, 371, 372, -1, 374, 375, 376, -1, 378, 379, -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, -1, -1, - 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 0, 413, - -1, -1, 416, -1, 418, -1, -1, -1, -1, -1, - 257, -1, -1, -1, 261, 429, 263, -1, 265, -1, - 267, -1, -1, 270, -1, 272, 273, -1, 275, -1, - 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, - 287, 288, -1, -1, -1, -1, 293, 294, 295, 296, - 297, -1, -1, 300, 301, 302, -1, 304, -1, 306, - 307, 308, 309, 310, 311, 312, 313, 0, 315, 316, - 317, 318, -1, -1, 321, 322, 323, -1, 325, -1, - -1, -1, -1, 330, 331, -1, 333, 334, -1, 336, - 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, + 394, 395, 396, 397, 398, 399, 400, 401, -1, 256, + 0, -1, -1, -1, 261, 262, -1, -1, -1, 413, + -1, -1, 416, -1, 418, -1, 420, -1, -1, 423, + -1, -1, -1, -1, -1, 429, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 362, -1, 364, 365, -1, - -1, -1, 256, 257, -1, -1, -1, 261, -1, -1, - 377, 265, -1, 267, -1, -1, 270, -1, 272, 273, - -1, 275, -1, 277, -1, 279, -1, 281, 282, 283, - 284, -1, -1, 287, 288, -1, 0, -1, -1, 293, - -1, 295, 296, 297, -1, -1, 300, 301, 302, -1, - 304, 418, -1, 307, -1, 309, 310, 311, 312, -1, - -1, -1, 316, 317, 318, -1, 257, 321, 322, 323, - 261, -1, -1, -1, -1, -1, 330, 331, -1, 333, - 334, 272, 336, 337, 338, -1, 277, -1, 342, -1, - 281, -1, -1, 284, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, 296, 297, -1, 362, -1, - 301, 302, -1, -1, 368, 369, 307, -1, 309, 310, - 311, 312, -1, 377, -1, -1, 317, -1, -1, -1, - 321, -1, 323, -1, -1, 257, -1, -1, -1, 261, - -1, -1, 333, -1, 335, 336, 0, 338, -1, -1, + 297, 298, -1, -1, -1, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, -1, -1, -1, 325, -1, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 339, -1, -1, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, 256, -1, 362, 363, -1, -1, 262, + 367, 368, -1, 370, 371, 372, -1, 374, 375, 376, + -1, 378, 379, -1, -1, 382, 383, 384, 385, -1, + -1, -1, 389, 390, -1, -1, -1, 394, 395, 396, + 397, 398, 399, 400, 401, 298, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 413, -1, 0, 416, + -1, 418, -1, 256, -1, -1, -1, -1, -1, 262, + -1, -1, 429, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, + -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 298, -1, -1, -1, -1, + 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, -1, 378, 379, -1, -1, 382, + 383, 384, 385, 386, -1, -1, 389, 390, -1, -1, + -1, 394, 395, 396, 397, 398, 399, 400, 401, 0, + -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 413, -1, 262, 416, -1, 418, -1, 420, -1, -1, + 423, -1, -1, -1, -1, 368, 429, -1, 371, -1, + 373, 374, -1, -1, -1, 378, 379, -1, -1, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 298, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, 412, + 413, -1, -1, -1, -1, -1, -1, 420, -1, -1, + 423, -1, -1, -1, -1, -1, 429, -1, -1, 339, + -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, -1, 363, -1, -1, -1, 367, 368, -1, + 370, 371, 372, -1, 374, 375, 376, -1, 378, 379, + -1, 0, 382, 383, 384, 385, -1, -1, -1, 389, + 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, + 400, 401, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 413, -1, 257, 416, -1, 418, 261, + -1, 263, -1, 265, 0, 267, -1, -1, 270, 429, + 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, + 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, + -1, 293, 294, 295, 296, 297, -1, -1, 300, 301, + 302, -1, 304, -1, 306, 307, 308, 309, 310, 311, + 312, 313, -1, 315, 316, 317, 318, -1, -1, 321, + 322, 323, -1, 325, -1, -1, -1, 0, 330, 331, + -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, + 342, -1, -1, -1, -1, -1, 257, -1, -1, -1, + 261, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 362, 272, 364, 365, -1, -1, 277, -1, -1, -1, + 281, -1, -1, 284, 0, 377, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 296, 297, -1, -1, -1, + 301, 302, -1, -1, -1, -1, 307, -1, 309, 310, + 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, + 321, -1, 323, -1, -1, 257, 418, -1, -1, 261, + -1, 0, 333, -1, 335, 336, -1, 338, -1, -1, 272, 342, -1, -1, -1, 277, -1, -1, -1, 281, - -1, -1, 284, -1, 418, -1, -1, -1, -1, -1, - -1, 362, -1, -1, 296, 297, -1, -1, 369, 301, + -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, + -1, 362, -1, -1, 296, 297, -1, 368, 369, 301, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, 0, -1, 317, -1, -1, -1, 321, - -1, 323, -1, -1, 257, -1, -1, -1, 261, -1, - -1, 333, -1, -1, 336, -1, 338, -1, -1, 272, - 342, -1, -1, -1, 277, -1, -1, -1, 281, -1, + 312, -1, -1, -1, -1, 317, -1, -1, 257, 321, + -1, 323, 261, -1, 0, -1, -1, -1, -1, -1, + -1, 333, -1, 272, 336, -1, 338, -1, 277, -1, + 342, -1, 281, -1, -1, 284, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 296, 297, -1, + 362, 257, 301, 302, -1, 261, 368, 369, 307, -1, + 309, 310, 311, 312, -1, -1, 272, -1, 317, -1, + -1, 277, 321, -1, 323, 281, -1, 0, 284, -1, + -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, + 296, 297, -1, 342, -1, 301, 302, -1, -1, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, 362, 257, 321, -1, 323, 261, 368, + 369, -1, -1, -1, -1, -1, -1, 333, -1, 272, + 336, -1, 338, -1, 277, -1, 342, -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, - 362, -1, -1, 296, 297, -1, 368, 369, 301, 302, - 261, -1, 263, -1, 307, -1, 309, 310, 311, 312, - 0, -1, -1, -1, 317, -1, -1, -1, 321, -1, - 323, -1, -1, 284, -1, -1, -1, -1, -1, -1, - 333, -1, -1, 336, -1, 338, 297, -1, -1, 342, - -1, 302, -1, 257, -1, -1, 307, 261, 309, 310, - 311, 312, -1, 0, 315, -1, 317, -1, 272, 362, - 321, -1, -1, 277, -1, 368, 369, 281, -1, -1, - 284, -1, 333, -1, -1, 336, -1, 338, -1, -1, - -1, -1, 296, 297, -1, -1, -1, 301, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, 362, -1, 317, -1, -1, 257, 321, -1, 323, - 261, -1, -1, -1, -1, -1, -1, -1, -1, 333, - -1, 272, 336, -1, 338, -1, 277, -1, 342, -1, - 281, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 296, 297, -1, 362, -1, - 301, 302, -1, 257, -1, 369, 307, 261, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, 272, -1, - 321, -1, 323, 277, -1, -1, -1, 281, -1, -1, - 284, -1, 333, -1, -1, 336, -1, 338, -1, -1, - -1, 342, 296, 297, -1, -1, -1, 301, 302, -1, - 257, -1, -1, 307, 261, 309, 310, 311, 312, -1, - -1, 362, -1, 317, -1, 272, -1, 321, -1, 323, - 277, -1, -1, -1, 281, -1, -1, 284, -1, 333, - -1, -1, 336, -1, 338, -1, -1, -1, 342, 296, - 297, -1, -1, -1, 301, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, -1, 362, -1, - 317, -1, -1, -1, 321, -1, 323, 257, -1, -1, - -1, 261, -1, -1, -1, -1, 333, -1, -1, 336, - -1, 338, 272, -1, -1, 342, -1, 277, -1, -1, - -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 362, 296, 297, -1, -1, - 257, 301, 302, -1, 261, -1, -1, 307, -1, 309, - 310, 311, 312, -1, -1, 272, -1, 317, -1, -1, - 277, 321, -1, 323, 281, -1, -1, 284, -1, -1, - -1, -1, -1, 333, -1, -1, 336, -1, 338, 296, - 297, -1, 342, -1, 301, 302, -1, -1, -1, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, - 317, -1, 362, -1, 321, -1, 323, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 333, -1, 256, 336, - -1, 338, -1, -1, -1, 342, 264, 265, 266, 267, - -1, -1, 270, 271, -1, 273, 274, 275, 276, 277, - 278, 279, -1, -1, -1, 362, -1, 285, -1, 287, - 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, - -1, 299, 300, -1, 302, 303, 304, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 314, -1, 316, -1, - 318, 319, -1, -1, 322, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, - -1, -1, 340, 341, -1, 256, 344, 345, -1, -1, - -1, 262, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, - -1, -1, -1, 371, -1, -1, -1, -1, 376, 377, - 378, 379, 380, -1, -1, -1, 384, 298, 386, -1, - -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, + -1, -1, -1, 296, 297, -1, 362, -1, 301, 302, + -1, 257, -1, 369, 307, 261, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, 272, -1, 321, -1, + 323, 277, -1, -1, -1, 281, -1, -1, 284, -1, + 333, -1, -1, 336, -1, 338, -1, -1, -1, 342, + 296, 297, -1, -1, -1, 301, 302, -1, 257, -1, + -1, 307, 261, 309, 310, 311, 312, -1, -1, 362, + -1, 317, -1, 272, -1, 321, -1, 323, 277, -1, + -1, -1, 281, -1, -1, 284, -1, 333, -1, -1, + 336, -1, 338, -1, -1, -1, 342, 296, 297, -1, + -1, -1, 301, 302, -1, -1, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, 362, -1, 317, -1, + -1, 257, 321, -1, 323, 261, -1, -1, -1, -1, + -1, -1, -1, -1, 333, -1, 272, 336, -1, 338, + -1, 277, -1, 342, -1, 281, -1, -1, 284, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 296, 297, -1, 362, -1, 301, 302, -1, -1, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, + -1, 317, -1, -1, 257, 321, -1, 323, 261, -1, + -1, -1, -1, -1, -1, -1, -1, 333, -1, 272, + 336, -1, 338, -1, 277, -1, 342, -1, 281, -1, + -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 296, 297, -1, 362, -1, 301, 302, + -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, + 323, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 333, -1, 256, 336, -1, 338, -1, -1, -1, 342, + 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, + 274, 275, 276, 277, 278, 279, -1, -1, -1, 362, + -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, + -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, -1, 337, -1, -1, 340, 341, -1, 256, + 344, 345, -1, -1, -1, 262, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, + -1, -1, 376, 377, 378, 379, 380, -1, -1, -1, + 384, 298, 386, -1, -1, -1, -1, -1, 392, 393, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 417, 418, 419, 420, -1, -1, -1, + -1, 285, 339, -1, -1, 429, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, -1, -1, -1, -1, -1, 363, -1, -1, -1, + -1, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 256, 378, 379, 327, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, -1, 256, -1, + -1, 418, -1, 420, 262, -1, 423, -1, -1, -1, + -1, -1, 429, 377, 378, 379, 380, -1, 382, 383, + 384, 385, 386, 387, 388, 389, -1, -1, 392, 393, + 394, 395, 396, 397, 398, 399, -1, -1, -1, -1, + 298, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, 339, -1, -1, -1, -1, 344, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 256, + 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 429, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, -1, 256, -1, -1, + -1, -1, 420, 262, -1, -1, -1, -1, -1, -1, + -1, 429, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, -1, -1, -1, -1, 262, -1, 417, - 418, 419, 420, -1, -1, -1, -1, -1, 339, -1, - -1, 429, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, -1, -1, -1, - -1, -1, 363, 298, -1, -1, -1, 368, 369, 370, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 298, + -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + -1, 368, -1, 370, 262, 372, -1, 374, 375, 376, + 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 367, 368, + 298, 370, 371, 372, 373, 374, 375, 376, -1, 378, + 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 429, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, -1, 256, -1, -1, -1, + -1, 420, 262, -1, 423, -1, -1, -1, -1, -1, + 429, -1, -1, -1, -1, 363, -1, -1, -1, -1, + -1, 369, -1, 371, 372, 373, 374, -1, 376, -1, + 378, 379, -1, 381, 382, 383, 384, 385, 298, 387, + 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, + 418, -1, 420, -1, -1, 423, -1, -1, -1, 339, + -1, 429, -1, -1, 344, -1, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 368, -1, + 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, 256, 256, -1, -1, -1, + 420, 262, -1, 423, -1, 265, -1, 267, -1, 429, + 270, -1, -1, -1, -1, 275, -1, -1, -1, 279, + -1, -1, -1, -1, -1, -1, -1, -1, 288, -1, + -1, -1, -1, -1, -1, 295, -1, 298, -1, -1, + 300, -1, -1, -1, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 316, -1, 318, -1, + -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, + 330, 331, -1, -1, 334, -1, -1, 337, 339, -1, + -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, + -1, -1, -1, 363, -1, -1, -1, 368, -1, 370, 371, 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, -1, 256, -1, -1, 418, -1, 420, - 262, -1, 423, -1, -1, -1, -1, -1, 429, -1, - -1, -1, -1, 368, -1, -1, 371, -1, 373, 374, - -1, -1, -1, 378, 379, -1, -1, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 298, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 412, 413, -1, - -1, -1, -1, -1, -1, 420, -1, -1, 423, -1, - -1, -1, -1, -1, 429, -1, -1, 339, -1, -1, + 411, 412, 413, -1, 256, 256, -1, -1, 418, 420, + 262, -1, 423, -1, 265, -1, 267, -1, 429, 270, + -1, -1, -1, -1, 275, -1, -1, -1, 279, -1, + -1, -1, -1, -1, -1, -1, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, 298, -1, -1, 300, + -1, -1, -1, 304, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 316, -1, 318, -1, -1, + -1, 322, -1, -1, -1, -1, -1, -1, -1, 330, + 331, -1, -1, 334, -1, -1, 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 256, 378, 379, -1, 381, + -1, -1, -1, -1, -1, -1, 368, -1, 370, 371, + 372, 373, 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, -1, 256, -1, -1, -1, -1, 420, 262, - -1, -1, -1, -1, -1, -1, -1, 429, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 298, -1, -1, 339, -1, - -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 368, -1, 370, - 262, 372, -1, 374, 375, 376, 339, -1, -1, -1, + 412, 413, -1, 256, 256, -1, -1, 418, 420, 262, + -1, 423, -1, 265, -1, 267, -1, 429, 270, -1, + -1, -1, -1, 275, -1, -1, -1, 279, -1, -1, + -1, -1, -1, -1, -1, -1, 288, -1, -1, -1, + -1, -1, -1, 295, -1, 298, -1, -1, 300, -1, + -1, -1, 304, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 316, -1, 318, -1, -1, -1, + 322, -1, -1, -1, -1, -1, -1, -1, 330, 331, + -1, -1, 334, -1, -1, 337, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 367, 368, 298, 370, 371, 372, - 373, 374, 375, 376, -1, 378, 379, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 429, 392, + -1, -1, -1, -1, -1, 368, -1, 370, 371, 372, + 373, 374, 375, 376, -1, 378, -1, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, -1, 256, -1, -1, -1, -1, 420, 262, -1, + 413, -1, 256, -1, 261, -1, 418, 420, 262, -1, 423, -1, -1, -1, -1, -1, 429, -1, -1, -1, - -1, 363, -1, -1, -1, -1, -1, 369, -1, 371, - 372, 373, 374, -1, 376, -1, 378, 379, -1, 381, - 382, 383, 384, 385, 298, 387, 388, 389, 390, -1, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, -1, -1, -1, -1, 418, -1, 420, -1, - -1, 423, -1, -1, -1, 339, -1, 429, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 284, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 297, -1, -1, -1, 298, 302, -1, -1, 305, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, 256, -1, -1, 325, -1, + -1, 262, -1, -1, -1, 266, 333, -1, -1, 336, + -1, 338, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 368, -1, 370, 371, 372, 373, - 374, 375, 376, -1, 378, 379, -1, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, -1, 392, 393, + 354, 355, 356, -1, -1, 362, -1, 298, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, 314, 378, 379, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - -1, 256, 256, -1, -1, -1, 420, 262, -1, 423, - -1, 265, -1, 267, -1, 429, 270, -1, -1, -1, - -1, 275, -1, -1, -1, 279, -1, -1, -1, -1, - -1, -1, -1, -1, 288, -1, -1, -1, -1, -1, - -1, 295, -1, 298, -1, -1, 300, -1, -1, -1, - 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, -1, 318, -1, -1, -1, 322, -1, - -1, -1, -1, -1, -1, -1, 330, 331, -1, -1, - 334, -1, -1, 337, 339, -1, -1, -1, -1, 344, - -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, -1, -1, -1, -1, -1, -1, -1, 363, - -1, -1, -1, 368, -1, 370, 371, 372, 373, 374, - 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, - 256, 256, -1, -1, 418, 420, 262, -1, 423, -1, - 265, -1, 267, -1, 429, 270, -1, -1, -1, -1, - 275, -1, -1, -1, 279, -1, -1, -1, -1, -1, - -1, -1, -1, 288, -1, -1, -1, -1, -1, -1, - 295, -1, 298, -1, -1, 300, -1, -1, -1, 304, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 316, -1, 318, -1, -1, -1, 322, -1, -1, - -1, -1, -1, -1, -1, 330, 331, -1, -1, 334, - -1, -1, 337, 339, -1, -1, -1, -1, 344, -1, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 368, -1, 370, 371, 372, 373, 374, 375, - 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, -1, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, -1, 256, - 256, -1, -1, 418, 420, 262, -1, 423, -1, 265, - -1, 267, -1, 429, 270, -1, -1, -1, -1, 275, - -1, -1, -1, 279, -1, -1, -1, -1, -1, -1, - -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, - -1, 298, -1, -1, 300, -1, -1, -1, 304, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 316, -1, 318, -1, -1, -1, 322, -1, -1, -1, - -1, -1, -1, -1, 330, 331, -1, -1, 334, -1, - -1, 337, 339, -1, -1, -1, -1, 344, -1, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 368, -1, 370, 371, 372, 373, 374, 375, 376, - -1, 378, -1, -1, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, -1, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, -1, 256, -1, - 261, -1, 418, 420, 262, -1, 423, -1, -1, -1, - -1, -1, 429, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 284, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 297, -1, -1, -1, - 298, 302, -1, -1, 305, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, - 321, 256, -1, -1, 325, -1, -1, 262, -1, -1, - -1, 266, 333, -1, -1, 336, -1, 338, -1, -1, + 404, 405, 406, 407, 408, 409, 410, 411, 256, 413, + -1, 418, -1, -1, 262, -1, 357, -1, -1, -1, + -1, -1, 363, -1, -1, 429, -1, -1, 369, 370, + 371, 372, 373, 374, 375, 376, -1, 378, 379, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 298, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, -1, -1, -1, -1, 418, -1, 420, + -1, -1, 423, -1, -1, -1, -1, -1, 429, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, 362, -1, 298, -1, -1, -1, -1, -1, -1, - 368, -1, 370, -1, 372, -1, 374, 375, 376, 314, - 378, 379, -1, 381, 382, 383, 384, 385, 386, 387, + -1, -1, 256, -1, -1, -1, -1, -1, 262, -1, + 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, + 378, 379, -1, -1, 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, -1, -1, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 256, 413, -1, 418, -1, -1, - 262, -1, 357, -1, -1, -1, -1, -1, 363, -1, - -1, 429, -1, -1, 369, 370, 371, 372, 373, 374, - 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 298, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, - -1, -1, -1, 418, -1, 420, -1, -1, 423, -1, - -1, -1, -1, -1, 429, -1, -1, 339, -1, -1, + 398, 399, 400, 401, 298, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 413, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 256, 429, -1, -1, -1, -1, 262, -1, -1, -1, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 298, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, 378, 379, -1, -1, 382, 383, + 384, 385, -1, -1, -1, 389, 390, -1, -1, -1, + 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, 256, 429, -1, -1, -1, -1, + 262, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, 378, 379, -1, -1, 382, 383, 384, 385, + -1, -1, -1, 389, 390, -1, -1, -1, 394, 395, + 396, 397, 398, 399, 400, 401, 298, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 413, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 256, 429, -1, -1, -1, -1, 262, -1, + -1, -1, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, -1, -1, -1, 256, -1, - -1, -1, -1, -1, 262, -1, 368, -1, 370, -1, + 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 298, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, -1, - 382, 383, 384, 385, 386, 387, 388, 389, 390, -1, - -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, - 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 413, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, 429, -1, -1, - -1, -1, 262, -1, -1, -1, -1, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, -1, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 298, -1, - 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, - 378, 379, -1, -1, 382, 383, 384, 385, -1, -1, - -1, 389, 390, -1, -1, -1, 394, 395, 396, 397, - 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, - -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, - 256, 429, -1, -1, -1, -1, 262, -1, 368, -1, - 370, -1, 372, -1, 374, 375, 376, -1, 378, 379, - -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, - 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, - 400, 401, 298, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 413, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 256, 429, - -1, -1, -1, -1, 262, -1, -1, -1, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, -1, + 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, 394, 395, 396, 397, 398, 399, 400, 401, + -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, + 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, + -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, + 374, 375, 376, -1, 378, 379, -1, -1, 382, 383, + 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, + 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, + -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 298, -1, 368, -1, 370, -1, 372, -1, 374, 375, - 376, -1, 378, 379, -1, -1, 382, 383, 384, 385, + 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, + -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, + 376, -1, -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, - 378, 379, -1, -1, 382, 383, 384, 385, -1, -1, + -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, @@ -11543,14 +11627,14 @@ void case_957() -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, - 256, -1, 394, 395, 396, 397, 398, 399, 400, 401, + 256, -1, -1, -1, 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, - 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, + -1, -1, 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, @@ -11576,15 +11660,15 @@ void case_957() 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, - 382, 383, 384, 385, -1, -1, -1, 389, 390, -1, - 256, -1, -1, -1, 396, 397, 398, 399, 400, 401, + -1, -1, 384, 385, -1, -1, -1, 389, 390, -1, + 256, -1, -1, -1, -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, - 374, 375, 376, -1, -1, -1, -1, -1, 382, 383, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, - -1, -1, 396, 397, 398, 399, 400, 401, -1, -1, + -1, -1, -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, @@ -11598,121 +11682,76 @@ void case_957() 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, -1, -1, - 398, 399, 400, 401, -1, -1, -1, -1, -1, 339, + -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, 384, 385, -1, -1, -1, 389, - 390, -1, 256, -1, -1, -1, -1, -1, 398, 399, + 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, - -1, -1, 384, 385, -1, -1, -1, 389, 390, -1, + -1, -1, -1, 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, - 384, 385, -1, -1, -1, 389, 390, -1, 256, -1, + -1, 385, -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, 385, - -1, -1, -1, 389, 390, -1, 256, -1, -1, -1, + -1, -1, -1, -1, 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, 385, -1, -1, - -1, 389, 390, -1, 256, -1, -1, -1, -1, -1, + -1, -1, 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, -1, -1, - -1, -1, -1, -1, -1, 385, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 390, -1, 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, - 372, -1, 374, 375, 376, -1, -1, -1, -1, -1, - -1, -1, -1, 385, -1, -1, -1, -1, 390, -1, - 256, -1, -1, -1, -1, -1, -1, -1, 400, 401, + 372, -1, 374, 375, 376, -1, -1, -1, 256, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 390, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, 372, -1, - 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 390, -1, 256, -1, - -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, - -1, -1, -1, 339, -1, -1, -1, -1, 344, 413, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 429, -1, -1, -1, -1, - -1, -1, 368, -1, 370, -1, 372, -1, 374, 375, - 376, -1, -1, -1, 256, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 390, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, - -1, 339, -1, -1, -1, -1, 344, 413, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, - -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, - 368, -1, 370, -1, 372, -1, 374, 375, 376, -1, - -1, -1, -1, 262, -1, -1, -1, 266, -1, -1, - -1, -1, 390, -1, -1, -1, -1, 339, -1, -1, - -1, -1, 344, 401, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 413, -1, -1, -1, 298, - -1, -1, -1, -1, -1, -1, 368, -1, 370, -1, - 372, 429, 374, 375, 376, 314, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 390, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 401, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 413, -1, -1, -1, -1, -1, -1, 357, -1, - -1, -1, -1, -1, 363, -1, -1, 429, -1, -1, - 369, -1, 371, -1, 373, -1, 375, 376, -1, 378, - 379, -1, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, -1, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, -1, -1, 256, -1, 418, - -1, 420, -1, -1, 423, 264, 265, 266, 267, -1, - 429, 270, 271, -1, 273, 274, 275, 276, 277, 278, - 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, - 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, - 299, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 314, -1, 316, -1, 318, - 319, -1, -1, 322, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, -1, 337, -1, - -1, 340, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, - -1, -1, 371, -1, -1, -1, -1, 376, 377, 378, - 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, - -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, - 419, 420, 264, 265, 266, 267, -1, -1, 270, 271, - -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, - -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, - 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 314, -1, 316, -1, 318, 319, -1, -1, - 322, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, -1, 337, -1, -1, 340, 341, - -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, - -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, - -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, - 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, + 374, 375, 376, -1, -1, -1, -1, 262, -1, -1, + -1, 266, -1, -1, -1, -1, 390, -1, -1, -1, + -1, 339, -1, -1, -1, -1, 344, 401, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 413, + -1, -1, -1, 298, -1, -1, -1, -1, -1, -1, + 368, -1, 370, -1, 372, 429, 374, 375, 376, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, - 265, 266, 267, -1, -1, 270, 271, -1, 273, 274, + -1, -1, 390, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 401, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 413, -1, -1, -1, -1, + -1, -1, 357, -1, -1, -1, -1, -1, 363, -1, + -1, 429, -1, -1, 369, -1, 371, -1, 373, -1, + 375, 376, -1, 378, 379, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, + -1, 256, -1, 418, -1, 420, -1, -1, 423, 264, + 265, 266, 267, -1, 429, 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, 304, @@ -11759,98 +11798,39 @@ void case_957() -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, - 264, 265, -1, 267, -1, -1, 270, 271, -1, 256, - -1, 275, 276, 277, -1, 279, -1, -1, 265, -1, - 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, - -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, - 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, - -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, - 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, - 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, - 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, -1, -1, 371, -1, -1, - -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, + 264, 265, 266, 267, -1, -1, 270, 271, -1, 273, + 274, 275, 276, 277, 278, 279, -1, -1, -1, -1, + -1, 285, -1, 287, 288, 289, 290, 291, 292, -1, + -1, 295, -1, -1, -1, 299, 300, -1, 302, 303, + 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 314, -1, 316, -1, 318, 319, -1, -1, 322, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, -1, 337, -1, -1, 340, 341, -1, -1, + 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, + -1, -1, 376, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, - -1, -1, -1, 417, 418, 419, 420, 264, 265, -1, - 267, -1, -1, 270, 271, -1, 256, -1, 275, 276, - 277, 418, 279, -1, -1, 265, -1, 267, 285, -1, - 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, - -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, - -1, -1, -1, -1, -1, 295, -1, -1, -1, 316, - 300, 318, 319, 320, 304, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, - -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, - 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, + -1, -1, -1, 417, 418, 419, 420, 264, 265, 266, + 267, -1, -1, 270, 271, -1, 273, 274, 275, 276, + 277, 278, 279, -1, -1, -1, -1, -1, 285, -1, + 287, 288, 289, 290, 291, 292, -1, -1, 295, -1, + -1, -1, 299, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 314, -1, 316, + -1, 318, 319, -1, -1, 322, -1, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, + 337, -1, -1, 340, 341, -1, -1, 344, 345, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, + 367, -1, -1, -1, 371, -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, - -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, -1, -1, 418, 300, - -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, - -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, - 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, -1, -1, - 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, - -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, - -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, 417, 418, 419, 420, - -1, -1, 264, 265, -1, 267, -1, 428, 270, 271, - -1, -1, -1, 275, 276, 277, -1, 279, -1, -1, - 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, - 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, - 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, - 295, -1, -1, -1, 316, 300, 318, 319, 320, 304, - 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, - -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, - -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, - -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, - -1, -1, 384, -1, 386, -1, -1, 372, -1, -1, - 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, - 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, - 275, 276, 277, 418, 279, -1, -1, 265, -1, 267, - 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, - 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, - 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, - -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, - 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, - 318, -1, 337, -1, 322, -1, 341, -1, -1, 344, - 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, - -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, - -1, 386, 370, -1, -1, -1, -1, 392, 393, -1, - -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, - -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, - 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, - -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - 418, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, - 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, - 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, - -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, 367, -1, - -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, - 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, - -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 256, -1, 417, 418, - 419, 420, -1, -1, 264, 265, -1, 267, -1, 428, - 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, + -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, + 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, + 270, 271, -1, 256, -1, 275, 276, 277, -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, @@ -11859,30 +11839,89 @@ void case_957() 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, 367, -1, -1, + 360, 361, 362, 363, -1, -1, -1, 367, 368, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, - -1, -1, 275, 276, 277, 418, 279, -1, -1, 265, + 256, -1, 275, 276, 277, 418, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, - -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, + -1, -1, -1, 316, 300, 318, 319, 320, 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, + 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, - 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, + 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, + 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, + -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, + -1, -1, 418, 300, -1, 302, 303, 304, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, + -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, + 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, + -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + 367, 368, -1, -1, 371, -1, -1, -1, -1, -1, + 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, + -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + 417, 418, 419, 420, -1, -1, 264, 265, -1, 267, + -1, 428, 270, 271, -1, -1, -1, 275, 276, 277, + -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, + 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, + -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, -1, 316, 300, + 318, 319, 320, 304, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, 316, 334, 318, -1, -1, + -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, + 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, + -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, + 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, + -1, 372, -1, -1, 392, 393, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 256, -1, -1, -1, 417, + 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, + 271, -1, -1, -1, 275, 276, 277, 418, 279, -1, + -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, + -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, + -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, + -1, 295, -1, -1, -1, 316, 300, 318, 319, -1, + 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, + 331, 332, 316, 334, 318, -1, 337, -1, 322, -1, + 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, + 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, + -1, -1, -1, 384, -1, 386, 370, -1, -1, -1, + -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, 418, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, + -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, - -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, - 276, 277, 418, 279, -1, -1, 265, -1, 267, 285, + 256, -1, 417, 418, 419, 420, -1, -1, 264, 265, + -1, 267, -1, 428, 270, 271, -1, -1, -1, 275, + 276, 277, -1, 279, -1, -1, 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, @@ -11891,7 +11930,7 @@ void case_957() -1, -1, -1, 322, -1, 341, -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, + -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -11914,138 +11953,139 @@ void case_957() -1, -1, -1, -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, 418, 279, -1, -1, - -1, -1, -1, 285, -1, -1, 288, -1, -1, -1, - -1, -1, -1, 295, -1, 261, -1, 262, 300, -1, - 302, 303, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, -1, 318, 319, 284, -1, + 265, -1, 267, 285, -1, 270, 288, -1, -1, -1, + 275, -1, -1, 295, 279, -1, -1, -1, 300, -1, + 302, 303, 304, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, - 332, 297, 334, 298, -1, -1, 302, -1, -1, -1, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, -1, 321, -1, 359, 360, 361, - 362, -1, -1, -1, -1, -1, -1, 333, -1, 371, - 336, -1, 338, -1, -1, -1, -1, -1, -1, -1, + 332, 316, 334, 318, -1, -1, -1, 322, -1, 341, + -1, -1, 344, 345, -1, 330, 331, -1, -1, 334, + -1, -1, 337, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, + -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, + -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, + 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 362, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, - 375, -1, -1, 378, 379, 417, 418, 382, 383, 384, - 385, 386, 387, 388, 389, 390, -1, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, -1, - 261, -1, 418, -1, 265, 420, 267, -1, 423, 270, - -1, 272, 273, -1, 275, -1, 277, -1, 279, -1, - 281, 282, 283, 284, -1, -1, 287, 288, -1, -1, - -1, -1, 293, -1, 295, 296, 297, -1, -1, 300, - -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, - 311, 312, -1, -1, -1, 316, 317, 318, -1, -1, - 321, 322, 323, -1, -1, -1, -1, -1, -1, 330, - 331, -1, 333, 334, -1, 336, 337, 338, -1, -1, - -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, - -1, 362, -1, 265, -1, 267, -1, 368, 270, -1, - 272, 273, -1, 275, -1, 277, 377, 279, -1, 281, - 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, - -1, 293, -1, 295, 296, 297, -1, -1, 300, -1, - 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, -1, 316, 317, 318, 418, -1, 321, - 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, - -1, 333, 334, -1, 336, 337, 338, -1, -1, -1, - 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 261, -1, - 362, -1, 265, -1, 267, -1, 368, 270, -1, 272, - 273, -1, 275, -1, 277, 377, 279, -1, 281, 282, - 283, 284, -1, -1, 287, 288, -1, -1, -1, -1, - 293, -1, 295, 296, 297, -1, -1, 300, -1, 302, - -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, -1, 316, 317, 318, 418, -1, 321, 322, - 323, -1, -1, -1, -1, -1, -1, 330, 331, -1, - 333, 334, -1, 336, 337, 338, -1, -1, -1, 342, + -1, 256, -1, -1, -1, 417, 418, 419, 420, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, 418, 279, -1, -1, 265, -1, 267, + 285, -1, 270, 288, -1, -1, -1, 275, -1, -1, + 295, 279, -1, -1, -1, 300, -1, 302, 303, 304, + 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, + -1, 316, 300, 318, 319, -1, 304, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, 316, 334, + 318, -1, -1, -1, 322, -1, 341, -1, -1, 344, + 345, -1, 330, 331, -1, -1, 334, -1, -1, 337, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, + -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 256, -1, + -1, -1, 417, 418, 419, 420, 264, 265, -1, 267, + -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, + 418, 279, -1, -1, -1, -1, -1, 285, -1, -1, + 288, -1, -1, -1, -1, -1, -1, 295, -1, 261, + -1, 262, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, + 318, 319, 284, -1, 322, -1, -1, 325, -1, 327, + -1, 329, 330, 331, 332, 297, 334, 298, -1, -1, + 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, + 312, -1, -1, -1, -1, 317, -1, -1, -1, 321, + -1, 359, 360, 361, 362, -1, -1, -1, -1, -1, + -1, 333, -1, 371, 336, -1, 338, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 362, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 371, 372, 373, 374, 375, -1, -1, 378, 379, 417, + 418, 382, 383, 384, 385, 386, 387, 388, 389, 390, + -1, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, -1, 261, -1, 418, -1, 265, 420, + 267, -1, 423, 270, -1, 272, 273, -1, 275, -1, + 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, + 287, 288, -1, -1, -1, -1, 293, -1, 295, 296, + 297, -1, -1, 300, -1, 302, -1, 304, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, + 317, 318, -1, -1, 321, 322, 323, -1, -1, -1, + -1, -1, -1, 330, 331, -1, 333, 334, -1, 336, + 337, 338, -1, -1, -1, 342, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 261, -1, 362, -1, 265, -1, 267, + -1, 368, 270, -1, 272, 273, -1, 275, -1, 277, + 377, 279, -1, 281, 282, 283, 284, -1, -1, 287, + 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, + -1, -1, 300, -1, 302, -1, 304, -1, -1, 307, + -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, + 318, 418, -1, 321, 322, 323, -1, -1, -1, -1, + -1, -1, 330, 331, -1, 333, 334, -1, 336, 337, + 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 261, -1, -1, -1, 265, -1, 267, 362, - -1, 270, -1, 272, 273, 368, 275, -1, 277, -1, + -1, -1, 261, -1, 362, -1, 265, -1, 267, -1, + 368, 270, -1, 272, 273, -1, 275, -1, 277, 377, 279, -1, 281, 282, 283, 284, -1, -1, 287, 288, -1, -1, -1, -1, 293, -1, 295, 296, 297, -1, - -1, 300, -1, 302, 261, 304, -1, -1, 307, -1, + -1, 300, -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, 316, 317, 318, - -1, -1, 321, 322, 323, 418, -1, 284, -1, -1, - -1, 330, 331, -1, 333, 334, 261, 336, 337, 338, - 297, -1, -1, 342, -1, 302, -1, -1, 305, -1, - 307, -1, 309, 310, 311, 312, -1, -1, -1, 284, - 317, -1, -1, 362, 321, -1, -1, -1, 325, 368, - -1, -1, 297, -1, 261, -1, 333, 302, -1, 336, - -1, 338, 307, -1, 309, 310, 311, 312, -1, -1, - 315, -1, 317, -1, -1, -1, 321, 284, -1, -1, - 357, -1, -1, -1, 261, 362, -1, -1, 333, -1, - 297, 336, 369, 338, 371, 302, 373, -1, 305, 418, - 307, -1, 309, 310, 311, 312, -1, 284, -1, 386, - 317, -1, -1, -1, 321, -1, -1, 362, 325, -1, - 297, -1, -1, 368, 369, 302, 333, -1, -1, 336, - 307, 338, 309, 310, 311, 312, -1, -1, -1, -1, - 317, 418, -1, -1, 321, -1, -1, -1, 325, -1, - -1, 264, 265, -1, 267, 362, 333, 270, 271, 336, - -1, 338, 275, 276, 277, -1, 279, -1, -1, -1, - -1, -1, 285, -1, -1, 288, -1, -1, -1, -1, - -1, -1, 295, -1, -1, 362, -1, 300, -1, 302, - 303, 304, -1, 306, -1, -1, -1, -1, -1, -1, - 313, -1, -1, 316, -1, 318, 319, -1, -1, 322, - -1, 418, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, - -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, - -1, 418, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, 371, 372, - -1, 374, -1, -1, 377, 378, 379, 380, -1, -1, - -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, - 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, - 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, - 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, - -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, - -1, -1, -1, 300, -1, 302, 303, 304, -1, 306, - -1, -1, -1, -1, -1, -1, 313, -1, -1, 316, - -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, - 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, - -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, 371, -1, -1, 374, -1, -1, - 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, - -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, - -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, - 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, - 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, + 418, -1, 321, 322, 323, -1, -1, -1, -1, -1, + -1, 330, 331, -1, 333, 334, -1, 336, 337, 338, + -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 261, -1, -1, -1, + 265, -1, 267, 362, -1, 270, -1, 272, 273, 368, + 275, -1, 277, -1, 279, -1, 281, 282, 283, 284, + -1, -1, 287, 288, -1, -1, -1, -1, 293, -1, + 295, 296, 297, -1, -1, 300, -1, 302, 261, 304, + -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, + -1, 316, 317, 318, -1, -1, 321, 322, 323, 418, + -1, 284, -1, -1, -1, 330, 331, -1, 333, 334, + -1, 336, 337, 338, 297, -1, -1, 342, -1, 302, + -1, -1, 305, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, -1, 362, 321, -1, + -1, -1, 325, 368, -1, -1, 261, -1, -1, -1, + 333, -1, -1, 336, -1, 338, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 284, + -1, -1, -1, -1, 357, -1, -1, -1, -1, 362, + -1, -1, 297, -1, -1, -1, 369, 302, 371, -1, + 373, -1, 307, 418, 309, 310, 311, 312, -1, -1, + -1, -1, 317, 386, -1, -1, 321, -1, -1, -1, + 325, -1, -1, 264, 265, -1, 267, -1, 333, 270, + 271, 336, -1, 338, 275, 276, 277, -1, 279, -1, + -1, -1, -1, -1, 285, 418, -1, 288, -1, -1, + -1, -1, -1, -1, 295, -1, -1, 362, -1, 300, -1, 302, 303, 304, -1, 306, -1, -1, -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + -1, -1, -1, 418, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, + 371, 372, -1, 374, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 306, -1, -1, -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, - -1, -1, 337, -1, -1, -1, 341, -1, -1, 344, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 371, -1, -1, 374, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, - -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + -1, 300, -1, 302, 303, 304, -1, 306, -1, -1, + -1, -1, -1, -1, 313, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, 368, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, @@ -12056,10 +12096,10 @@ void case_957() 303, 304, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, 332, - -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, + -1, 334, -1, -1, 337, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, + 363, -1, -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, @@ -12073,7 +12113,7 @@ void case_957() -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, + -1, 368, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, @@ -12086,7 +12126,7 @@ void case_957() 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + 361, 362, 363, -1, -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, @@ -12100,7 +12140,7 @@ void case_957() -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, + -1, -1, 367, -1, -1, -1, 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, @@ -12147,142 +12187,181 @@ void case_957() -1, -1, -1, 264, 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, -1, -1, - -1, -1, -1, -1, 295, -1, 261, -1, 263, 300, + -1, -1, -1, -1, 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 316, -1, 318, 319, 284, + -1, -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, 329, 330, - 331, 332, 297, 334, -1, -1, -1, 302, -1, -1, - -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, -1, -1, 321, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, 333, -1, - 371, 336, -1, 338, -1, -1, 377, 378, 379, 380, + 331, 332, -1, 334, -1, -1, -1, -1, -1, -1, + 341, -1, -1, 344, 345, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + 371, -1, -1, -1, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, -1, -1, - -1, 392, 393, -1, -1, -1, -1, 362, -1, -1, - -1, -1, -1, 368, 369, -1, -1, -1, -1, -1, - -1, 263, -1, 265, -1, 267, 417, 418, 270, 420, - 272, 273, -1, 275, -1, 277, -1, 279, -1, 281, - 282, 283, -1, -1, -1, 287, 288, -1, -1, -1, - -1, 293, -1, 295, 296, -1, -1, -1, 300, -1, - -1, -1, 304, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 315, 316, -1, 318, -1, -1, -1, - 322, 323, -1, -1, -1, -1, -1, -1, 330, 331, - 264, 265, 334, 267, -1, 337, 270, 271, -1, -1, - 342, 275, 276, 277, -1, 279, -1, -1, -1, -1, - -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, - -1, 295, 364, 365, -1, -1, 300, -1, 302, 303, - 304, -1, -1, -1, -1, 377, -1, -1, -1, -1, - -1, -1, 316, -1, 318, 319, -1, -1, 322, -1, - -1, 325, -1, 327, -1, 329, 330, 331, 332, -1, - 334, -1, -1, 337, -1, -1, -1, -1, -1, -1, - 265, -1, 267, -1, -1, 270, 418, -1, -1, -1, - 275, -1, -1, -1, 279, 359, 360, 361, 362, -1, - -1, -1, -1, 288, 265, -1, 267, 371, -1, 270, - 295, 272, 273, -1, 275, 300, 277, -1, 279, 304, + -1, 392, 393, -1, -1, -1, -1, -1, -1, 264, + 265, -1, 267, -1, -1, 270, 271, -1, -1, -1, + 275, 276, 277, -1, 279, -1, 417, 418, 419, 420, + 285, -1, -1, 288, -1, -1, -1, -1, -1, -1, + 295, -1, -1, -1, -1, 300, -1, 302, 303, 304, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 316, -1, 318, 319, -1, -1, 322, -1, -1, + 325, -1, 327, -1, 329, 330, 331, 332, -1, 334, + -1, -1, -1, -1, -1, -1, 341, -1, -1, 344, + 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, 371, -1, -1, -1, + -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, + -1, 386, -1, -1, -1, -1, -1, 392, 393, -1, + -1, -1, -1, -1, -1, 264, 265, -1, 267, -1, + -1, 270, 271, -1, -1, -1, 275, 276, 277, -1, + 279, -1, 417, 418, 419, 420, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, 261, -1, + 263, 300, -1, 302, 303, 304, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 316, -1, 318, + 319, 284, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, 297, 334, -1, -1, -1, 302, + -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + 333, -1, 371, 336, -1, 338, -1, -1, 377, 378, + 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, + -1, -1, -1, 392, 393, -1, -1, -1, -1, 362, + -1, -1, -1, -1, -1, 368, 369, -1, -1, -1, + -1, -1, -1, 263, -1, 265, -1, 267, 417, 418, + 270, 420, 272, 273, -1, 275, -1, 277, -1, 279, + -1, 281, 282, 283, -1, -1, -1, 287, 288, -1, + -1, -1, -1, 293, -1, 295, 296, -1, -1, -1, + 300, -1, -1, -1, 304, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 315, 316, -1, 318, -1, + -1, -1, 322, 323, -1, -1, -1, -1, -1, -1, + 330, 331, 264, 265, 334, 267, -1, 337, 270, 271, + -1, -1, 342, 275, 276, 277, -1, 279, -1, -1, + -1, -1, -1, 285, -1, -1, 288, -1, -1, -1, + -1, -1, -1, 295, 364, 365, -1, -1, 300, -1, + 302, 303, 304, -1, -1, -1, -1, 377, -1, -1, + -1, -1, -1, -1, 316, -1, 318, 319, -1, -1, + 322, -1, -1, 325, -1, 327, -1, 329, 330, 331, + 332, -1, 334, -1, -1, 337, -1, -1, -1, -1, + -1, -1, 265, -1, 267, -1, -1, 270, 418, 272, + -1, -1, 275, -1, -1, -1, 279, 359, 360, 361, + 362, -1, -1, -1, -1, 288, 265, -1, 267, 371, + -1, 270, 295, 272, 273, -1, 275, 300, 277, 302, + 279, 304, 281, 282, 283, -1, -1, -1, 287, 288, + -1, -1, -1, 316, 293, 318, 295, 296, -1, 322, + 323, 300, -1, -1, -1, 304, -1, 330, 331, -1, + -1, 334, -1, -1, 337, 417, 418, 316, -1, 318, + -1, -1, -1, 322, 323, -1, -1, -1, -1, -1, + -1, 330, 331, -1, 265, 334, 267, -1, 337, 270, + -1, 272, 273, 342, 275, -1, 277, -1, 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, -1, -1, - -1, 316, 293, 318, 295, 296, -1, 322, -1, 300, - -1, -1, -1, 304, -1, 330, 331, -1, -1, 334, - -1, -1, 337, 417, 418, 316, -1, 318, -1, -1, - -1, 322, 323, -1, -1, -1, -1, -1, -1, 330, - 331, -1, 265, 334, 267, -1, 337, 270, 363, 272, - 273, 342, 275, -1, 277, -1, 279, -1, 281, 282, - 283, -1, -1, -1, 287, 288, -1, -1, -1, -1, - 293, -1, 295, 296, -1, -1, -1, 300, -1, -1, - -1, 304, -1, -1, -1, -1, 377, -1, -1, -1, - -1, -1, -1, 316, -1, 318, -1, -1, -1, 322, - 323, -1, -1, 418, -1, -1, -1, 330, 331, -1, - -1, 334, -1, -1, 337, -1, 265, -1, 267, 342, - -1, 270, -1, -1, 273, -1, 275, 418, 277, -1, - 279, -1, 281, 282, 283, -1, -1, -1, 287, 288, - -1, -1, -1, -1, 293, -1, 295, -1, 265, -1, - 267, 300, -1, 270, -1, 304, 273, -1, 275, -1, - 277, -1, 279, -1, 281, 282, 283, 316, -1, 318, - 287, 288, -1, 322, -1, -1, 293, -1, 295, -1, - -1, 330, 331, 300, -1, 334, -1, 304, 337, -1, - -1, -1, 265, 342, 267, 418, -1, 270, -1, 316, - -1, 318, 275, -1, -1, 322, 279, -1, -1, -1, - -1, -1, -1, 330, 331, 288, -1, 334, -1, -1, - 337, -1, 295, -1, 265, 342, 267, 300, 377, 270, - -1, 304, -1, 306, 275, 308, -1, -1, 279, -1, - 313, -1, -1, 316, -1, 318, -1, 288, -1, 322, - -1, -1, 325, -1, 295, -1, -1, 330, 331, 300, - -1, 334, -1, 304, 337, 306, -1, 308, 265, 418, - 267, -1, 313, 270, -1, 316, -1, 318, 275, -1, - -1, 322, 279, -1, 325, -1, -1, -1, -1, 330, - 331, 288, -1, 334, -1, -1, 337, -1, 295, 372, - 265, 418, 267, 300, -1, 270, -1, 304, -1, 306, - 275, 308, -1, -1, 279, -1, 313, -1, -1, 316, - -1, 318, -1, 288, -1, 322, -1, -1, 325, 370, + -1, -1, 293, -1, 295, 296, -1, -1, -1, 300, + -1, -1, -1, 304, -1, -1, -1, -1, 377, -1, + -1, -1, -1, -1, -1, 316, -1, 318, -1, -1, + -1, 322, 323, -1, -1, 418, -1, -1, -1, 330, + 331, -1, -1, 334, -1, -1, 337, -1, 265, -1, + 267, 342, -1, 270, -1, -1, 273, -1, 275, 418, + 277, -1, 279, -1, 281, 282, 283, -1, -1, -1, + 287, 288, -1, -1, -1, -1, 293, -1, 295, -1, + 265, -1, 267, 300, -1, 270, -1, 304, 273, -1, + 275, -1, 277, -1, 279, -1, 281, 282, 283, 316, + -1, 318, 287, 288, -1, 322, -1, -1, 293, -1, 295, -1, -1, 330, 331, 300, -1, 334, -1, 304, - 337, 306, -1, -1, -1, 418, -1, -1, 313, -1, - -1, 316, -1, 318, -1, -1, -1, 322, -1, -1, - 325, -1, -1, -1, -1, 330, 331, -1, -1, 334, - -1, 265, 337, 267, -1, -1, 270, 418, -1, -1, - -1, 275, -1, -1, -1, 279, -1, -1, -1, 283, - 265, -1, 267, -1, 288, 270, -1, -1, -1, 293, - 275, 295, -1, -1, 279, -1, 300, -1, -1, -1, - 304, 305, -1, 288, -1, -1, -1, -1, -1, -1, - 295, 418, 316, -1, 318, 300, -1, -1, 322, 304, - -1, -1, -1, -1, -1, -1, 330, 331, -1, -1, - 334, 316, -1, 318, 265, -1, 267, 322, -1, 270, - -1, -1, -1, 418, 275, 330, 331, -1, 279, 334, - -1, 265, 337, 267, -1, -1, 270, 288, -1, -1, - -1, 275, -1, -1, 295, 279, -1, -1, -1, 300, - -1, -1, -1, 304, 288, -1, -1, -1, -1, -1, - -1, 295, -1, -1, -1, 316, 300, 318, -1, -1, - 304, 322, -1, -1, -1, -1, -1, -1, -1, 330, - 331, -1, 316, 334, 318, 265, 337, 267, 322, -1, - 270, -1, -1, -1, 418, 275, 330, 331, -1, 279, - 334, -1, -1, 337, -1, -1, -1, -1, 288, -1, - -1, -1, -1, 418, -1, 295, -1, -1, -1, -1, - 300, -1, -1, 261, 304, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 272, -1, 316, -1, 318, 277, - -1, -1, 322, 281, -1, -1, 284, -1, -1, -1, - 330, 331, -1, -1, 334, -1, -1, 337, 296, 297, - -1, -1, -1, 301, 302, -1, -1, 418, -1, 307, - -1, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, -1, -1, 321, 418, 323, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 333, -1, 335, 336, 261, - 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, - 272, -1, -1, -1, -1, 277, -1, -1, -1, 281, - -1, -1, 284, -1, 362, -1, -1, -1, -1, -1, - 368, 369, -1, -1, 296, 297, -1, -1, 418, 301, - 302, -1, 261, -1, -1, 307, -1, 309, 310, 311, - 312, -1, -1, 272, -1, 317, -1, -1, 277, 321, - -1, 323, 281, -1, -1, 284, -1, -1, -1, -1, - -1, 333, -1, -1, 336, -1, 338, 296, 297, -1, - 342, -1, 301, 302, -1, 261, -1, -1, 307, -1, - 309, 310, 311, 312, -1, -1, 272, -1, 317, -1, - 362, 277, 321, -1, 323, 281, 368, 369, 284, -1, - -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, - 296, 297, -1, 342, -1, 301, 302, 261, -1, -1, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, 362, -1, 321, -1, 323, -1, 368, - 284, -1, -1, -1, -1, -1, -1, 333, -1, -1, - 336, -1, 338, 297, -1, 261, 342, 263, 302, -1, - -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, - -1, 315, -1, 317, -1, -1, 362, 321, 284, -1, - -1, -1, 368, -1, -1, -1, -1, -1, -1, 333, - -1, 297, 336, 261, 338, -1, 302, -1, -1, -1, - -1, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, -1, -1, 321, 284, -1, 362, -1, - -1, -1, -1, 261, 368, -1, -1, 333, -1, 297, - 336, -1, 338, -1, 302, -1, -1, -1, -1, 307, - -1, 309, 310, 311, 312, -1, 284, -1, -1, 317, - -1, -1, -1, 321, -1, -1, 362, -1, -1, 297, - -1, -1, 368, 301, 302, 333, 261, -1, 336, 307, - 338, 309, 310, 311, 312, -1, -1, -1, -1, 317, - -1, -1, -1, 321, -1, -1, -1, -1, -1, 284, - -1, -1, -1, -1, 362, 333, 364, 365, 336, -1, - 338, -1, 297, -1, -1, -1, -1, 302, -1, -1, + 337, -1, -1, -1, 265, 342, 267, 418, -1, 270, + -1, 316, -1, 318, 275, -1, -1, 322, 279, -1, + -1, -1, -1, -1, -1, 330, 331, 288, -1, 334, + -1, -1, 337, -1, 295, -1, 265, 342, 267, 300, + 377, 270, -1, 304, -1, 306, 275, 308, -1, -1, + 279, -1, 313, -1, -1, 316, -1, 318, -1, 288, + -1, 322, -1, -1, 325, -1, 295, -1, -1, 330, + 331, 300, -1, 334, -1, 304, 337, 306, -1, 308, + 265, 418, 267, -1, 313, 270, -1, 316, -1, 318, + 275, -1, -1, 322, 279, -1, 325, -1, -1, -1, + -1, 330, 331, 288, -1, 334, -1, -1, 337, -1, + 295, 372, 265, 418, 267, 300, -1, 270, -1, 304, + -1, 306, 275, 308, -1, -1, 279, -1, 313, -1, + -1, 316, -1, 318, -1, 288, -1, 322, -1, -1, + 325, 370, 295, -1, -1, 330, 331, 300, -1, 334, + -1, 304, 337, 306, -1, -1, -1, 418, -1, -1, + 313, -1, -1, 316, -1, 318, -1, -1, -1, 322, + -1, -1, 325, -1, -1, -1, -1, 330, 331, -1, + -1, 334, -1, 265, 337, 267, -1, -1, 270, 418, + -1, -1, -1, 275, -1, -1, -1, 279, -1, -1, + -1, 283, 265, -1, 267, -1, 288, 270, -1, -1, + -1, 293, 275, 295, -1, -1, 279, -1, 300, -1, + -1, -1, 304, 305, -1, 288, -1, -1, -1, -1, + -1, -1, 295, 418, 316, -1, 318, 300, -1, -1, + 322, 304, -1, -1, -1, -1, -1, -1, 330, 331, + -1, -1, 334, 316, -1, 318, 265, -1, 267, 322, + -1, 270, -1, -1, -1, 418, 275, 330, 331, -1, + 279, 334, -1, 265, 337, 267, -1, -1, 270, 288, + -1, -1, -1, 275, -1, -1, 295, 279, -1, -1, + -1, 300, -1, -1, -1, 304, 288, -1, -1, -1, + 363, -1, -1, 295, -1, -1, -1, 316, 300, 318, + -1, -1, 304, 322, -1, -1, -1, -1, -1, -1, + -1, 330, 331, -1, 316, 334, 318, 265, 337, 267, + 322, -1, 270, -1, -1, -1, 418, 275, 330, 331, + -1, 279, 334, -1, -1, 337, -1, -1, -1, -1, + 288, 265, -1, 267, -1, 418, 270, 295, -1, -1, + -1, 275, 300, -1, -1, 279, 304, -1, -1, -1, + -1, -1, -1, -1, 288, -1, -1, -1, 316, -1, + 318, 295, -1, -1, 322, -1, 300, -1, -1, -1, + 304, -1, 330, 331, -1, 261, 334, -1, -1, 337, + -1, -1, 316, -1, 318, -1, 272, -1, 322, 418, + -1, 277, -1, -1, -1, 281, 330, 331, 284, -1, + 334, -1, -1, 337, -1, -1, 418, -1, -1, -1, + 296, 297, -1, -1, -1, 301, 302, -1, 261, -1, + -1, 307, -1, 309, 310, 311, 312, -1, -1, 272, + -1, 317, -1, -1, 277, 321, -1, 323, 281, -1, + -1, 284, -1, -1, -1, -1, -1, 333, -1, 335, + 336, -1, 338, 296, 297, -1, 342, -1, 301, 302, + 418, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, 362, -1, 321, -1, + 323, 261, 368, 369, 418, -1, -1, -1, -1, -1, + 333, -1, 272, 336, -1, 338, -1, 277, -1, 342, + -1, 281, -1, -1, 284, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 296, 297, -1, 362, + -1, 301, 302, -1, 261, 368, 369, 307, -1, 309, + 310, 311, 312, -1, -1, 272, -1, 317, -1, -1, + 277, 321, -1, 323, 281, -1, -1, 284, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, 296, + 297, -1, 342, -1, 301, 302, 261, -1, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, 362, -1, 321, -1, 323, -1, 368, 284, + -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, + -1, 338, 297, -1, 261, 342, -1, 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, - -1, -1, 317, -1, 362, -1, 321, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, - -1, 336, -1, 338, -1, -1, -1, -1, -1, -1, + -1, -1, 317, -1, -1, 362, 321, 284, -1, -1, + -1, 368, -1, -1, -1, -1, -1, -1, 333, -1, + 297, 336, 261, 338, -1, 302, -1, -1, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, -1, -1, + 317, -1, -1, -1, 321, 284, -1, 362, -1, 364, + 365, -1, -1, 368, -1, -1, 333, -1, 297, 336, + 261, 338, 263, 302, -1, -1, -1, -1, 307, -1, + 309, 310, 311, 312, -1, -1, 315, -1, 317, -1, + -1, -1, 321, 284, -1, 362, -1, 364, 365, -1, + -1, 368, -1, -1, 333, -1, 297, 336, 261, 338, + -1, 302, -1, -1, -1, -1, 307, -1, 309, 310, + 311, 312, -1, -1, -1, -1, 317, -1, -1, -1, + 321, 284, -1, 362, -1, -1, -1, -1, 261, 368, + 263, -1, 333, -1, 297, 336, -1, 338, -1, 302, + -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, 284, -1, -1, 317, -1, -1, -1, 321, -1, + -1, 362, -1, -1, 297, -1, -1, 368, 261, 302, + 333, -1, -1, 336, 307, 338, 309, 310, 311, 312, + -1, -1, 315, -1, 317, -1, -1, -1, 321, -1, + -1, 284, -1, -1, -1, -1, -1, -1, 261, 362, + 333, 364, 365, 336, 297, 338, -1, -1, 301, 302, + -1, -1, -1, -1, 307, -1, 309, 310, 311, 312, + -1, 284, -1, -1, 317, -1, -1, -1, 321, 362, + -1, -1, -1, -1, 297, -1, -1, -1, -1, 302, + 333, -1, -1, 336, 307, 338, 309, 310, 311, 312, + -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, + 333, -1, -1, 336, -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 362, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, }; -#line 6425 "cs-parser.jay" +#line 6459 "cs-parser.jay" // // A class used to hold info about an operator declarator @@ -12383,11 +12462,9 @@ DeclSpace pop_current_class () MemberName MakeName (MemberName class_name) { - Namespace ns = current_namespace.NS; - if (current_container == module) { - if (ns.Name.Length != 0) - return new MemberName (ns.MemberName, class_name); + if (current_namespace.MemberName != MemberName.Null) + return new MemberName (current_namespace.NS.MemberName, class_name); else return class_name; } else { @@ -12608,12 +12685,12 @@ void start_anonymous (bool isLambda, ParametersCompiled parameters, bool isAsync if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (loc, "lambda expressions"); - current_anonymous_method = new LambdaExpression (isAsync, loc); + current_anonymous_method = new LambdaExpression (loc); } else { if (lang_version == LanguageVersion.ISO_1) FeatureIsNotAvailable (loc, "anonymous methods"); - current_anonymous_method = new AnonymousMethodExpression (isAsync, loc); + current_anonymous_method = new AnonymousMethodExpression (loc); } async_block = isAsync; @@ -12645,7 +12722,12 @@ AnonymousMethodExpression end_anonymous (ParametersBlock anon_block) void Error_SyntaxError (int token) { - Error_SyntaxError (0, token, "Unexpected symbol"); + Error_SyntaxError (0, token); +} + +void Error_SyntaxError (int error_code, int token) +{ + Error_SyntaxError (error_code, token, "Unexpected symbol"); } void Error_SyntaxError (int error_code, int token, string msg) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index c8a844e2d5..fda6b6bec3 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -428,19 +428,26 @@ extern_alias_directive { var lt = (Tokenizer.LocatedToken) $2; string s = lt.Value; - if (s != "alias"){ + 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) $3; - current_namespace.AddUsingExternalAlias (lt.Value, lt.Location, report); - ubag.AddExternAlias (GetLocation ($1), GetLocation ($2), lt, GetLocation ($4)); + if (lang_version == LanguageVersion.ISO_1) + FeatureIsNotAvailable (lt.Location, "external alias"); + + lt = (Tokenizer.LocatedToken) $3; + if (lt.Value == QualifiedAliasMember.GlobalAlias) { + RootNamespace.Error_GlobalNamespaceRedefined (report, lt.Location); + } + + var na = new UsingExternAlias (new SimpleMemberName (lt.Value, lt.Location), GetLocation ($1)); + current_namespace.AddUsing (na); + + lbag.AddLocation (na, GetLocation ($2), GetLocation ($4)); } } | EXTERN_ALIAS error { - syntax_error (GetLocation ($1), "`alias' expected"); // TODO: better + Error_SyntaxError (yyToken); } ; @@ -450,20 +457,23 @@ using_directives ; using_directive - : using_alias_directive - { - if (doc_support) - Lexer.doc_state = XmlCommentState.Allowed; - } - | using_namespace_directive + : using_namespace { if (doc_support) Lexer.doc_state = XmlCommentState.Allowed; } ; -using_alias_directive - : USING IDENTIFIER ASSIGN namespace_or_type_name SEMICOLON +using_namespace + : USING namespace_or_type_expr SEMICOLON + { + var un = new UsingNamespace ((ATypeNameExpression) $2, GetLocation ($1)); + current_namespace.AddUsing (un); + + ubag.AddUsing (GetLocation ($1), (ATypeNameExpression) $2, GetLocation ($3)); + lbag.AddLocation (un, GetLocation ($3)); + } + | USING IDENTIFIER ASSIGN namespace_or_type_expr SEMICOLON { var lt = (Tokenizer.LocatedToken) $2; if (lang_version != LanguageVersion.ISO_1 && lt.Value == "global") { @@ -471,22 +481,17 @@ using_alias_directive "An alias named `global' will not be used when resolving `global::'. The global namespace will be used instead"); } - current_namespace.AddUsingAlias (lt.Value, (MemberName) $4, GetLocation ($1)); - ubag.AddUsingAlias (GetLocation ($1), lt, GetLocation ($3), (MemberName) $4, GetLocation ($5)); - } + var un = new UsingAliasNamespace (new SimpleMemberName (lt.Value, lt.Location), (ATypeNameExpression) $4, GetLocation ($1)); + current_namespace.AddUsing (un); + ubag.AddUsingAlias (GetLocation ($1), lt, GetLocation ($3), (ATypeNameExpression) $4, GetLocation ($5)); + + lbag.AddLocation (un, GetLocation ($3), GetLocation ($5)); + } | USING error { Error_SyntaxError (yyToken); $$ = null; - } - ; - -using_namespace_directive - : USING namespace_name SEMICOLON - { - current_namespace.AddUsing ((MemberName) $2, GetLocation ($1)); - ubag.AddUsing (GetLocation ($1), (MemberName) $2, GetLocation ($3)); - } + } ; // @@ -495,10 +500,10 @@ using_namespace_directive // detach them // namespace_declaration - : opt_attributes NAMESPACE qualified_identifier + : opt_attributes NAMESPACE namespace_name { Attributes attrs = (Attributes) $1; - MemberName name = (MemberName) $3; + var name = (MemberName) $3; if (attrs != null) { bool valid_global_attrs = true; if ((current_namespace.DeclarationFound || current_namespace != file.NamespaceContainer)) { @@ -545,13 +550,13 @@ namespace_declaration } ; -qualified_identifier +namespace_name : IDENTIFIER { var lt = (Tokenizer.LocatedToken) $1; $$ = new MemberName (lt.Value, lt.Location); } - | qualified_identifier DOT IDENTIFIER + | namespace_name DOT IDENTIFIER { var lt = (Tokenizer.LocatedToken) $3; $$ = new MemberName ((MemberName) $1, lt.Value, lt.Location) { @@ -575,18 +580,6 @@ opt_comma | COMMA ; -namespace_name - : namespace_or_type_name - { - MemberName name = (MemberName) $1; - - if (name.TypeArguments != null) - syntax_error (lexer.Location, "namespace name expected"); - - $$ = name; - } - ; - opt_using_directives : /* empty */ | using_directives @@ -776,26 +769,18 @@ attribute opt_attribute_arguments { --lexer.parsing_block; - MemberName mname = (MemberName) $1; - if (mname.IsGeneric) { - report.Error (404, lexer.Location, - "'<' unexpected: attributes cannot be generic"); + + var tne = (ATypeNameExpression) $1; + if (tne.HasTypeArguments) { + report.Error (404, tne.Location, "Attributes cannot be generic"); } - Arguments [] arguments = (Arguments []) $3; - ATypeNameExpression expr = mname.GetTypeExpression (); - $$ = new Attribute (current_attr_target, expr, arguments, mname.Location, lexer.IsEscapedIdentifier (mname)); - if (arguments != null) { - attributeArgumentCommas.Insert (0, savedAttrParenOpenLocation); - attributeArgumentCommas.Add (savedAttrParenCloseLocation); - lbag.AddLocation ($$, attributeArgumentCommas); - attributeArgumentCommas.Clear (); - } + $$ = new Attribute (current_attr_target, tne, (Arguments[]) $3, GetLocation ($1), lexer.IsEscapedIdentifier (tne)); } ; attribute_name - : namespace_or_type_name + : namespace_or_type_expr ; opt_attribute_arguments @@ -1293,7 +1278,7 @@ method_header current_local_parameters = (ParametersCompiled) $7; GenericMethod generic = null; - if (name.TypeArguments != null) { + if (name.TypeParameters != null) { generic = new GenericMethod (current_namespace, current_class, name, (FullNamedExpression) $3, current_local_parameters); @@ -1337,12 +1322,12 @@ method_header MemberName name = (MemberName) $6; current_local_parameters = (ParametersCompiled) $9; - if ($11 != null && name.TypeArguments == null) + if ($11 != null && name.TypeParameters == null) report.Error (80, lexer.Location, "Constraints are not allowed on non-generic declarations"); GenericMethod generic = null; - if (name.TypeArguments != null) { + if (name.TypeParameters != null) { generic = new GenericMethod (current_namespace, current_class, name, new TypeExpression (compiler.BuiltinTypes.Void, GetLocation ($4)), current_local_parameters); @@ -2208,23 +2193,12 @@ constructor_declarator OPEN_PARENS opt_formal_parameter_list CLOSE_PARENS { valid_param_mod = 0; - current_local_parameters = (ParametersCompiled) $6; + current_local_parameters = (ParametersCompiled) $6; - // - // start block here, so possible anonymous methods inside - // constructor initializer can get correct parent block - // - start_block (lexer.Location); - } - opt_constructor_initializer - { var lt = (Tokenizer.LocatedToken) $3; var mods = (Modifiers) $2; - ConstructorInitializer ci = (ConstructorInitializer) $9; + var c = new Constructor (current_class, lt.Value, mods, (Attributes) $1, current_local_parameters, lt.Location); - Constructor c = new Constructor (current_class, lt.Value, mods, - (Attributes) $1, current_local_parameters, ci, lt.Location); - if (lt.Value != current_container.MemberName.Name) { report.Error (1520, c.Location, "Class, struct, or interface method must have a return type"); } else if ((mods & Modifiers.STATIC) != 0) { @@ -2233,16 +2207,32 @@ constructor_declarator "`{0}': static constructor cannot have an access modifier", c.GetSignatureForError ()); } - if (ci != null) { + } + + lbag.AddMember (c, mod_locations, GetLocation ($5), GetLocation ($7)); + $$ = c; + + // + // start block here, so possible anonymous methods inside + // constructor initializer can get correct parent block + // + start_block (lexer.Location); + } + opt_constructor_initializer + { + if ($9 != null) { + var c = (Constructor) $8; + c.Initializer = (ConstructorInitializer) $9; + + if (c.IsStatic) { report.Error (514, c.Location, "`{0}': static constructor cannot have an explicit `this' or `base' constructor call", c.GetSignatureForError ()); - } } - + lbag.AddMember (c, GetModifierLocations (), GetLocation ($5), GetLocation ($7)); - $$ = c; + $$ = $8; } ; @@ -2324,7 +2314,7 @@ event_declaration current_event_field = new EventField (current_class, (FullNamedExpression) $4, (Modifiers) $2, (MemberName) $5, (Attributes) $1); current_container.AddEvent (current_event_field); - if (current_event_field.MemberName.Left != null) { + if (current_event_field.MemberName.ExplicitInterface != null) { report.Error (71, current_event_field.Location, "`{0}': An explicit interface implementation of an event must use property syntax", current_event_field.GetSignatureForError ()); } @@ -2709,33 +2699,33 @@ opt_nullable } ; -namespace_or_type_name +namespace_or_type_expr : member_name | qualified_alias_member IDENTIFIER opt_type_argument_list { var lt1 = (Tokenizer.LocatedToken) $1; var lt2 = (Tokenizer.LocatedToken) $2; - $$ = new MemberName (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); + $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); + lbag.AddLocation ($$, GetLocation ($2)); } ; member_name - : type_name - | namespace_or_type_name DOT IDENTIFIER opt_type_argument_list + : simple_name_expr + | namespace_or_type_expr DOT IDENTIFIER opt_type_argument_list { var lt = (Tokenizer.LocatedToken) $3; - $$ = new MemberName ((MemberName) $1, lt.Value, (TypeArguments) $4, lt.Location) { - DotLocation = GetLocation ($2) - }; + $$ = new MemberAccess ((Expression) $1, lt.Value, (TypeArguments) $4, lt.Location); + lbag.AddLocation ($$, GetLocation ($2)); } ; -type_name +simple_name_expr : IDENTIFIER opt_type_argument_list { var lt = (Tokenizer.LocatedToken) $1; - $$ = new MemberName (lt.Value, (TypeArguments)$2, lt.Location); + $$ = new SimpleName (lt.Value, (TypeArguments)$2, lt.Location); } ; @@ -2791,7 +2781,7 @@ type_declaration_name { lexer.parsing_generic_declaration = false; var lt = (Tokenizer.LocatedToken) $1; - $$ = new MemberName (lt.Value, (TypeArguments)$3, lt.Location); + $$ = new MemberName (lt.Value, (TypeParameters)$3, lt.Location); } ; @@ -2799,7 +2789,7 @@ member_declaration_name : method_declaration_name { MemberName mn = (MemberName)$1; - if (mn.TypeArguments != null) + if (mn.TypeParameters != null) syntax_error (mn.Location, string.Format ("Member `{0}' cannot declare type arguments", mn.GetSignatureForError ())); } @@ -2811,7 +2801,7 @@ method_declaration_name { lexer.parsing_generic_declaration = false; var lt = (Tokenizer.LocatedToken) $2; - $$ = new MemberName ((MemberName) $1, lt.Value, (TypeArguments) $3, lt.Location); + $$ = new MemberName (lt.Value, (TypeParameters) $3, (ATypeNameExpression) $1, lt.Location); } ; @@ -2824,7 +2814,7 @@ indexer_declaration_name | explicit_interface THIS { lexer.parsing_generic_declaration = false; - $$ = new MemberName ((MemberName) $1, TypeContainer.DefaultIndexerName, null, GetLocation ($2)); + $$ = new MemberName (TypeContainer.DefaultIndexerName, null, (ATypeNameExpression) $1, GetLocation ($2)); } ; @@ -2832,21 +2822,21 @@ explicit_interface : IDENTIFIER opt_type_argument_list DOT { var lt = (Tokenizer.LocatedToken) $1; - $$ = new MemberName (lt.Value, (TypeArguments) $2, lt.Location); + $$ = new SimpleName (lt.Value, (TypeArguments) $2, lt.Location); lbag.AddLocation ($$, GetLocation ($3)); } | qualified_alias_member IDENTIFIER opt_type_argument_list DOT { var lt1 = (Tokenizer.LocatedToken) $1; var lt2 = (Tokenizer.LocatedToken) $2; - - $$ = new MemberName (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); + + $$ = new QualifiedAliasMember (lt1.Value, lt2.Value, (TypeArguments) $3, lt1.Location); lbag.AddLocation ($$, GetLocation ($4)); } | explicit_interface IDENTIFIER opt_type_argument_list DOT { var lt = (Tokenizer.LocatedToken) $2; - $$ = new MemberName ((MemberName) $1, lt.Value, (TypeArguments) $3, lt.Location); + $$ = new MemberAccess ((ATypeNameExpression) $1, lt.Value, (TypeArguments) $3, lt.Location); lbag.AddLocation ($$, GetLocation ($4)); } ; @@ -2866,16 +2856,16 @@ opt_type_parameter_list type_parameters : type_parameter { - TypeArguments type_args = new TypeArguments (); - type_args.Add ((FullNamedExpression)$1); - $$ = type_args; + var tparams = new TypeParameters (); + tparams.Add ((TypeParameter)$1); + $$ = tparams; } | type_parameters COMMA type_parameter { - TypeArguments type_args = (TypeArguments) $1; - type_args.Add ((FullNamedExpression)$3); - $$ = type_args; - lbag.AppendTo (type_args, GetLocation ($2)); + var tparams = (TypeParameters) $1; + tparams.Add ((TypeParameter)$3); + $$ = tparams; + lbag.AddLocation ($3, GetLocation ($3)); } ; @@ -2883,10 +2873,7 @@ type_parameter : opt_attributes opt_type_parameter_variance IDENTIFIER { var lt = (Tokenizer.LocatedToken)$3; - var variance = (Variance) $2; - $$ = new TypeParameterName (lt.Value, (Attributes)$1, variance, lt.Location); - if (variance != Variance.None) - lbag.AddLocation ($$, savedLocation); + $$ = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)$1, (Variance) $2); } | error { @@ -2895,7 +2882,7 @@ type_parameter else Error_SyntaxError (yyToken); - $$ = new TypeParameterName ("", null, lexer.Location); + $$ = new TypeParameter (MemberName.Null, null, Variance.None); } ; @@ -2956,22 +2943,21 @@ type_expression_or_array ; type_expression - : namespace_or_type_name opt_nullable + : namespace_or_type_expr opt_nullable { - MemberName name = (MemberName) $1; - if ($2 != null) { - $$ = new ComposedCast (name.GetTypeExpression (), (ComposedTypeSpecifier) $2); + $$ = new ComposedCast ((ATypeNameExpression) $1, (ComposedTypeSpecifier) $2); } else { - if (name.Left == null && name.Name == "var") - $$ = new VarExpr (name.Location); + var sn = $1 as SimpleName; + if (sn != null && sn.Name == "var") + $$ = new VarExpr (sn.Location); else - $$ = name.GetTypeExpression (); + $$ = $1; } } - | namespace_or_type_name pointer_stars + | namespace_or_type_expr pointer_stars { - $$ = new ComposedCast (((MemberName) $1).GetTypeExpression (), (ComposedTypeSpecifier) $2); + $$ = new ComposedCast ((ATypeNameExpression) $1, (ComposedTypeSpecifier) $2); } | builtin_types opt_nullable { @@ -3736,16 +3722,16 @@ unbound_type_name DotLocation = GetLocation ($2) }; } - | namespace_or_type_name DOT identifier_inside_body generic_dimension + | namespace_or_type_expr DOT identifier_inside_body generic_dimension { - var te = ((MemberName) $1).GetTypeExpression (); - if (te.HasTypeArguments) + var tne = (ATypeNameExpression) $1; + if (tne.HasTypeArguments) Error_TypeExpected (GetLocation ($4)); var lt = (Tokenizer.LocatedToken) $3; - $$ = new MemberAccess (te, lt.Value, (int) $4, lt.Location) { + $$ = new MemberAccess (tne, lt.Value, (int) $4, lt.Location) { DotLocation = GetLocation ($2) - }; + }; } ; @@ -5103,7 +5089,7 @@ statement_expression ExpressionStatement s = $1 as ExpressionStatement; if (s == null) { Expression.Error_InvalidExpressionStatement (report, GetLocation ($1)); - $$ = new InvalidStatementExpression ($1 as Expression); + $$ = new StatementErrorExpression ($1 as Expression); } else { $$ = new StatementExpression (s); } @@ -5152,9 +5138,10 @@ if_statement if ($7 is EmptyStatement) Warning_EmptyStatement (GetLocation ($7)); } - | IF open_parens_any boolean_expression error { - var eloc = GetLocation ($3); - report.Error (1026, eloc, "Expected a ')'"); + | IF open_parens_any boolean_expression error + { + Error_SyntaxError (yyToken); + $$ = new If ((BooleanExpression) $3, null, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($2)); } @@ -5171,6 +5158,13 @@ switch_statement end_block (GetLocation ($8)); lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4), GetLocation ($5), GetLocation ($8)); } + | SWITCH open_parens_any expression error + { + Error_SyntaxError (yyToken); + + $$ = new Switch ((Expression) $3, null, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } ; opt_switch_sections @@ -5199,7 +5193,7 @@ switch_sections } | error { - Error_SyntaxError (yyToken); + Error_SyntaxError (yyToken); $$ = new List (); } ; @@ -5260,24 +5254,30 @@ while_statement $$ = new While ((BooleanExpression) $3, (Statement) $5, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); } + | WHILE open_parens_any boolean_expression error + { + Error_SyntaxError (yyToken); + + $$ = new While ((BooleanExpression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } ; do_statement - : DO embedded_statement - WHILE open_parens_any boolean_expression CLOSE_PARENS SEMICOLON + : DO embedded_statement WHILE open_parens_any boolean_expression CLOSE_PARENS SEMICOLON { $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($3), GetLocation ($4), GetLocation ($6), GetLocation ($7)); } | DO embedded_statement error { - var loc = GetLocation ($1); - report.Error (-100, loc, "Expected `while'"); - $$ = new Do ((Statement) $2, null, loc); + Error_SyntaxError (yyToken); + $$ = new Do ((Statement) $2, null, GetLocation ($1)); } - | DO embedded_statement - WHILE open_parens_any boolean_expression error + | DO embedded_statement WHILE open_parens_any boolean_expression error { + Error_SyntaxError (yyToken); + $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($3), GetLocation ($4)); } @@ -5383,10 +5383,35 @@ statement_expression_list ; foreach_statement - : FOREACH open_parens_any type IN expression CLOSE_PARENS + : FOREACH open_parens_any type error { report.Error (230, GetLocation ($1), "Type and identifier are both required in a foreach statement"); - $$ = null; + + start_block (GetLocation ($2)); + current_block.IsCompilerGenerated = true; + + Foreach f = new Foreach ((Expression) $3, null, null, null, GetLocation ($1)); + current_block.AddStatement (f); + + lbag.AddStatement (f, GetLocation ($2)); + $$ = end_block (GetLocation ($4)); + } + | FOREACH open_parens_any type identifier_inside_body error + { + Error_SyntaxError (yyToken); + + start_block (GetLocation ($2)); + current_block.IsCompilerGenerated = true; + + var lt = (Tokenizer.LocatedToken) $4; + var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.ForeachVariable | LocalVariable.Flags.Used, lt.Location); + current_block.AddLocalName (li); + + Foreach f = new Foreach ((Expression) $3, li, null, null, GetLocation ($1)); + current_block.AddStatement (f); + + lbag.AddStatement (f, GetLocation ($2)); + $$ = end_block (GetLocation ($5)); } | FOREACH open_parens_any type identifier_inside_body IN expression CLOSE_PARENS { @@ -5544,9 +5569,9 @@ try_statement $$ = new TryFinally (new TryCatch ((Block) $2, (List) $3, GetLocation ($1), true), (Block) $5, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($4)); } - | TRY block error + | TRY block error { - report.Error (1524, GetLocation ($1), "Expected catch or finally"); + Error_SyntaxError (1524, yyToken); $$ = new TryCatch ((Block) $2, null, GetLocation ($1), false); } ; @@ -5564,15 +5589,11 @@ catch_clauses var l = (List) $1; Catch c = (Catch) $2; - if (l [0].IsGeneral) { + if (l [l.Count - 1].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); } + l.Add (c); $$ = l; } ; @@ -5652,6 +5673,13 @@ lock_statement $$ = new Lock ((Expression) $3, (Statement) $5, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); } + | LOCK open_parens_any expression error + { + Error_SyntaxError (yyToken); + + $$ = new Lock ((Expression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); + } ; fixed_statement @@ -5713,9 +5741,15 @@ using_statement if ($5 is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation ($5)); - Using u = new Using ((Expression) $3, (Statement) $5, GetLocation ($1)); - lbag.AddStatement (u, GetLocation ($2), GetLocation ($4)); - $$ = u; + $$ = new Using ((Expression) $3, (Statement) $5, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); + } + | USING open_parens_any expression error + { + Error_SyntaxError (yyToken); + + $$ = new Using ((Expression) $3, null, GetLocation ($1)); + lbag.AddStatement ($$, GetLocation ($2)); } ; @@ -5959,7 +5993,7 @@ let_clause var sn = new Linq.RangeVariable (lt.Value, lt.Location); $$ = new Linq.Let ((Linq.QueryBlock) current_block, sn, (Expression)$5, GetLocation ($1)); lbag.AddLocation ($$, GetLocation ($3)); - + current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -6332,7 +6366,7 @@ doc_cref } | doc_type_declaration_name DOT THIS { - $$ = new MemberName ((MemberName) $1, new MemberName (MemberCache.IndexerNameAlias)); + $$ = new MemberName ((MemberName) $1, MemberCache.IndexerNameAlias, Location.Null); } | doc_type_declaration_name DOT THIS OPEN_BRACKET { @@ -6341,7 +6375,7 @@ doc_cref opt_doc_parameters CLOSE_BRACKET { module.DocumentationBuilder.ParsedParameters = (List)$6; - $$ = new MemberName ((MemberName) $1, new MemberName (MemberCache.IndexerNameAlias)); + $$ = new MemberName ((MemberName) $1, MemberCache.IndexerNameAlias, Location.Null); } | EXPLICIT OPERATOR type opt_doc_method_sig { @@ -6522,11 +6556,9 @@ DeclSpace pop_current_class () MemberName MakeName (MemberName class_name) { - Namespace ns = current_namespace.NS; - if (current_container == module) { - if (ns.Name.Length != 0) - return new MemberName (ns.MemberName, class_name); + if (current_namespace.MemberName != MemberName.Null) + return new MemberName (current_namespace.NS.MemberName, class_name); else return class_name; } else { @@ -6747,12 +6779,12 @@ void start_anonymous (bool isLambda, ParametersCompiled parameters, bool isAsync if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (loc, "lambda expressions"); - current_anonymous_method = new LambdaExpression (isAsync, loc); + current_anonymous_method = new LambdaExpression (loc); } else { if (lang_version == LanguageVersion.ISO_1) FeatureIsNotAvailable (loc, "anonymous methods"); - current_anonymous_method = new AnonymousMethodExpression (isAsync, loc); + current_anonymous_method = new AnonymousMethodExpression (loc); } async_block = isAsync; @@ -6784,7 +6816,12 @@ AnonymousMethodExpression end_anonymous (ParametersBlock anon_block) void Error_SyntaxError (int token) { - Error_SyntaxError (0, token, "Unexpected symbol"); + Error_SyntaxError (0, token); +} + +void Error_SyntaxError (int error_code, int token) +{ + Error_SyntaxError (error_code, token, "Unexpected symbol"); } void Error_SyntaxError (int error_code, int token, string msg) diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs index 411c495f27..2ee2e16b74 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs @@ -324,7 +324,7 @@ namespace Mono.CSharp escaped_identifiers.Add (loc); } - public bool IsEscapedIdentifier (MemberName name) + public bool IsEscapedIdentifier (ATypeNameExpression name) { return escaped_identifiers != null && escaped_identifiers.Contains (name.Location); } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs index 69b5e04302..2d36bf18f8 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs @@ -36,18 +36,20 @@ namespace Mono.CSharp { // Better name would be DottenName // [DebuggerDisplay ("{GetSignatureForError()}")] - public class MemberName { - public readonly string Name; - public TypeArguments TypeArguments; + public class MemberName + { + public static readonly MemberName Null = new MemberName (""); - public readonly MemberName Left; + public readonly string Name; + public TypeParameters TypeParameters; + public readonly FullNamedExpression ExplicitInterface; public readonly Location Location; - public static readonly MemberName Null = new MemberName (""); + public readonly MemberName Left; - bool is_double_colon; - - public bool IsDoubleColon { get { return is_double_colon; } } + public MemberName (string name) + : this (name, Location.Null) + { } #if FULL_AST public Location DotLocation { @@ -55,61 +57,43 @@ namespace Mono.CSharp { set; } #endif - private MemberName (MemberName left, string name, bool is_double_colon, - Location loc) + public MemberName (string name, Location loc) + : this (null, name, loc) + { } + + public MemberName (string name, TypeParameters tparams, Location loc) { this.Name = name; this.Location = loc; - this.is_double_colon = is_double_colon; - this.Left = left; + + this.TypeParameters = tparams; } - private MemberName (MemberName left, string name, bool is_double_colon, - TypeArguments args, Location loc) - : this (left, name, is_double_colon, loc) + public MemberName (string name, TypeParameters tparams, FullNamedExpression explicitInterface, Location loc) + : this (name, tparams, loc) { - if (args != null && args.Count > 0) - this.TypeArguments = args; + this.ExplicitInterface = explicitInterface; } - public MemberName (string name) - : this (name, Location.Null) - { } - - public MemberName (string name, Location loc) - : this (null, name, false, loc) - { } - - public MemberName (string name, TypeArguments args, Location loc) - : this (null, name, false, args, loc) - { } - - public MemberName (MemberName left, string name) - : this (left, name, left != null ? left.Location : Location.Null) - { } - public MemberName (MemberName left, string name, Location loc) - : this (left, name, false, loc) - { } - - public MemberName (MemberName left, string name, TypeArguments args, Location loc) - : this (left, name, false, args, loc) - { } + { + this.Name = name; + this.Location = loc; + this.Left = left; + } - public MemberName (string alias, string name, TypeArguments args, Location loc) - : this (new MemberName (alias, loc), name, true, args, loc) - { } + public MemberName (MemberName left, string name, FullNamedExpression explicitInterface, Location loc) + : this (left, name, loc) + { + this.ExplicitInterface = explicitInterface; + } public MemberName (MemberName left, MemberName right) - : this (left, right, right.Location) - { } - - public MemberName (MemberName left, MemberName right, Location loc) - : this (null, right.Name, false, right.TypeArguments, loc) { - if (right.is_double_colon) - throw new InternalErrorException ("Cannot append double_colon member name"); - this.Left = (right.Left == null) ? left : new MemberName (left, right.Left); + this.Name = right.Name; + this.Location = right.Location; + this.TypeParameters = right.TypeParameters; + this.Left = left; } // TODO: Remove @@ -120,13 +104,13 @@ namespace Mono.CSharp { public int Arity { get { - return TypeArguments == null ? 0 : TypeArguments.Count; + return TypeParameters == null ? 0 : TypeParameters.Count; } } public bool IsGeneric { get { - if (TypeArguments != null) + if (TypeParameters != null) return true; else if (Left != null) return Left.IsGeneric; @@ -139,55 +123,31 @@ namespace Mono.CSharp { { string name = is_generic ? Basename : Name; if (Left != null) - return Left.GetName (is_generic) + (is_double_colon ? "::" : ".") + name; + return Left.GetName (is_generic) + "." + name; return name; } - public ATypeNameExpression GetTypeExpression () - { - if (Left == null) { - if (TypeArguments != null) - return new SimpleName (Name, TypeArguments, Location); - - return new SimpleName (Name, Location); - } - - if (is_double_colon) { - if (Left.Left != null) - throw new InternalErrorException ("The left side of a :: should be an identifier"); - return new QualifiedAliasMember (Left.Name, Name, TypeArguments, Location); - } - - Expression lexpr = Left.GetTypeExpression (); - var result = new MemberAccess (lexpr, Name, TypeArguments, Location); -#if FULL_AST - result.DotLocation = DotLocation; -#endif - return result; - } - - public MemberName Clone () - { - MemberName left_clone = Left == null ? null : Left.Clone (); - return new MemberName (left_clone, Name, is_double_colon, TypeArguments, Location); - } - public string Basename { get { - if (TypeArguments != null) - return MakeName (Name, TypeArguments); + if (TypeParameters != null) + return MakeName (Name, TypeParameters); return Name; } } public string GetSignatureForError () { - string append = TypeArguments == null ? "" : "<" + TypeArguments.GetSignatureForError () + ">"; + string s = TypeParameters == null ? null : "<" + TypeParameters.GetSignatureForError () + ">"; + s = Name + s; + + if (ExplicitInterface != null) + s = ExplicitInterface.GetSignatureForError () + "." + s; + if (Left == null) - return Name + append; - string connect = is_double_colon ? "::" : "."; - return Left.GetSignatureForError () + connect + Name + append; + return s; + + return Left.GetSignatureForError () + "." + s; } public override bool Equals (object other) @@ -201,14 +161,12 @@ namespace Mono.CSharp { return true; if (other == null || Name != other.Name) return false; - if (is_double_colon != other.is_double_colon) - return false; - if ((TypeArguments != null) && - (other.TypeArguments == null || TypeArguments.Count != other.TypeArguments.Count)) + if ((TypeParameters != null) && + (other.TypeParameters == null || TypeParameters.Count != other.TypeParameters.Count)) return false; - if ((TypeArguments == null) && (other.TypeArguments != null)) + if ((TypeParameters == null) && (other.TypeParameters != null)) return false; if (Left == null) @@ -222,27 +180,14 @@ namespace Mono.CSharp { int hash = Name.GetHashCode (); for (MemberName n = Left; n != null; n = n.Left) hash ^= n.Name.GetHashCode (); - if (is_double_colon) - hash ^= 0xbadc01d; - if (TypeArguments != null) - hash ^= TypeArguments.Count << 5; + if (TypeParameters != null) + hash ^= TypeParameters.Count << 5; return hash & 0x7FFFFFFF; } - public int CountTypeArguments { - get { - if (TypeArguments != null) - return TypeArguments.Count; - else if (Left != null) - return Left.CountTypeArguments; - else - return 0; - } - } - - public static string MakeName (string name, TypeArguments args) + public static string MakeName (string name, TypeParameters args) { if (args == null) return name; @@ -871,7 +816,7 @@ namespace Mono.CSharp { get { return this; } } - public virtual TypeParameter[] CurrentTypeParameters { + public virtual TypeParameters CurrentTypeParameters { get { return null; } } @@ -1275,12 +1220,9 @@ namespace Mono.CSharp { protected Dictionary defined_names; - public TypeContainer PartialContainer; + public TypeContainer PartialContainer; protected readonly bool is_generic; - readonly int count_type_params; - protected TypeParameter[] type_params; - TypeParameter[] type_param_list; // // Whether we are Generic @@ -1306,12 +1248,9 @@ namespace Mono.CSharp { Basename = name.Basename; defined_names = new Dictionary (); PartialContainer = null; - if (name.TypeArguments != null) { + if (name.TypeParameters != null) { is_generic = true; - count_type_params = name.TypeArguments.Count; } - if (parent != null) - count_type_params += parent.count_type_params; } /// @@ -1407,45 +1346,7 @@ namespace Mono.CSharp { { return MemberName.GetSignatureForError (); } - - TypeParameter[] initialize_type_params () - { - if (type_param_list != null) - return type_param_list; - - DeclSpace the_parent = Parent; - if (this is GenericMethod) - the_parent = null; - - var list = new List (); - if (the_parent != null && the_parent.IsGeneric) { - // FIXME: move generics info out of DeclSpace - TypeParameter[] parent_params = the_parent.TypeParameters; - list.AddRange (parent_params); - } - - int count = type_params != null ? type_params.Length : 0; - for (int i = 0; i < count; i++) { - TypeParameter param = type_params [i]; - list.Add (param); - if (Parent.CurrentTypeParameters != null) { - foreach (TypeParameter tp in Parent.CurrentTypeParameters) { - if (tp.Name != param.Name) - continue; - - Report.SymbolRelatedToPreviousError (tp.Location, null); - Report.Warning (693, 3, param.Location, - "Type parameter `{0}' has the same name as the type parameter from outer type `{1}'", - param.Name, Parent.GetSignatureForError ()); - } - } - } - type_param_list = new TypeParameter [list.Count]; - list.CopyTo (type_param_list, 0); - return type_param_list; - } - #if FULL_AST public List PlainConstraints { get; @@ -1467,7 +1368,6 @@ namespace Mono.CSharp { } } #endif - public List Constraints { get; private set; @@ -1493,27 +1393,24 @@ namespace Mono.CSharp { return; } - TypeParameterName[] names = MemberName.TypeArguments.GetDeclarations (); - type_params = new TypeParameter [names.Length]; - // // Register all the names // - for (int i = 0; i < type_params.Length; i++) { - TypeParameterName name = names [i]; + for (int i = 0; i < MemberName.TypeParameters.Count; i++) { + var name = MemberName.TypeParameters [i]; Constraints constraints = null; if (constraints_list != null) { int total = constraints_list.Count; for (int ii = 0; ii < total; ++ii) { - Constraints constraints_at = (Constraints)constraints_list[ii]; + Constraints constraints_at = constraints_list[ii]; // TODO: it is used by iterators only if (constraints_at == null) { constraints_list.RemoveAt (ii); --total; continue; } - if (constraints_at.TypeParameter.Value == name.Name) { + if (constraints_at.TypeParameter.Value == name.MemberName.Name) { constraints = constraints_at; constraints_list.RemoveAt(ii); break; @@ -1521,16 +1418,13 @@ namespace Mono.CSharp { } } - Variance variance = name.Variance; if (name.Variance != Variance.None && !(this is Delegate || this is Interface)) { Report.Error (1960, name.Location, "Variant type parameters can only be used with interfaces and delegates"); - variance = Variance.None; } - type_params [i] = new TypeParameter ( - Parent, i, new MemberName (name.Name, Location), constraints, name.OptAttributes, variance); - - AddToContainer (type_params [i], name.Name); + MemberName.TypeParameters[i].Constraints = constraints; + if (name.MemberName != null) + AddToContainer (name, name.MemberName.Name); } if (constraints_list != null && constraints_list.Count > 0) { @@ -1541,25 +1435,6 @@ namespace Mono.CSharp { } } - protected TypeParameter[] TypeParameters { - get { - if (!IsGeneric) - throw new InvalidOperationException (); - if ((PartialContainer != null) && (PartialContainer != this)) - return PartialContainer.TypeParameters; - if (type_param_list == null) - initialize_type_params (); - - return type_param_list; - } - } - - public int CountTypeParameters { - get { - return count_type_params; - } - } - public override string[] ValidAttributeTargets { get { return attribute_targets; } } @@ -1570,10 +1445,8 @@ namespace Mono.CSharp { return false; } - if (type_params != null) { - foreach (TypeParameter tp in type_params) { - tp.VerifyClsCompliance (); - } + if (CurrentTypeParameters != null) { + CurrentTypeParameters.VerifyClsCompliance (); } return true; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs index b7efb87219..a7bd0b178b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs @@ -81,6 +81,13 @@ namespace Mono.CSharp { return parameters; } } + + public FullNamedExpression TypExpression { + get { + return ReturnType; + } + } + #endregion public override void Accept (StructuralVisitor visitor) @@ -123,7 +130,7 @@ namespace Mono.CSharp { ); Constructor = new Constructor (this, Constructor.ConstructorName, - Modifiers.PUBLIC, null, ctor_parameters, null, Location); + Modifiers.PUBLIC, null, ctor_parameters, Location); Constructor.Define (); // diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs index 59f67f0dbe..7fa6bceda1 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs @@ -244,10 +244,8 @@ namespace Mono.CSharp string tp_name = node.GetAttribute ("name"); if (mc.CurrentTypeParameters != null) { - foreach (var tp in mc.CurrentTypeParameters) { - if (tp.Name == tp_name) - return; - } + if (mc.CurrentTypeParameters.Find (tp_name) != null) + return; } // TODO: CS1710, CS1712 @@ -269,10 +267,8 @@ namespace Mono.CSharp var member = mc; do { if (member.CurrentTypeParameters != null) { - foreach (var tp in member.CurrentTypeParameters) { - if (tp.Name == tp_name) - return; - } + if (member.CurrentTypeParameters.Find (tp_name) != null) + return; } member = member.Parent; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs index bdd059d9a6..bc09888f7b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs @@ -300,7 +300,7 @@ namespace Mono.CSharp tr.Start (TimeReporter.TimerType.UsingResolve); foreach (var source_file in ctx.SourceFiles) { - source_file.NamespaceContainer.Resolve (); + source_file.NamespaceContainer.Define (); } tr.Stop (TimeReporter.TimerType.UsingResolve); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs index 76447fad0c..3524196957 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs @@ -253,7 +253,7 @@ namespace Mono.CSharp protected CSharpBinderFlags flags; TypeSpec binder_type; - TypeParameter[] context_mvars; + TypeParameters context_mvars; public DynamicExpressionStatement (IDynamicBinder binder, Arguments args, Location loc) { @@ -349,7 +349,7 @@ namespace Mono.CSharp var site_container = ec.CreateDynamicSite (); if (context_mvars != null) { - TypeParameter[] tparam; + TypeParameters tparam; TypeContainer sc = site_container; do { tparam = sc.CurrentTypeParameters; @@ -466,7 +466,7 @@ namespace Mono.CSharp return; if (del_type_instance_access == null) { - var dt = d.CurrentType.DeclaringType.MakeGenericType (module, context_mvars.Select (l => l.Type).ToArray ()); + var dt = d.CurrentType.DeclaringType.MakeGenericType (module, context_mvars.Types); del_type_instance_access = new TypeExpression (MemberCache.GetMember (dt, d.CurrentType), loc); } @@ -482,7 +482,7 @@ namespace Mono.CSharp if (inflate_using_mvar || context_mvars == null) { gt = site_container.CurrentType; } else { - gt = site_container.CurrentType.MakeGenericType (module, context_mvars.Select (l => l.Type).ToArray ()); + gt = site_container.CurrentType.MakeGenericType (module, context_mvars.Types); } // When site container already exists the inflated version has to be @@ -957,7 +957,7 @@ namespace Mono.CSharp sealed class DynamicSiteClass : HoistedStoreyClass { - public DynamicSiteClass (TypeContainer parent, MemberBase host, TypeParameter[] tparams) + public DynamicSiteClass (TypeContainer parent, MemberBase host, TypeParameters tparams) : base (parent, MakeMemberName (host, "DynamicSite", parent.DynamicSitesCounter, tparams, Location.Null), tparams, Modifiers.STATIC) { parent.DynamicSitesCounter++; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs index 410dd4da0b..b5fe92484b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs @@ -244,7 +244,7 @@ namespace Mono.CSharp { protected void Error_ValueCannotBeConvertedCore (ResolveContext ec, Location loc, TypeSpec target, bool expl) { // The error was already reported as CS1660 - if (type == InternalType.AnonymousMethod) + if (type == InternalType.AnonymousMethod || type == InternalType.ErrorType) return; string from_type = type.GetSignatureForError (); @@ -2452,13 +2452,11 @@ namespace Mono.CSharp { rc.Report.Error (841, loc, "A local variable `{0}' cannot be used before it is declared", Name); } else { if (Arity > 0) { - TypeParameter[] tparams = rc.CurrentTypeParameters; + var tparams = rc.CurrentTypeParameters; if (tparams != null) { - foreach (var ctp in tparams) { - if (ctp.Name == Name) { - Error_TypeArgumentsCannotBeUsed (rc, "type parameter", Name, loc); - return null; - } + if (tparams.Find (Name) != null) { + Error_TypeArgumentsCannotBeUsed (rc, "type parameter", Name, loc); + return null; } } @@ -4418,7 +4416,10 @@ namespace Mono.CSharp { var ac_p = p as ArrayContainer; if (ac_p != null) { - var ac_q = ((ArrayContainer) q); + var ac_q = q as ArrayContainer; + if (ac_q == null) + return null; + TypeSpec specific = MoreSpecific (ac_p.Element, ac_q.Element); if (specific == ac_p.Element) return p; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs index c996bc5e2a..61afbbe559 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs @@ -373,6 +373,7 @@ namespace Mono.CSharp // Need to setup MemberCache parser_result.CreateType (); + parser_result.NamespaceEntry.Define (); var method = parser_result.Methods[0] as Method; BlockContext bc = new BlockContext (method, method.Block, ctx.BuiltinTypes.Void); @@ -768,12 +769,17 @@ namespace Mono.CSharp return sb.ToString (); } - internal ICollection GetUsingList () + internal List GetUsingList () { var res = new List (); - foreach (var ue in source_file.NamespaceContainer.Usings) - res.Add (ue.Name); + foreach (var ue in source_file.NamespaceContainer.Usings) { + if (ue.Alias != null || ue.ResolvedExpression == null) + continue; + + res.Add (ue.NamespaceExpression.Name); + } + return res; } @@ -814,7 +820,7 @@ namespace Mono.CSharp public void LoadAssembly (string file) { var loader = new DynamicLoader (importer, ctx); - var assembly = loader.LoadAssemblyFile (file); + var assembly = loader.LoadAssemblyFile (file, false); if (assembly == null) return; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs index b5928273d9..94d014b017 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs @@ -801,18 +801,18 @@ namespace Mono.CSharp LocalTemporary temporary; bool prepared; - public Expression Expr { - get { - return expr; - } - } - public Indirection (Expression expr, Location l) { this.expr = expr; loc = l; } + public Expression Expr { + get { + return expr; + } + } + public bool IsFixed { get { return true; } } @@ -1017,6 +1017,13 @@ namespace Mono.CSharp // Holds the real operation Expression operation; + public UnaryMutator (Mode m, Expression e, Location loc) + { + mode = m; + this.loc = loc; + expr = e; + } + public Mode UnaryMutatorMode { get { return mode; @@ -1029,13 +1036,6 @@ namespace Mono.CSharp } } - public UnaryMutator (Mode m, Expression e, Location loc) - { - mode = m; - this.loc = loc; - expr = e; - } - public override bool ContainsEmitWithAwait () { return expr.ContainsEmitWithAwait (); @@ -1283,6 +1283,7 @@ namespace Mono.CSharp target.expr = expr.Clone (clonectx); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -1371,6 +1372,10 @@ namespace Mono.CSharp { } + protected override string OperatorName { + get { return "is"; } + } + public override Expression CreateExpressionTree (ResolveContext ec) { Arguments args = Arguments.CreateForExpressionTree (ec, null, @@ -1545,10 +1550,6 @@ namespace Mono.CSharp return this; } - protected override string OperatorName { - get { return "is"; } - } - public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -1566,6 +1567,10 @@ namespace Mono.CSharp { } + protected override string OperatorName { + get { return "as"; } + } + public override Expression CreateExpressionTree (ResolveContext ec) { Arguments args = Arguments.CreateForExpressionTree (ec, null, @@ -1644,14 +1649,10 @@ namespace Mono.CSharp return null; } - protected override string OperatorName { - get { return "as"; } - } public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); } - } // @@ -1753,13 +1754,6 @@ namespace Mono.CSharp public class DefaultValueExpression : Expression { Expression expr; - - - public Expression Expr { - get { - return this.expr; - } - } public DefaultValueExpression (Expression expr, Location loc) { @@ -1767,6 +1761,12 @@ namespace Mono.CSharp this.loc = loc; } + public Expression Expr { + get { + return this.expr; + } + } + public override bool IsSideEffectFree { get { return true; @@ -2225,11 +2225,15 @@ namespace Mono.CSharp } public Expression Left { - get { return this.left; } + get { + return this.left; + } } public Expression Right { - get { return this.right; } + get { + return this.right; + } } #endregion @@ -3385,6 +3389,8 @@ namespace Mono.CSharp return this; } + bool no_arg_conv = false; + // // LAMESPEC: method groups can be compared when they convert to other side delegate // @@ -3406,6 +3412,8 @@ namespace Mono.CSharp left = result; l = r; + } else { + no_arg_conv = l == r && !l.IsStruct; } // @@ -3418,11 +3426,12 @@ namespace Mono.CSharp // bool operator != (bool a, bool b) // bool operator == (bool a, bool b) // - // LAMESPEC: Reference equality comparison can apply to value types when - // they implement an implicit conversion to any of types above. + // LAMESPEC: Reference equality comparison can apply to value/reference types when + // they implement an implicit conversion to any of types above. This does + // not apply when both operands are of same reference type // if (r.BuiltinType != BuiltinTypeSpec.Type.Object && l.BuiltinType != BuiltinTypeSpec.Type.Object) { - result = ResolveOperatorPredefined (ec, ec.BuiltinTypes.OperatorsBinaryEquality, false, null); + result = ResolveOperatorPredefined (ec, ec.BuiltinTypes.OperatorsBinaryEquality, no_arg_conv, null); if (result != null) return result; } @@ -5235,7 +5244,7 @@ namespace Mono.CSharp } } - public Expression Expression { + public Expression Exp { get { return expr; } @@ -5490,6 +5499,7 @@ namespace Mono.CSharp return SLE.Expression.Call (instance_expr, (MethodInfo) mi.GetMetaInfo (), Arguments.MakeExpression (args, ctx)); #endif } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -5541,6 +5551,12 @@ namespace Mono.CSharp } } + public Expression TypeExpression { + get { + return RequestedType; + } + } + #endregion /// @@ -5933,6 +5949,12 @@ namespace Mono.CSharp get { return elements.Count; } } + public List Elements { + get { + return elements; + } + } + public Expression this [int index] { get { return elements [index]; @@ -5947,12 +5969,6 @@ namespace Mono.CSharp variable = value; } } - - public List Elements { - get { - return this.elements; - } - } #endregion public void Add (Expression expr) @@ -6044,24 +6060,16 @@ namespace Mono.CSharp // The number of constants in array initializers int const_initializers_count; -// bool only_constant_initializers; + bool only_constant_initializers; public List Arguments { get { return this.arguments; } } - public ComposedTypeSpecifier Rank { - get { return this.rank; } - } - public FullNamedExpression NewType { get { return this.requested_base_type; } } - public ArrayInitializer Initializers { - get { return this.initializers; } - } - public ArrayCreation (FullNamedExpression requested_base_type, List exprs, ComposedTypeSpecifier rank, ArrayInitializer initializers, Location l) : this (requested_base_type, rank, initializers, l) { @@ -6099,6 +6107,24 @@ namespace Mono.CSharp { } + public ComposedTypeSpecifier Rank { + get { + return this.rank; + } + } + + public FullNamedExpression TypeExpression { + get { + return this.requested_base_type; + } + } + + public ArrayInitializer Initializers { + get { + return this.initializers; + } + } + bool CheckIndices (ResolveContext ec, ArrayInitializer probe, int idx, bool specified_dims, int child_bounds) { if (initializers != null && bounds == null) { @@ -6179,7 +6205,7 @@ namespace Mono.CSharp ++const_initializers_count; } } else { -// only_constant_initializers = false; + only_constant_initializers = false; } array_data.Add (element); @@ -6284,7 +6310,7 @@ namespace Mono.CSharp protected bool ResolveInitializers (ResolveContext ec) { -// only_constant_initializers = true; + only_constant_initializers = true; if (arguments != null) { bool res = true; @@ -7124,8 +7150,8 @@ namespace Mono.CSharp /// public class Arglist : Expression { - public Arguments Arguments { get; private set; } - + Arguments arguments; + public Arglist (Location loc) : this (null, loc) { @@ -7133,18 +7159,24 @@ namespace Mono.CSharp public Arglist (Arguments args, Location l) { - Arguments = args; + arguments = args; loc = l; } + public Arguments Arguments { + get { + return arguments; + } + } + public MetaType[] ArgumentTypes { get { - if (Arguments == null) + if (arguments == null) return MetaType.EmptyTypes; - var retval = new MetaType[Arguments.Count]; - for (int i = 0; i < retval.Length; i++) - retval[i] = Arguments[i].Expr.Type.GetMetaInfo (); + var retval = new MetaType[arguments.Count]; + for (int i = 0; i < retval.Length; i++) + retval[i] = arguments[i].Expr.Type.GetMetaInfo (); return retval; } @@ -7165,9 +7197,9 @@ namespace Mono.CSharp { eclass = ExprClass.Variable; type = InternalType.Arglist; - if (Arguments != null) { + if (arguments != null) { bool dynamic; // Can be ignored as there is always only 1 overload - Arguments.Resolve (ec, out dynamic); + arguments.Resolve (ec, out dynamic); } return this; @@ -7175,17 +7207,18 @@ namespace Mono.CSharp public override void Emit (EmitContext ec) { - if (Arguments != null) - Arguments.Emit (ec); + if (arguments != null) + arguments.Emit (ec); } protected override void CloneTo (CloneContext clonectx, Expression t) { Arglist target = (Arglist) t; - if (Arguments != null) - target.Arguments = Arguments.Clone (clonectx); + if (arguments != null) + target.arguments = arguments.Clone (clonectx); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -7207,6 +7240,12 @@ namespace Mono.CSharp this.loc = loc; } + public FullNamedExpression TypeExpression { + get { + return texpr; + } + } + public override bool ContainsEmitWithAwait () { return false; @@ -7597,12 +7636,12 @@ namespace Mono.CSharp /// Implements the sizeof expression /// public class SizeOf : Expression { - public readonly Expression QueriedType; + readonly Expression texpr; TypeSpec type_queried; public SizeOf (Expression queried_type, Location l) { - this.QueriedType = queried_type; + this.texpr = queried_type; loc = l; } @@ -7612,6 +7651,12 @@ namespace Mono.CSharp } } + public Expression TypeExpression { + get { + return texpr; + } + } + public override bool ContainsEmitWithAwait () { return false; @@ -7625,7 +7670,7 @@ namespace Mono.CSharp protected override Expression DoResolve (ResolveContext ec) { - type_queried = QueriedType.ResolveAsType (ec); + type_queried = texpr.ResolveAsType (ec); if (type_queried == null) return null; @@ -7693,6 +7738,12 @@ namespace Mono.CSharp this.alias = alias; } + public string Alias { + get { + return alias; + } + } + public override FullNamedExpression ResolveAsTypeOrNamespace (IMemberContext ec) { if (alias == GlobalAlias) { @@ -7707,19 +7758,8 @@ namespace Mono.CSharp ec.Module.Compiler.Report.Error (432, loc, "Alias `{0}' not found", alias); return null; } - - FullNamedExpression fne = base.ResolveAsTypeOrNamespace (ec); - if (fne == null) - return null; - - if (expr.eclass == ExprClass.Type) { - ec.Module.Compiler.Report.Error (431, loc, - "Alias `{0}' cannot be used with '::' since it denotes a type. Consider replacing '::' with '.'", alias); - - return null; - } - - return fne; + + return base.ResolveAsTypeOrNamespace (ec); } protected override Expression DoResolve (ResolveContext ec) @@ -7727,13 +7767,6 @@ namespace Mono.CSharp return ResolveAsTypeOrNamespace (ec); } - protected override void Error_IdentifierNotFound (IMemberContext rc, TypeSpec expr_type, string identifier) - { - rc.Module.Compiler.Report.Error (687, loc, - "A namespace alias qualifier `{0}' did not resolve to a namespace or a type", - GetSignatureForError ()); - } - public override string GetSignatureForError () { string name = Name; @@ -7746,6 +7779,14 @@ namespace Mono.CSharp public override Expression LookupNameExpression (ResolveContext rc, MemberLookupRestrictions restrictions) { + if ((restrictions & MemberLookupRestrictions.InvocableOnly) != 0) { + rc.Module.Compiler.Report.Error (687, loc, + "The namespace alias qualifier `::' cannot be used to invoke a method. Consider using `.' instead", + GetSignatureForError ()); + + return null; + } + return DoResolve (rc); } @@ -8105,6 +8146,14 @@ namespace Mono.CSharp return null; } + var qam = this as QualifiedAliasMember; + if (qam != null) { + rc.Module.Compiler.Report.Error (431, loc, + "Alias `{0}' cannot be used with `::' since it denotes a type. Consider replacing `::' with `.'", + qam.Alias); + + } + TypeSpec nested = null; while (expr_type != null) { nested = MemberCache.FindNestedType (expr_type, Name, Arity); @@ -8265,6 +8314,7 @@ namespace Mono.CSharp target.Expr = Expr.Clone (clonectx); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -8329,6 +8379,7 @@ namespace Mono.CSharp target.Expr = Expr.Clone (clonectx); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -9539,15 +9590,7 @@ namespace Mono.CSharp TypeSpec otype; Expression t; Expression count; - - public Expression TypeExpression { - get { return this.t; } - } - public Expression CountExpression { - get { return this.count; } - } - public StackAlloc (Expression type, Expression count, Location l) { t = type; @@ -9555,6 +9598,18 @@ namespace Mono.CSharp loc = l; } + public Expression TypeExpression { + get { + return this.t; + } + } + + public Expression CountExpression { + get { + return this.count; + } + } + public override bool ContainsEmitWithAwait () { return false; @@ -10033,18 +10088,18 @@ namespace Mono.CSharp CollectionOrObjectInitializers initializers; IMemoryLocation instance; - public CollectionOrObjectInitializers Initializers { - get { - return initializers; - } - } - public NewInitialize (FullNamedExpression requested_type, Arguments arguments, CollectionOrObjectInitializers initializers, Location l) : base (requested_type, arguments, l) { this.initializers = initializers; } + public CollectionOrObjectInitializers Initializers { + get { + return initializers; + } + } + protected override void CloneTo (CloneContext clonectx, Expression t) { base.CloneTo (clonectx, t); @@ -10155,10 +10210,6 @@ namespace Mono.CSharp readonly TypeContainer parent; AnonymousTypeClass anonymous_type; - public List Parameters { - get { return this.parameters; } - } - public NewAnonymousType (List parameters, TypeContainer parent, Location loc) : base (null, null, loc) { @@ -10166,6 +10217,12 @@ namespace Mono.CSharp this.parent = parent; } + public List Parameters { + get { + return this.parameters; + } + } + protected override void CloneTo (CloneContext clonectx, Expression target) { if (parameters == null) @@ -10187,15 +10244,15 @@ namespace Mono.CSharp if (type == null) return null; + int errors = ec.Report.Errors; type.CreateType (); type.DefineType (); type.ResolveTypeParameters (); type.Define (); - type.EmitType (); - if (ec.Report.Errors == 0) - type.CloseType (); + if ((ec.Report.Errors - errors) == 0) { + parent.Module.AddAnonymousType (type); + } - parent.Module.AddAnonymousType (type); return type; } @@ -10237,7 +10294,7 @@ namespace Mono.CSharp arguments = new Arguments (parameters.Count); TypeExpression [] t_args = new TypeExpression [parameters.Count]; for (int i = 0; i < parameters.Count; ++i) { - Expression e = ((AnonymousTypeParameter) parameters [i]).Resolve (ec); + Expression e = parameters [i].Resolve (ec); if (e == null) { error = true; continue; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs index 44001051fd..be3b6a03fc 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs @@ -94,6 +94,12 @@ namespace Mono.CSharp { #region Properties + public List TypeExpressions { + get { + return constraints; + } + } + public Location Location { get { return loc; @@ -360,15 +366,24 @@ namespace Mono.CSharp { GenericTypeParameterBuilder builder; TypeParameterSpec spec; - public TypeParameter (DeclSpace parent, int index, MemberName name, Constraints constraints, Attributes attrs, Variance variance) - : base (parent, name, attrs) + public TypeParameter (int index, MemberName name, Constraints constraints, Attributes attrs, Variance variance) + : base (null, name, attrs) { this.constraints = constraints; this.spec = new TypeParameterSpec (null, index, this, SpecialConstraint.None, variance, null); } + // + // Used by parser + // + public TypeParameter (MemberName name, Attributes attrs, Variance variance) + : base (null, name, attrs) + { + this.spec = new TypeParameterSpec (null, -1, this, SpecialConstraint.None, variance, null); + } + public TypeParameter (TypeParameterSpec spec, DeclSpace parent, TypeSpec parentSpec, MemberName name, Attributes attrs) - : base (parent, name, attrs) + : base (null, name, attrs) { this.spec = new TypeParameterSpec (parentSpec, spec.DeclaredPosition, spec.MemberDefinition, spec.SpecialConstraint, spec.Variance, null) { BaseType = spec.BaseType, @@ -385,6 +400,15 @@ namespace Mono.CSharp { } } + public Constraints Constraints { + get { + return constraints; + } + set { + constraints = value; + } + } + public IAssemblyDefinition DeclaringAssembly { get { return Module.DeclaringAssembly; @@ -440,12 +464,6 @@ namespace Mono.CSharp { } } - public Constraints Constraints { - get { - return this.constraints; - } - } - #endregion // @@ -509,11 +527,13 @@ namespace Mono.CSharp { // with SRE (by calling `DefineGenericParameters()' on the TypeBuilder / // MethodBuilder). // - public void Define (GenericTypeParameterBuilder type, TypeSpec declaringType) + public void Define (GenericTypeParameterBuilder type, TypeSpec declaringType, TypeContainer parent) { if (builder != null) throw new InternalErrorException (); + // Needed to get compiler reference + this.Parent = parent; this.builder = type; spec.DeclaringType = declaringType; spec.SetMetaInfo (type); @@ -625,16 +645,6 @@ namespace Mono.CSharp { return true; } - public static TypeParameter FindTypeParameter (TypeParameter[] tparams, string name) - { - foreach (var tp in tparams) { - if (tp.Name == name) - return tp; - } - - return null; - } - public override bool IsClsComplianceRequired () { return false; @@ -645,6 +655,14 @@ namespace Mono.CSharp { if (constraints != null) constraints.VerifyClsCompliance (Report); } + + public void WarningParentNameConflict (TypeParameter conflict) + { + conflict.Report.SymbolRelatedToPreviousError (conflict.Location, null); + conflict.Report.Warning (693, 3, Location, + "Type parameter `{0}' has the same name as the type parameter from outer type `{1}'", + GetSignatureForError (), conflict.CurrentType.GetSignatureForError ()); + } } [System.Diagnostics.DebuggerDisplay ("{DisplayDebugInfo()}")] @@ -654,7 +672,7 @@ namespace Mono.CSharp { Variance variance; SpecialConstraint spec; - readonly int tp_pos; + int tp_pos; TypeSpec[] targs; TypeSpec[] ifaces_defined; @@ -684,6 +702,9 @@ namespace Mono.CSharp { get { return tp_pos; } + set { + tp_pos = value; + } } public bool HasSpecialConstructor { @@ -918,15 +939,8 @@ namespace Mono.CSharp { public override string GetSignatureForDocumentation () { - int c = 0; - var type = DeclaringType; - while (type != null && type.DeclaringType != null) { - type = type.DeclaringType; - c += type.MemberDefinition.TypeParametersCount; - } - var prefix = IsMethodOwned ? "``" : "`"; - return prefix + (c + DeclaredPosition); + return prefix + DeclaredPosition; } public override string GetSignatureForError () @@ -1364,13 +1378,13 @@ namespace Mono.CSharp { // public class TypeParameterMutator { - readonly TypeParameter[] mvar; - readonly TypeParameter[] var; + readonly TypeParameters mvar; + readonly TypeParameters var; Dictionary mutated_typespec; - public TypeParameterMutator (TypeParameter[] mvar, TypeParameter[] var) + public TypeParameterMutator (TypeParameters mvar, TypeParameters var) { - if (mvar.Length != var.Length) + if (mvar.Count != var.Count) throw new ArgumentException (); this.mvar = mvar; @@ -1379,7 +1393,7 @@ namespace Mono.CSharp { #region Properties - public TypeParameter[] MethodTypeParameters { + public TypeParameters MethodTypeParameters { get { return mvar; } @@ -1416,7 +1430,7 @@ namespace Mono.CSharp { public TypeParameterSpec Mutate (TypeParameterSpec tp) { - for (int i = 0; i < mvar.Length; ++i) { + for (int i = 0; i < mvar.Count; ++i) { if (mvar[i].Type == tp) return var[i].Type; } @@ -1879,12 +1893,6 @@ namespace Mono.CSharp { args.Add (type); } - // TODO: Kill this monster - public TypeParameterName[] GetDeclarations () - { - return args.ConvertAll (i => (TypeParameterName) i).ToArray (); - } - /// /// We may only be used after Resolve() is called and return the fully /// resolved types. @@ -1911,6 +1919,12 @@ namespace Mono.CSharp { } } + public List TypeExpressions { + get { + return this.args; + } + } + public string GetSignatureForError() { StringBuilder sb = new StringBuilder (); @@ -1998,32 +2012,95 @@ namespace Mono.CSharp { } } - public class TypeParameterName : SimpleName + public class TypeParameters { - Attributes attributes; - Variance variance; + List names; + TypeParameterSpec[] types; - public TypeParameterName (string name, Attributes attrs, Location loc) - : this (name, attrs, Variance.None, loc) + public TypeParameters () { + names = new List (); } - public TypeParameterName (string name, Attributes attrs, Variance variance, Location loc) - : base (name, loc) + public TypeParameters (int count) { - attributes = attrs; - this.variance = variance; + names = new List (count); } - public Attributes OptAttributes { + #region Properties + + public int Count { get { - return attributes; + return names.Count; } } - public Variance Variance { + public TypeParameterSpec[] Types { get { - return variance; + return types; + } + } + + #endregion + + public void Add (TypeParameter tparam) + { + names.Add (tparam); + } + + public void Add (TypeParameters tparams) + { + names.AddRange (tparams.names); + } + + public void Define (GenericTypeParameterBuilder[] buiders, TypeSpec declaringType, int parentOffset, TypeContainer parent) + { + types = new TypeParameterSpec[Count]; + for (int i = 0; i < types.Length; ++i) { + names[i].Define (buiders[i + parentOffset], declaringType, parent); + types[i] = names[i].Type; + types[i].DeclaredPosition = i + parentOffset; + } + } + + public TypeParameter this[int index] { + get { + return names [index]; + } + set { + names[index] = value; + } + } + + public TypeParameter Find (string name) + { + foreach (var tp in names) { + if (tp.Name == name) + return tp; + } + + return null; + } + + public string GetSignatureForError () + { + StringBuilder sb = new StringBuilder (); + for (int i = 0; i < Count; ++i) { + if (i > 0) + sb.Append (','); + + var name = names[i]; + if (name != null) + sb.Append (name.GetSignatureForError ()); + } + + return sb.ToString (); + } + + public void VerifyClsCompliance () + { + foreach (var tp in names) { + tp.VerifyClsCompliance (); } } } @@ -2443,16 +2520,9 @@ namespace Mono.CSharp { this.parameters = parameters; } - public GenericMethod (NamespaceContainer ns, DeclSpace parent, MemberName name, TypeParameter[] tparams, - FullNamedExpression return_type, ParametersCompiled parameters) - : this (ns, parent, name, return_type, parameters) - { - this.type_params = tparams; - } - - public override TypeParameter[] CurrentTypeParameters { + public override TypeParameters CurrentTypeParameters { get { - return base.type_params; + return MemberName.TypeParameters; } } @@ -2483,11 +2553,13 @@ namespace Mono.CSharp { /// public bool Define (MethodOrOperator m) { - TypeParameterName[] names = MemberName.TypeArguments.GetDeclarations (); - string[] snames = new string [names.Length]; + var tparams = MemberName.TypeParameters; + string[] snames = new string[MemberName.Arity]; var block = m.Block; - for (int i = 0; i < names.Length; i++) { - string type_argument_name = names[i].Name; + var parent_tparams = Parent.TypeParametersAll; + + for (int i = 0; i < snames.Length; i++) { + string type_argument_name = tparams[i].MemberName.Name; if (block == null) { int idx = parameters.GetParameterIndexByName (type_argument_name); @@ -2505,12 +2577,18 @@ namespace Mono.CSharp { variable.Block.Error_AlreadyDeclaredTypeParameter (type_argument_name, variable.Location); } + if (parent_tparams != null) { + var tp = parent_tparams.Find (type_argument_name); + if (tp != null) { + tparams[i].WarningParentNameConflict (tp); + } + } + snames[i] = type_argument_name; } GenericTypeParameterBuilder[] gen_params = m.MethodBuilder.DefineGenericParameters (snames); - for (int i = 0; i < TypeParameters.Length; i++) - TypeParameters [i].Define (gen_params [i], null); + tparams.Define (gen_params, null, 0, Parent); return true; } @@ -2538,9 +2616,7 @@ namespace Mono.CSharp { public new void VerifyClsCompliance () { - foreach (TypeParameter tp in TypeParameters) { - tp.VerifyClsCompliance (); - } + MemberName.TypeParameters.VerifyClsCompliance (); } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs index b60e5b53f9..b28d1cf578 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/iterators.cs @@ -33,16 +33,16 @@ namespace Mono.CSharp protected T machine_initializer; int resume_pc; - public Expression Expr { - get { return this.expr; } - } - protected YieldStatement (Expression expr, Location l) { this.expr = expr; loc = l; } + public Expression Expr { + get { return this.expr; } + } + protected override void CloneTo (CloneContext clonectx, Statement t) { var target = (YieldStatement) t; @@ -160,7 +160,7 @@ namespace Mono.CSharp Field pc_field; StateMachineMethod method; - protected StateMachine (Block block, TypeContainer parent, MemberBase host, TypeParameter[] tparams, string name) + protected StateMachine (Block block, TypeContainer parent, MemberBase host, TypeParameters tparams, string name) : base (block, parent, host, tparams, name) { } @@ -478,17 +478,14 @@ namespace Mono.CSharp Define_Reset (); if (Iterator.IsEnumerable) { - MemberName name = new MemberName (QualifiedAliasMember.GlobalAlias, "System", null, Location); - name = new MemberName (name, "Collections", Location); - name = new MemberName (name, "IEnumerable", Location); - name = new MemberName (name, "GetEnumerator", Location); + FullNamedExpression explicit_iface = new TypeExpression (Compiler.BuiltinTypes.IEnumerable, Location); + var name = new MemberName ("GetEnumerator", null, explicit_iface, Location); if (generic_enumerator_type != null) { Method get_enumerator = new StateMachineMethod (this, null, enumerator_type, 0, name); - name = new MemberName (name.Left.Left, "Generic", Location); - name = new MemberName (name, "IEnumerable", generic_args, Location); - name = new MemberName (name, "GetEnumerator", Location); + explicit_iface = new GenericTypeExpr (Module.PredefinedTypes.IEnumerableGeneric.Resolve (), generic_args, Location); + name = new MemberName ("GetEnumerator", null, explicit_iface, Location); Method gget_enumerator = new GetEnumeratorMethod (this, generic_enumerator_type, name); // @@ -510,20 +507,17 @@ namespace Mono.CSharp void Define_Current (bool is_generic) { TypeExpr type; - - MemberName name = new MemberName (QualifiedAliasMember.GlobalAlias, "System", null, Location); - name = new MemberName (name, "Collections", Location); + FullNamedExpression explicit_iface; if (is_generic) { - name = new MemberName (name, "Generic", Location); - name = new MemberName (name, "IEnumerator", generic_args, Location); + explicit_iface = new GenericTypeExpr (Module.PredefinedTypes.IEnumeratorGeneric.Resolve (), generic_args, Location); type = iterator_type_expr; } else { - name = new MemberName (name, "IEnumerator"); + explicit_iface = new TypeExpression (Module.Compiler.BuiltinTypes.IEnumerator, Location); type = new TypeExpression (Compiler.BuiltinTypes.Object, Location); } - name = new MemberName (name, "Current", Location); + var name = new MemberName ("Current", null, explicit_iface, Location); ToplevelBlock get_block = new ToplevelBlock (Compiler, Location); get_block.AddStatement (new Return (new DynamicFieldExpr (CurrentField, Location), Location)); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs index d7d8a5932d..f1cc07b195 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/lambda.cs @@ -24,13 +24,8 @@ namespace Mono.CSharp { // A list of Parameters (explicitly typed parameters) // An ImplicitLambdaParameter // - public LambdaExpression (bool isAsync, Location loc) - : base (isAsync, loc) - { - } - public LambdaExpression (Location loc) - : this (false, loc) + : base (loc) { } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs index 998f340a98..60310f02c4 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/linq.cs @@ -287,6 +287,12 @@ namespace Mono.CSharp.Linq this.identifier = identifier; } + public RangeVariable Identifier { + get { + return identifier; + } + } + public FullNamedExpression IdentifierType { get; set; } protected Invocation CreateCastExpression (Expression lSide) @@ -476,6 +482,12 @@ namespace Mono.CSharp.Linq } } + public Expression SelectorExpression { + get { + return element_selector; + } + } + protected override void CreateArguments (ResolveContext ec, Parameter parameter, ref Arguments args) { base.CreateArguments (ec, parameter, ref args); @@ -519,6 +531,13 @@ namespace Mono.CSharp.Linq get { return this.GetIntoVariable (); } } + public Join (QueryBlock block, RangeVariable lt, Expression inner, QueryBlock outerSelector, QueryBlock innerSelector, Location loc) + : base (block, lt, inner, loc) + { + this.outer_selector = outerSelector; + this.inner_selector = innerSelector; + } + public QueryBlock InnerSelector { get { return inner_selector; @@ -530,13 +549,6 @@ namespace Mono.CSharp.Linq return outer_selector; } } - - public Join (QueryBlock block, RangeVariable lt, Expression inner, QueryBlock outerSelector, QueryBlock innerSelector, Location loc) - : base (block, lt, inner, loc) - { - this.outer_selector = outerSelector; - this.inner_selector = innerSelector; - } protected override void CreateArguments (ResolveContext ec, Parameter parameter, ref Arguments args) { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs index 95be95d40b..bb0370914b 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/literal.cs @@ -95,8 +95,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class CharLiteral : CharConstant, ILiteralConstant @@ -111,8 +116,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class IntLiteral : IntConstant, ILiteralConstant @@ -143,8 +153,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class UIntLiteral : UIntConstant, ILiteralConstant @@ -159,8 +174,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class LongLiteral : LongConstant, ILiteralConstant @@ -175,8 +195,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class ULongLiteral : ULongConstant, ILiteralConstant @@ -191,8 +216,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class FloatLiteral : FloatConstant, ILiteralConstant @@ -207,8 +237,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class DoubleLiteral : DoubleConstant, ILiteralConstant @@ -245,8 +280,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class DecimalLiteral : DecimalConstant, ILiteralConstant @@ -261,8 +301,13 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } public class StringLiteral : StringConstant, ILiteralConstant @@ -277,7 +322,12 @@ namespace Mono.CSharp } #if FULL_AST - char[] ILiteralConstant.ParsedValue { get; set; } + public char[] ParsedValue { get; set; } #endif + + public override object Accept (StructuralVisitor visitor) + { + return visitor.Visit (this); + } } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs index 14759f5774..231aeae5e2 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs @@ -796,10 +796,10 @@ if (checkpoints.Length <= CheckpointIndex) throw new Exception (String.Format (" public readonly Location UsingLocation; public readonly Tokenizer.LocatedToken Identifier; public readonly Location AssignLocation; - public readonly MemberName Nspace; + public readonly ATypeNameExpression Nspace; public readonly Location SemicolonLocation; - public AliasUsing (Location usingLocation, Tokenizer.LocatedToken identifier, Location assignLocation, MemberName nspace, Location semicolonLocation) + public AliasUsing (Location usingLocation, Tokenizer.LocatedToken identifier, Location assignLocation, ATypeNameExpression nspace, Location semicolonLocation) { this.UsingLocation = usingLocation; this.Identifier = identifier; @@ -817,10 +817,10 @@ if (checkpoints.Length <= CheckpointIndex) throw new Exception (String.Format (" public class Using { public readonly Location UsingLocation; - public readonly MemberName NSpace; + public readonly ATypeNameExpression NSpace; public readonly Location SemicolonLocation; - public Using (Location usingLocation, MemberName nSpace, Location semicolonLocation) + public Using (Location usingLocation, ATypeNameExpression nSpace, Location semicolonLocation) { this.UsingLocation = usingLocation; this.NSpace = nSpace; @@ -869,13 +869,13 @@ if (checkpoints.Length <= CheckpointIndex) throw new Exception (String.Format (" } [Conditional ("FULL_AST")] - public void AddUsingAlias (Location usingLocation, Tokenizer.LocatedToken identifier, Location assignLocation, MemberName nspace, Location semicolonLocation) + public void AddUsingAlias (Location usingLocation, Tokenizer.LocatedToken identifier, Location assignLocation, ATypeNameExpression nspace, Location semicolonLocation) { curNamespace.Peek ().usings.Add (new AliasUsing (usingLocation, identifier, assignLocation, nspace, semicolonLocation)); } [Conditional ("FULL_AST")] - public void AddUsing (Location usingLocation, MemberName nspace, Location semicolonLocation) + public void AddUsing (Location usingLocation, ATypeNameExpression nspace, Location semicolonLocation) { curNamespace.Peek ().usings.Add (new Using (usingLocation, nspace, semicolonLocation)); } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs index b545ce9051..825ca37dbf 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs @@ -875,7 +875,7 @@ namespace Mono.CSharp { #region Properties - public override TypeParameter[] CurrentTypeParameters { + public override TypeParameters CurrentTypeParameters { get { if (GenericMethod != null) return GenericMethod.CurrentTypeParameters; @@ -886,19 +886,23 @@ namespace Mono.CSharp { public TypeParameterSpec[] TypeParameters { get { - // TODO: Cache this - return CurrentTypeParameters.Select (l => l.Type).ToArray (); + return CurrentTypeParameters.Types; } } public int TypeParametersCount { get { - return CurrentTypeParameters == null ? 0 : CurrentTypeParameters.Length; + return CurrentTypeParameters == null ? 0 : CurrentTypeParameters.Count; } } #endregion + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + public static Method Create (DeclSpace parent, GenericMethod generic, FullNamedExpression returnType, Modifiers mod, MemberName name, ParametersCompiled parameters, Attributes attrs, bool hasConstraints) { @@ -966,9 +970,9 @@ namespace Mono.CSharp { public override FullNamedExpression LookupNamespaceOrType (string name, int arity, LookupMode mode, Location loc) { if (arity == 0) { - TypeParameter[] tp = CurrentTypeParameters; + var tp = CurrentTypeParameters; if (tp != null) { - TypeParameter t = TypeParameter.FindTypeParameter (tp, name); + TypeParameter t = tp.Find (name); if (t != null) return new TypeParameterExpr (t, loc); } @@ -1065,10 +1069,10 @@ namespace Mono.CSharp { if (base_decl_tparams.Length != 0) { base_decl_tparams = base_decl_tparams.Concat (base_tparams).ToArray (); - base_targs = base_targs.Concat (tparams.Select (l => l.Type)).ToArray (); + base_targs = base_targs.Concat (tparams.Types).ToArray (); } else { base_decl_tparams = base_tparams; - base_targs = tparams.Select (l => l.Type).ToArray (); + base_targs = tparams.Types; } } } else if (MethodData.implementing != null) { @@ -1085,7 +1089,7 @@ namespace Mono.CSharp { } } - for (int i = 0; i < tparams.Length; ++i) { + for (int i = 0; i < tparams.Count; ++i) { var tp = tparams[i]; if (!tp.ResolveConstraints (this)) @@ -1175,11 +1179,6 @@ namespace Mono.CSharp { return true; } - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } - // // Creates the type // @@ -1313,7 +1312,7 @@ namespace Mono.CSharp { } if (CurrentTypeParameters != null) { - for (int i = 0; i < CurrentTypeParameters.Length; ++i) { + for (int i = 0; i < CurrentTypeParameters.Count; ++i) { var tp = CurrentTypeParameters [i]; tp.CheckGenericConstraints (false); tp.Emit (); @@ -1528,20 +1527,16 @@ namespace Mono.CSharp { public static readonly string ConstructorName = ".ctor"; public static readonly string TypeConstructorName = ".cctor"; - // - // The spec claims that static is not permitted, but - // my very own code has static constructors. - // - public Constructor (DeclSpace parent, string name, Modifiers mod, Attributes attrs, ParametersCompiled args, - ConstructorInitializer init, Location loc) + public Constructor (DeclSpace parent, string name, Modifiers mod, Attributes attrs, ParametersCompiled args, Location loc) : base (parent, null, null, mod, AllowedModifiers, new MemberName (name, loc), attrs, args) { - Initializer = init; } public bool HasCompliantArgs { - get { return has_compliant_args; } + get { + return has_compliant_args; + } } public override AttributeTargets AttributeTargets { @@ -1569,6 +1564,11 @@ namespace Mono.CSharp { (Initializer.Arguments == null); } + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { if (a.IsValidSecurityAttribute ()) { @@ -1614,11 +1614,6 @@ namespace Mono.CSharp { return true; } - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } - // // Creates the ConstructorBuilder // @@ -2155,6 +2150,11 @@ namespace Mono.CSharp { ModFlags |= Modifiers.PROTECTED | Modifiers.OVERRIDE; } + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { if (a.Type == pa.Conditional) { @@ -2164,10 +2164,6 @@ namespace Mono.CSharp { base.ApplyAttributeBuilder (a, ctor, cdata, pa); } - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } protected override bool CheckBase () { @@ -2242,7 +2238,7 @@ namespace Mono.CSharp { static MemberName SetupName (string prefix, InterfaceMemberBase member, Location loc) { - return new MemberName (member.MemberName.Left, prefix + member.ShortName, loc); + return new MemberName (member.MemberName.Left, prefix + member.ShortName, member.MemberName.ExplicitInterface, loc); } public void UpdateName (InterfaceMemberBase member) @@ -2514,6 +2510,11 @@ namespace Mono.CSharp { Block = block; } + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { if (a.Type == pa.Conditional) { @@ -2524,11 +2525,6 @@ namespace Mono.CSharp { base.ApplyAttributeBuilder (a, ctor, cdata, pa); } - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } - public override bool Define () { const Modifiers RequiredModifiers = Modifiers.PUBLIC | Modifiers.STATIC; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs index 3cdac0f082..307dd45ef2 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs @@ -35,6 +35,11 @@ namespace Mono.CSharp { } } + public static void Error_GlobalNamespaceRedefined (Report report, Location loc) + { + report.Error (1681, loc, "The global extern alias cannot be redefined"); + } + public void RegisterNamespace (Namespace child) { if (child != this) @@ -117,11 +122,11 @@ namespace Mono.CSharp { throw new InternalErrorException ("Namespace has a null fullname"); if (parent != null && parent.MemberName != MemberName.Null) - MemberName = new MemberName (parent.MemberName, name); + MemberName = new MemberName (parent.MemberName, name, Location.Null); else if (name.Length == 0) MemberName = MemberName.Null; else - MemberName = new MemberName (name); + MemberName = new MemberName (name, Location.Null); namespaces = new Dictionary (); cached_types = new Dictionary (); @@ -578,37 +583,38 @@ namespace Mono.CSharp { // public class NamespaceContainer : IMemberContext, ITypesContainer { + static readonly Namespace[] empty_namespaces = new Namespace[0]; + static readonly string[] empty_using_list = new string[0]; + Namespace ns; readonly ModuleContainer module; readonly NamespaceContainer parent; readonly CompilationSourceFile file; - readonly Location loc; + readonly MemberName name; NamespaceContainer implicit_parent; int symfile_id; - // Namespace using import block - List using_aliases; - List using_clauses; + List clauses; + + // Used by parsed to check for parser errors public bool DeclarationFound; - // End bool resolved; public readonly bool IsImplicit; public readonly TypeContainer SlaveDeclSpace; - static readonly Namespace [] empty_namespaces = new Namespace [0]; - static readonly string[] empty_using_list = new string[0]; - Namespace [] namespace_using_table; + Namespace[] namespace_using_table; + Dictionary aliases; public NamespaceContainer (MemberName name, ModuleContainer module, NamespaceContainer parent, CompilationSourceFile sourceFile) { this.module = module; this.parent = parent; this.file = sourceFile; - this.loc = name == null ? Location.Null : name.Location; + this.name = name ?? MemberName.Null; if (parent != null) ns = parent.NS.GetNamespace (name.GetName (), true); @@ -634,105 +640,46 @@ namespace Mono.CSharp { public Location Location { get { - return loc; + return name.Location; } } public MemberName MemberName { get { - return ns.MemberName; + return name; } } - public CompilationSourceFile SourceFile { + public NamespaceContainer Parent { get { - return file; + return parent; } } - public List Usings { + public CompilationSourceFile SourceFile { get { - return using_clauses; + return file; } } - #endregion - - // - // Extracts the using alises and using clauses into a couple of - // arrays that might already have the same information; Used by the - // C# Eval mode. - // - public void Extract (List out_using_aliases, List out_using_clauses) - { - if (using_aliases != null){ - foreach (NamespaceUsingAlias uae in using_aliases){ - bool replaced = false; - - for (int i = 0; i < out_using_aliases.Count; i++){ - NamespaceUsingAlias out_uea = (NamespaceUsingAlias) out_using_aliases [i]; - - if (out_uea.Alias == uae.Alias){ - out_using_aliases [i] = uae; - replaced = true; - break; - } - } - if (!replaced) - out_using_aliases.Add (uae); - } - } - - if (using_clauses != null){ - foreach (NamespaceUsing ue in using_clauses){ - bool found = false; - - foreach (NamespaceUsing out_ue in out_using_clauses) - if (out_ue.Name == ue.Name){ - found = true; - break; - } - if (!found) - out_using_clauses.Add (ue); - } - } - } - - // - // According to section 16.3.1 (using-alias-directive), the namespace-or-type-name is - // resolved as if the immediately containing namespace body has no using-directives. - // - // Section 16.3.2 says that the same rule is applied when resolving the namespace-name - // in the using-namespace-directive. - // - // To implement these rules, the expressions in the using directives are resolved using - // the "doppelganger" (ghostly bodiless duplicate). - // - NamespaceContainer doppelganger; - NamespaceContainer Doppelganger { + public List Usings { get { - if (!IsImplicit && doppelganger == null) { - doppelganger = new NamespaceContainer (module, ImplicitParent, file, ns, true); - doppelganger.using_aliases = using_aliases; - } - return doppelganger; + return clauses; } } + #endregion + public Namespace NS { get { return ns; } } - public NamespaceContainer Parent { - get { return parent; } - } - public NamespaceContainer ImplicitParent { get { if (parent == null) return null; if (implicit_parent == null) { - implicit_parent = (parent.NS == ns.Parent) + implicit_parent = (parent.ns == ns.Parent) ? parent : new NamespaceContainer (module, parent, file, ns.Parent, false); } @@ -740,78 +687,47 @@ namespace Mono.CSharp { } } - /// - /// Records a new namespace for resolving name references - /// - public void AddUsing (MemberName name, Location loc) + public void AddUsing (UsingNamespace un) { if (DeclarationFound){ - Compiler.Report.Error (1529, loc, "A using clause must precede all other namespace elements except extern alias declarations"); + Compiler.Report.Error (1529, un.Location, "A using clause must precede all other namespace elements except extern alias declarations"); } - if (using_clauses == null) { - using_clauses = new List (); - } else { - foreach (NamespaceUsing old_entry in using_clauses) { - if (name.Equals (old_entry.MemberName)) { - Compiler.Report.SymbolRelatedToPreviousError (old_entry.Location, old_entry.GetSignatureForError ()); - Compiler.Report.Warning (105, 3, loc, "The using directive for `{0}' appeared previously in this namespace", name.GetSignatureForError ()); - return; - } - } - } - - using_clauses.Add (new NamespaceUsing (name)); - } + if (clauses == null) + clauses = new List (); - public void AddUsingAlias (string alias, MemberName name, Location loc) - { - if (DeclarationFound){ - Compiler.Report.Error (1529, loc, "A using clause must precede all other namespace elements except extern alias declarations"); - } + clauses.Add (un); - AddUsingAlias (new LocalUsingAliasEntry (alias, name, loc)); + resolved = false; } - public void AddUsingExternalAlias (string alias, Location loc, Report Report) + public void AddUsing (UsingAliasNamespace un) { - bool not_first = using_clauses != null || DeclarationFound; - if (using_aliases != null && !not_first) { - foreach (NamespaceUsingAlias uae in using_aliases) { - if (uae is LocalUsingAliasEntry) { - not_first = true; - break; - } - } - } - - if (not_first) - Report.Error (439, loc, "An extern alias declaration must precede all other elements"); - - if (alias == "global") { - Error_GlobalNamespaceRedefined (loc, Report); - return; + if (DeclarationFound){ + Compiler.Report.Error (1529, un.Location, "A using clause must precede all other namespace elements except extern alias declarations"); } - AddUsingAlias (new NamespaceUsingAlias (alias, loc)); + AddAlias (un); } - void AddUsingAlias (NamespaceUsingAlias uae) + void AddAlias (UsingAliasNamespace un) { - if (using_aliases == null) { - using_aliases = new List (); + if (clauses == null) { + clauses = new List (); } else { - foreach (NamespaceUsingAlias entry in using_aliases) { - if (uae.Alias == entry.Alias) { - Compiler.Report.SymbolRelatedToPreviousError (uae.Location, uae.Alias); - Compiler.Report.Error (1537, entry.Location, "The using alias `{0}' appeared previously in this namespace", - entry.Alias); - return; + foreach (var entry in clauses) { + var a = entry as UsingAliasNamespace; + if (a != null && a.Alias.Value == un.Alias.Value) { + Compiler.Report.SymbolRelatedToPreviousError (a.Location, ""); + Compiler.Report.Error (1537, un.Location, + "The using alias `{0}' appeared previously in this namespace", un.Alias.Value); } } } - using_aliases.Add (uae); + clauses.Add (un); + + resolved = false; } // @@ -821,7 +737,7 @@ namespace Mono.CSharp { public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) { List candidates = null; - foreach (Namespace n in GetUsingTable ()) { + foreach (Namespace n in namespace_using_table) { var a = n.LookupExtensionMethod (this, extensionType, name, arity); if (a == null) continue; @@ -866,7 +782,7 @@ namespace Mono.CSharp { IEnumerable all = Enumerable.Empty (); for (NamespaceContainer curr_ns = this; curr_ns != null; curr_ns = curr_ns.ImplicitParent){ - foreach (Namespace using_ns in GetUsingTable ()){ + foreach (Namespace using_ns in namespace_using_table){ if (prefix.StartsWith (using_ns.Name)){ int ld = prefix.LastIndexOf ('.'); if (ld != -1){ @@ -881,18 +797,35 @@ namespace Mono.CSharp { return all.Distinct ().ToList (); } + + + // + // Looks-up a alias named @name in this and surrounding namespace declarations + // + public FullNamedExpression LookupExternAlias (string name) + { + if (aliases == null) + return null; + + UsingAliasNamespace uan; + if (aliases.TryGetValue (name, out uan) && uan is UsingExternAlias) + return uan.ResolvedExpression; + + return null; + } + // // Looks-up a alias named @name in this and surrounding namespace declarations + // public FullNamedExpression LookupNamespaceAlias (string name) { for (NamespaceContainer n = this; n != null; n = n.ImplicitParent) { - if (n.using_aliases == null) + if (n.aliases == null) continue; - foreach (NamespaceUsingAlias ue in n.using_aliases) { - if (ue.Alias == name) - return ue.Resolve (Doppelganger ?? this, Doppelganger == null); - } + UsingAliasNamespace uan; + if (n.aliases.TryGetValue (name, out uan)) + return uan.ResolvedExpression; } return null; @@ -908,26 +841,19 @@ namespace Mono.CSharp { // // Check aliases. // - if (using_aliases != null && arity == 0) { - foreach (NamespaceUsingAlias ue in using_aliases) { - if (ue.Alias == name) { - if (fne != null) { - if (Doppelganger != null) { - if (mode == LookupMode.Normal) { - // TODO: Namespace has broken location - //Report.SymbolRelatedToPreviousError (fne.Location, null); - Compiler.Report.SymbolRelatedToPreviousError (ue.Location, null); - Compiler.Report.Error (576, loc, - "Namespace `{0}' contains a definition with same name as alias `{1}'", - GetSignatureForError (), name); - } - } else { - return fne; - } - } - - return ue.Resolve (Doppelganger ?? this, Doppelganger == null); + if (aliases != null && arity == 0) { + UsingAliasNamespace uan; + if (aliases.TryGetValue (name, out uan)) { + if (fne != null) { + // TODO: Namespace has broken location + //Report.SymbolRelatedToPreviousError (fne.Location, null); + Compiler.Report.SymbolRelatedToPreviousError (uan.Location, null); + Compiler.Report.Error (576, loc, + "Namespace `{0}' contains a definition with same name as alias `{1}'", + GetSignatureForError (), name); } + + return uan.ResolvedExpression; } } @@ -941,9 +867,11 @@ namespace Mono.CSharp { // Check using entries. // FullNamedExpression match = null; - foreach (Namespace using_ns in GetUsingTable ()) { + foreach (Namespace using_ns in namespace_using_table) { + // // A using directive imports only types contained in the namespace, it // does not import any nested namespaces + // fne = using_ns.LookupType (this, name, arity, mode, loc); if (fne == null) continue; @@ -983,41 +911,20 @@ namespace Mono.CSharp { return match; } - Namespace [] GetUsingTable () - { - if (namespace_using_table != null) - return namespace_using_table; - - if (using_clauses == null) - return empty_namespaces; - - var list = new List (using_clauses.Count); - - foreach (NamespaceUsing ue in using_clauses) { - Namespace using_ns = ue.Resolve (Doppelganger); - if (using_ns == null) - continue; - - list.Add (using_ns); - } - - if (Compiler.Settings.StatementMode) - return list.ToArray (); - - namespace_using_table = list.ToArray (); - return namespace_using_table; - } - public int SymbolFileID { get { if (symfile_id == 0 && file.SourceFileEntry != null) { int parent_id = parent == null ? 0 : parent.SymbolFileID; string [] using_list = empty_using_list; - if (using_clauses != null) { - using_list = new string [using_clauses.Count]; - for (int i = 0; i < using_clauses.Count; i++) - using_list [i] = ((NamespaceUsing) using_clauses [i]).MemberName.GetName (); + if (clauses != null) { + // TODO: Why is it needed, what to do with aliases + var ul = new List (); + foreach (var c in clauses) { + ul.Add (c.ResolvedExpression.GetSignatureForError ()); + } + + using_list = ul.ToArray (); } symfile_id = SymbolWriter.DefineNamespace (ns.Name, file.CompileUnitEntry, using_list, parent_id); @@ -1036,11 +943,6 @@ namespace Mono.CSharp { Console.WriteLine (" Try using -pkg:" + s); } - public static void Error_GlobalNamespaceRedefined (Location loc, Report Report) - { - Report.Error (1681, loc, "The global extern alias cannot be redefined"); - } - public static void Error_NamespaceNotFound (Location loc, string name, Report Report) { Report.Error (246, loc, "The type or namespace name `{0}' could not be found. Are you missing a using directive or an assembly reference?", @@ -1069,29 +971,76 @@ namespace Mono.CSharp { } } - /// - /// Used to validate that all the using clauses are correct - /// after we are finished parsing all the files. - /// - public void Resolve () + public void Define () { if (resolved) return; + // FIXME: Because we call Define from bottom not top + if (parent != null) + parent.Define (); + + namespace_using_table = empty_namespaces; resolved = true; - if (using_aliases != null) { - foreach (NamespaceUsingAlias ue in using_aliases) - ue.Resolve (Doppelganger, Doppelganger == null); - } + if (clauses != null) { + var list = new List (clauses.Count); + bool post_process_using_aliases = false; + + for (int i = 0; i < clauses.Count; ++i) { + var entry = clauses[i]; + + if (entry.Alias != null) { + if (aliases == null) + aliases = new Dictionary (); + + // + // Aliases are not available when resolving using section + // except extern aliases + // + if (entry is UsingExternAlias) { + entry.Define (this); + if (entry.ResolvedExpression != null) + aliases.Add (entry.Alias.Value, (UsingExternAlias) entry); + + clauses.RemoveAt (i--); + } else { + post_process_using_aliases = true; + } - if (using_clauses != null) { - foreach (NamespaceUsing ue in using_clauses) - ue.Resolve (Doppelganger); - } + continue; + } - if (parent != null) - parent.Resolve (); + entry.Define (this); + + Namespace using_ns = entry.ResolvedExpression as Namespace; + if (using_ns == null) + continue; + + if (list.Contains (using_ns)) { + Compiler.Report.Warning (105, 3, entry.Location, + "The using directive for `{0}' appeared previously in this namespace", using_ns.GetSignatureForError ()); + } else { + list.Add (using_ns); + } + } + + namespace_using_table = list.ToArray (); + + if (post_process_using_aliases) { + for (int i = 0; i < clauses.Count; ++i) { + var entry = clauses[i]; + if (entry.Alias != null) { + entry.Define (this); + if (entry.ResolvedExpression != null) { + aliases.Add (entry.Alias.Value, (UsingAliasNamespace) entry); + } + + clauses.RemoveAt (i--); + } + } + } + } } public string GetSignatureForError () @@ -1113,12 +1062,12 @@ namespace Mono.CSharp { get { return SlaveDeclSpace.CurrentMemberDefinition; } } - public TypeParameter[] CurrentTypeParameters { + public TypeParameters CurrentTypeParameters { get { return SlaveDeclSpace.CurrentTypeParameters; } } public bool IsObsolete { - get { return SlaveDeclSpace.IsObsolete; } + get { return false; } } public bool IsUnsafe { @@ -1136,106 +1085,199 @@ namespace Mono.CSharp { #endregion } - public class NamespaceUsing + public class UsingNamespace { - readonly MemberName name; - Namespace resolved; + readonly ATypeNameExpression expr; + readonly Location loc; + protected FullNamedExpression resolved; - public NamespaceUsing (MemberName name) + public UsingNamespace (ATypeNameExpression expr, Location loc) { - this.name = name; + this.expr = expr; + this.loc = loc; } - public string GetSignatureForError () - { - return name.GetSignatureForError (); - } + #region Properties - public Location Location - { - get { return name.Location; } + public virtual SimpleMemberName Alias { + get { + return null; + } } - public MemberName MemberName - { - get { return name; } + public Location Location { + get { + return loc; + } } - public string Name - { - get { return GetSignatureForError (); } + public ATypeNameExpression NamespaceExpression { + get { + return expr; + } } - public Namespace Resolve (IMemberContext rc) - { - if (resolved != null) + public FullNamedExpression ResolvedExpression { + get { return resolved; + } + } - FullNamedExpression fne = name.GetTypeExpression ().ResolveAsTypeOrNamespace (rc); - if (fne == null) - return null; + #endregion - resolved = fne as Namespace; - if (resolved == null) { - rc.Module.Compiler.Report.SymbolRelatedToPreviousError (fne.Type); - rc.Module.Compiler.Report.Error (138, Location, - "`{0}' is a type not a namespace. A using namespace directive can only be applied to namespaces", - GetSignatureForError ()); + public string GetSignatureForError () + { + return expr.GetSignatureForError (); + } + + public virtual void Define (NamespaceContainer ctx) + { + resolved = expr.ResolveAsTypeOrNamespace (ctx); + var ns = resolved as Namespace; + if (ns == null) { + if (resolved != null) { + ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (resolved.Type); + ctx.Module.Compiler.Report.Error (138, Location, + "`{0}' is a type not a namespace. A using namespace directive can only be applied to namespaces", + GetSignatureForError ()); + } } - return resolved; } } - public class NamespaceUsingAlias + public class UsingExternAlias : UsingAliasNamespace { - public readonly string Alias; - public Location Location; - - public NamespaceUsingAlias (string alias, Location loc) + public UsingExternAlias (SimpleMemberName alias, Location loc) + : base (alias, null, loc) { - this.Alias = alias; - this.Location = loc; } - public virtual FullNamedExpression Resolve (IMemberContext rc, bool local) + public override void Define (NamespaceContainer ctx) { - FullNamedExpression fne = rc.Module.GetRootNamespace (Alias); - if (fne == null) { - rc.Module.Compiler.Report.Error (430, Location, + resolved = ctx.Module.GetRootNamespace (Alias.Value); + if (resolved == null) { + ctx.Module.Compiler.Report.Error (430, Location, "The extern alias `{0}' was not specified in -reference option", - Alias); + Alias.Value); } - - return fne; } } - class LocalUsingAliasEntry : NamespaceUsingAlias + public class UsingAliasNamespace : UsingNamespace { - FullNamedExpression resolved; - MemberName value; + readonly SimpleMemberName alias; - public LocalUsingAliasEntry (string alias, MemberName name, Location loc) - : base (alias, loc) + struct AliasContext : IMemberContext { - this.value = name; - } + readonly NamespaceContainer ns; - public override FullNamedExpression Resolve (IMemberContext rc, bool local) - { - if (resolved != null || value == null) - return resolved; + public AliasContext (NamespaceContainer ns) + { + this.ns = ns; + } + + public TypeSpec CurrentType { + get { + return null; + } + } + + public TypeParameters CurrentTypeParameters { + get { + return null; + } + } + + public MemberCore CurrentMemberDefinition { + get { + return null; + } + } + + public bool IsObsolete { + get { + return false; + } + } + + public bool IsUnsafe { + get { + throw new NotImplementedException (); + } + } + + public bool IsStatic { + get { + throw new NotImplementedException (); + } + } + + public ModuleContainer Module { + get { + return ns.Module; + } + } + + public string GetSignatureForError () + { + throw new NotImplementedException (); + } - if (local) + public ExtensionMethodCandidates LookupExtensionMethod (TypeSpec extensionType, string name, int arity) + { return null; + } + + public FullNamedExpression LookupNamespaceOrType (string name, int arity, LookupMode mode, Location loc) + { + var fne = ns.NS.LookupTypeOrNamespace (ns, name, arity, mode, loc); + if (fne != null) + return fne; + + // + // Only extern aliases are allowed in this context + // + fne = ns.LookupExternAlias (name); + if (fne != null) + return fne; + + if (ns.ImplicitParent != null) + return ns.ImplicitParent.LookupNamespaceOrType (name, arity, mode, loc); - resolved = value.GetTypeExpression ().ResolveAsTypeOrNamespace (rc); - if (resolved == null) { - value = null; return null; } - return resolved; + public FullNamedExpression LookupNamespaceAlias (string name) + { + return ns.LookupNamespaceAlias (name); + } + } + + public UsingAliasNamespace (SimpleMemberName alias, ATypeNameExpression expr, Location loc) + : base (expr, loc) + { + this.alias = alias; + } + + public override SimpleMemberName Alias { + get { + return alias; + } + } + + public override void Define (NamespaceContainer ctx) + { + // + // The namespace-or-type-name of a using-alias-directive is resolved as if + // the immediately containing compilation unit or namespace body had no + // using-directives. A using-alias-directive may however be affected + // by extern-alias-directives in the immediately containing compilation + // unit or namespace body + // + // We achieve that by introducing alias-context which redirect any local + // namespace or type resolve calls to parent namespace + // + resolved = NamespaceExpression.ResolveAsTypeOrNamespace (new AliasContext (ctx)); } } } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs index b173304cb2..e451167dc5 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs @@ -1001,20 +1001,24 @@ namespace Mono.CSharp.Nullable Expression left, right; Unwrap unwrap; - public Expression Left { - get { return this.left; } - } - - public Expression Right { - get { return this.right; } - } - public NullCoalescingOperator (Expression left, Expression right, Location loc) { this.left = left; this.right = right; this.loc = loc; } + + public Expression LeftExpression { + get { + return left; + } + } + + public Expression Right { + get { + return right; + } + } public override Expression CreateExpressionTree (ResolveContext ec) { diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs index 9fb4a57ffe..0a5590703e 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/parameter.cs @@ -234,10 +234,7 @@ namespace Mono.CSharp { TemporaryVariableReference expr_tree_variable; HoistedVariable hoisted_variant; - - public Modifier ParameterModifier { get { return modFlags; }} - public Expression DefaultExpression { get { return default_expr; }} - + public Parameter (FullNamedExpression type, string name, Modifier mod, Attributes attrs, Location loc) { this.name = name; @@ -251,6 +248,12 @@ namespace Mono.CSharp { #region Properties + public Expression DefaultExpression { + get { + return default_expr; + } + } + public DefaultParameterValueExpression DefaultValue { get { return default_expr as DefaultParameterValueExpression; @@ -279,6 +282,12 @@ namespace Mono.CSharp { } } + public Modifier ParameterModifier { + get { + return modFlags; + } + } + public TypeSpec Type { get { return parameter_type; @@ -1212,7 +1221,7 @@ namespace Mono.CSharp { // // Default parameter value expression. We need this wrapper to handle - // default parameter values of folded constants when for indexer parameters + // default parameter values of folded constants (e.g. indexer parameters). // The expression is resolved only once but applied to two methods which // both share reference to this expression and we ensure that resolving // this expression always returns same instance diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs index a9b066b436..b7403eda8e 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/pending.cs @@ -67,7 +67,7 @@ namespace Mono.CSharp { } } - public TypeParameter[] CurrentTypeParameters { + public TypeParameters CurrentTypeParameters { get { throw new NotImplementedException (); } @@ -443,7 +443,7 @@ namespace Mono.CSharp { optional = tm.optional; } - if (op == Operation.Lookup && name.Left != null && ambiguousCandidate == null) { + if (op == Operation.Lookup && name.ExplicitInterface != null && ambiguousCandidate == null) { ambiguousCandidate = m; continue; } diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs index 7c8f069b17..a4ce92af7f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs @@ -733,6 +733,12 @@ namespace Mono.CSharp { } + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + + void CreateAutomaticProperty () { // Create backing field @@ -757,11 +763,6 @@ namespace Mono.CSharp Set.Block.AddStatement (new StatementExpression (a)); } - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } - public override bool Define () { if (!base.Define ()) @@ -857,6 +858,11 @@ namespace Mono.CSharp { } + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + public override bool Define() { if (!base.Define ()) @@ -871,12 +877,6 @@ namespace Mono.CSharp return attribute_targets; } } - - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } - } /// @@ -909,8 +909,8 @@ namespace Mono.CSharp // Delegate obj1 = backing_field // do { // Delegate obj2 = obj1; - // obj1 = Interlocked.CompareExchange (ref backing_field, Delegate.Combine|Remove(obj2, value), obj1); - // } while (obj1 != obj2) + // obj1 = Interlocked.CompareExchange (ref backing_field, Delegate.Combine|Remove(obj2, value), obj1); + // } while ((object)obj1 != (object)obj2) // var field_info = ((EventField) method).backing_field; @@ -924,7 +924,9 @@ namespace Mono.CSharp block.AddStatement (new StatementExpression (new SimpleAssign (new LocalVariableReference (obj1, Location), f_expr))); var cond = new BooleanExpression (new Binary (Binary.Operator.Inequality, - new LocalVariableReference (obj1, Location), new LocalVariableReference (obj2, Location), Location)); + new Cast (new TypeExpression (Module.Compiler.BuiltinTypes.Object, Location), new LocalVariableReference (obj1, Location), Location), + new Cast (new TypeExpression (Module.Compiler.BuiltinTypes.Object, Location), new LocalVariableReference (obj2, Location), Location), + Location)); var body = new ExplicitBlock (block, Location, Location); block.AddStatement (new Do (body, cond, Location)); @@ -999,6 +1001,12 @@ namespace Mono.CSharp #region Properties + public List Declarators { + get { + return this.declarators; + } + } + bool HasBackingField { get { return !IsInterface && (ModFlags & Modifiers.ABSTRACT) == 0; @@ -1020,14 +1028,14 @@ namespace Mono.CSharp } } - public List Declarators { - get { - return this.declarators; - } - } - #endregion + + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + public void AddDeclarator (FieldDeclarator declarator) { if (declarators == null) @@ -1105,11 +1113,6 @@ namespace Mono.CSharp return true; } - - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } } public abstract class Event : PropertyBasedMember @@ -1310,7 +1313,7 @@ namespace Mono.CSharp spec = new EventSpec (Parent.Definition, this, MemberType, ModFlags, Add.Spec, remove.Spec); - Parent.MemberCache.AddMember (this, Name, spec); + Parent.MemberCache.AddMember (this, GetFullName (MemberName), spec); Parent.MemberCache.AddMember (this, AddBuilder.Name, Add.Spec); Parent.MemberCache.AddMember (this, RemoveBuilder.Name, remove.Spec); @@ -1513,15 +1516,15 @@ namespace Mono.CSharp #endregion + + public override void Accept (StructuralVisitor visitor) + { + visitor.Visit (this); + } + public override void ApplyAttributeBuilder (Attribute a, MethodSpec ctor, byte[] cdata, PredefinedAttributes pa) { if (a.Type == pa.IndexerName) { - if (IsExplicitImpl) { - Report.Error (415, a.Location, - "The `{0}' attribute is valid only on an indexer that is not an explicit interface member declaration", - TypeManager.CSharpName (a.Type)); - } - // Attribute was copied to container return; } @@ -1534,11 +1537,6 @@ namespace Mono.CSharp return Parent.MemberCache.CheckExistingMembersOverloads (this, parameters); } - public override void Accept (StructuralVisitor visitor) - { - visitor.Visit (this); - } - public override bool Define () { if (!base.Define ()) @@ -1554,21 +1552,28 @@ namespace Mono.CSharp if (compiling != null) compiling.Define (); - string name = indexer_attr.GetIndexerAttributeValue (); - if ((ModFlags & Modifiers.OVERRIDE) != 0) { + if (IsExplicitImpl) { + Report.Error (415, indexer_attr.Location, + "The `{0}' attribute is valid only on an indexer that is not an explicit interface member declaration", + indexer_attr.Type.GetSignatureForError ()); + } else if ((ModFlags & Modifiers.OVERRIDE) != 0) { Report.Error (609, indexer_attr.Location, "Cannot set the `IndexerName' attribute on an indexer marked override"); - } + } else { + string name = indexer_attr.GetIndexerAttributeValue (); - if (!string.IsNullOrEmpty (name)) - ShortName = name; + if (!string.IsNullOrEmpty (name)) { + SetMemberName (new MemberName (MemberName.Left, name, Location)); + } + } } } if (InterfaceType != null) { string base_IndexerName = InterfaceType.MemberDefinition.GetAttributeDefaultMember (); - if (base_IndexerName != Name) - ShortName = base_IndexerName; + if (base_IndexerName != ShortName) { + SetMemberName (new MemberName (MemberName.Left, base_IndexerName, new TypeExpression (InterfaceType, Location), Location)); + } } if (!Parent.PartialContainer.AddMember (this)) @@ -1606,9 +1611,9 @@ namespace Mono.CSharp public override string GetSignatureForError () { StringBuilder sb = new StringBuilder (Parent.GetSignatureForError ()); - if (MemberName.Left != null) { + if (MemberName.ExplicitInterface != null) { sb.Append ("."); - sb.Append (MemberName.Left.GetSignatureForError ()); + sb.Append (MemberName.ExplicitInterface.GetSignatureForError ()); } sb.Append (".this"); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/reflection.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/reflection.cs index 6f2f183a83..5181e3f325 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/reflection.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/reflection.cs @@ -442,12 +442,7 @@ namespace Mono.CSharp return assembly.GetType (compiler.BuiltinTypes.Object.FullName) != null; } - public override Assembly LoadAssemblyFile (string fileName) - { - return LoadAssemblyFile (fileName, false); - } - - Assembly LoadAssemblyFile (string assembly, bool soft) + public override Assembly LoadAssemblyFile (string assembly, bool isImplicitReference) { Assembly a = null; @@ -464,7 +459,7 @@ namespace Mono.CSharp a = Assembly.Load (ass); } } catch (FileNotFoundException) { - bool err = !soft; + bool err = !isImplicitReference; foreach (string dir in paths) { string full_path = Path.Combine (dir, assembly); if (!assembly.EndsWith (".dll") && !assembly.EndsWith (".exe")) @@ -490,11 +485,6 @@ namespace Mono.CSharp return a; } - public override Assembly LoadAssemblyDefault (string fileName) - { - return LoadAssemblyFile (fileName, true); - } - Module LoadModuleFile (AssemblyDefinitionDynamic assembly, string module) { string total_log = ""; diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/roottypes.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/roottypes.cs index 962937befc..84c71fddc0 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/roottypes.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/roottypes.cs @@ -351,6 +351,12 @@ namespace Mono.CSharp tc.CloseType (); } + if (anonymous_types != null) { + foreach (var atypes in anonymous_types) + foreach (var at in atypes.Value) + at.CloseType (); + } + if (compiler_generated != null) foreach (CompilerGeneratedClass c in compiler_generated) c.CloseType (); @@ -367,7 +373,7 @@ namespace Mono.CSharp public RootNamespace CreateRootNamespace (string alias) { if (alias == global_ns.Alias) { - NamespaceContainer.Error_GlobalNamespaceRedefined (Location.Null, Report); + RootNamespace.Error_GlobalNamespaceRedefined (Report, Location.Null); return global_ns; } @@ -445,6 +451,12 @@ namespace Mono.CSharp foreach (TypeContainer tc in types) tc.VerifyMembers (); + if (anonymous_types != null) { + foreach (var atypes in anonymous_types) + foreach (var at in atypes.Value) + at.EmitType (); + } + if (compiler_generated != null) foreach (var c in compiler_generated) c.EmitType (); @@ -540,7 +552,7 @@ namespace Mono.CSharp } string ns = mn.Left != null ? mn.Left.GetSignatureForError () : Module.GlobalRootNamespace.GetSignatureForError (); - mn = new MemberName (mn.Name, mn.TypeArguments, mn.Location); + mn = new MemberName (mn.Name, mn.TypeParameters, mn.Location); Report.SymbolRelatedToPreviousError (found.Location, ""); Report.Error (101, container.Location, diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs index 2e9d9731f7..104e15371f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs @@ -154,9 +154,11 @@ namespace Mono.CSharp { FalseStatement = false_statement; loc = l; } - + public Expression Expr { - get { return this.expr; } + get { + return this.expr; + } } public override bool Resolve (BlockContext ec) @@ -639,9 +641,11 @@ namespace Mono.CSharp { this.expr = expr; loc = expr.Location; } - + public ExpressionStatement Expr { - get { return this.expr; } + get { + return this.expr; + } } protected override void CloneTo (CloneContext clonectx, Statement t) @@ -676,7 +680,7 @@ namespace Mono.CSharp { this.expr = expr; } - public Expression Expression { + public Expression Expr { get { return expr; } @@ -779,25 +783,30 @@ namespace Mono.CSharp { /// public class Return : ExitStatement { - public Expression Expr { get; protected set; } + Expression expr; public Return (Expression expr, Location l) { - Expr = expr; + this.expr = expr; loc = l; } #region Properties - public Expression Expression { + + public Expression Expr { get { - return Expr; + return expr; + } + protected set { + expr = value; } } + #endregion protected override bool DoResolve (BlockContext ec) { - if (Expr == null) { + if (expr == null) { if (ec.ReturnType.Kind == MemberKind.Void) return true; @@ -811,7 +820,7 @@ namespace Mono.CSharp { // // Extra trick not to emit ret/leave inside awaiter body // - Expr = EmptyExpression.Null; + expr = EmptyExpression.Null; return true; } } @@ -827,7 +836,7 @@ namespace Mono.CSharp { return false; } - Expr = Expr.Resolve (ec); + expr = expr.Resolve (ec); TypeSpec block_return_type = ec.ReturnType; AnonymousExpression am = ec.CurrentAnonymousMethod; @@ -845,12 +854,12 @@ namespace Mono.CSharp { var async_block = am as AsyncInitializer; if (async_block != null) { - if (Expr != null) { + if (expr != null) { var storey = (AsyncTaskStorey) am.Storey; var async_type = storey.ReturnType; if (async_type == null && async_block.ReturnTypeInference != null) { - async_block.ReturnTypeInference.AddCommonTypeBound (Expr.Type); + async_block.ReturnTypeInference.AddCommonTypeBound (expr.Type); return true; } @@ -871,20 +880,20 @@ namespace Mono.CSharp { } } else { var l = am as AnonymousMethodBody; - if (l != null && l.ReturnTypeInference != null && Expr != null) { - l.ReturnTypeInference.AddCommonTypeBound (Expr.Type); + if (l != null && l.ReturnTypeInference != null && expr != null) { + l.ReturnTypeInference.AddCommonTypeBound (expr.Type); return true; } } } - if (Expr == null) + if (expr == null) return false; - if (Expr.Type != block_return_type) { - Expr = Convert.ImplicitConversionRequired (ec, Expr, block_return_type, loc); + if (expr.Type != block_return_type) { + expr = Convert.ImplicitConversionRequired (ec, expr, block_return_type, loc); - if (Expr == null) { + if (expr == null) { if (am != null && block_return_type == ec.ReturnType) { ec.Report.Error (1662, loc, "Cannot convert `{0}' to delegate type `{1}' because some of the return types in the block are not implicitly convertible to the delegate return type", @@ -899,8 +908,8 @@ namespace Mono.CSharp { protected override void DoEmit (EmitContext ec) { - if (Expr != null) { - Expr.Emit (ec); + if (expr != null) { + expr.Emit (ec); var async_body = ec.CurrentAnonymousMethod as AsyncInitializer; if (async_body != null) { @@ -936,9 +945,10 @@ namespace Mono.CSharp { { Return target = (Return) t; // It's null for simple return; - if (Expr != null) - target.Expr = Expr.Clone (clonectx); + if (expr != null) + target.expr = expr.Clone (clonectx); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -1135,9 +1145,11 @@ namespace Mono.CSharp { expr = e; loc = l; } - + public Expression Expr { - get { return this.expr; } + get { + return this.expr; + } } public override bool Resolve (BlockContext ec) @@ -1207,11 +1219,13 @@ namespace Mono.CSharp { this.expr = expr; loc = l; } - + public Expression Expr { - get { return this.expr; } + get { + return this.expr; + } } - + public override bool Resolve (BlockContext ec) { if (expr == null) { @@ -1872,6 +1886,7 @@ namespace Mono.CSharp { public static string GetCompilerGeneratedName (Block block) { + // HACK: Debugger depends on the name semantics return "$locvar" + block.ParametersBlock.TemporaryLocalsCount++.ToString ("X"); } @@ -1988,7 +2003,7 @@ namespace Mono.CSharp { int? resolving_init_idx; - protected Block original; + Block original; #if DEBUG static int id; @@ -2035,6 +2050,9 @@ namespace Mono.CSharp { get { return original; } + protected set { + original = value; + } } public bool IsCompilerGenerated { @@ -2051,10 +2069,11 @@ namespace Mono.CSharp { get { return (flags & Flags.Unsafe) != 0; } set { flags |= Flags.Unsafe; } } - + public List Statements { - get { return this.statements; } + get { return statements; } } + #endregion public Block CreateSwitchBlock (Location start) @@ -2328,6 +2347,7 @@ namespace Mono.CSharp { foreach (Statement s in statements) target.statements.Add (s.Clone (clonectx)); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -2692,7 +2712,7 @@ namespace Mono.CSharp { // Overwrite original for comparison purposes when linking cross references // between anonymous methods // - original = source; + Original = source; } #region Properties @@ -2906,7 +2926,7 @@ namespace Mono.CSharp { ParametersBlock pb = new ParametersBlock (this, ParametersCompiled.EmptyReadOnlyParameters, StartLocation); pb.EndLocation = EndLocation; pb.statements = statements; - pb.original = this; + pb.Original = this; var iterator = new Iterator (pb, method, host, iterator_type, is_enumerable); am_storey = new IteratorStorey (iterator); @@ -2921,7 +2941,7 @@ namespace Mono.CSharp { ParametersBlock pb = new ParametersBlock (this, ParametersCompiled.EmptyReadOnlyParameters, StartLocation); pb.EndLocation = EndLocation; pb.statements = statements; - pb.original = this; + pb.Original = this; var block_type = host.Module.Compiler.BuiltinTypes.Void; var initializer = new AsyncInitializer (pb, host, block_type); @@ -4468,11 +4488,13 @@ namespace Mono.CSharp { { this.expr = expr; } - + public Expression Expr { - get { return this.expr; } + get { + return this.expr; + } } - + public override bool Resolve (BlockContext ec) { expr = expr.Resolve (ec); @@ -5151,6 +5173,12 @@ namespace Mono.CSharp { this.fini = fini; } + public Block Finallyblock { + get { + return fini; + } + } + public override bool Resolve (BlockContext ec) { bool ok = true; @@ -5202,23 +5230,20 @@ namespace Mono.CSharp { public class TryCatch : ExceptionStatement { public Block Block; - public List Specific; - public Catch General; + List clauses; readonly bool inside_try_finally; public TryCatch (Block block, List catch_clauses, Location l, bool inside_try_finally) : base (l) { this.Block = block; - this.Specific = catch_clauses; + this.clauses = catch_clauses; this.inside_try_finally = inside_try_finally; - - if (catch_clauses != null) { - Catch c = catch_clauses [0]; - if (c.IsGeneral) { - this.General = c; - catch_clauses.RemoveAt (0); - } + } + + public List Clauses { + get { + return clauses; } } @@ -5237,9 +5262,8 @@ namespace Mono.CSharp { if (!Block.Resolve (ec)) ok = false; - TypeSpec[] prev_catches = new TypeSpec [Specific.Count]; - int last_index = 0; - foreach (Catch c in Specific){ + for (int i = 0; i < clauses.Count; ++i) { + var c = clauses[i]; ec.CurrentBranching.CreateSibling (c.Block, FlowBranching.SiblingType.Catch); if (!c.Resolve (ec)) { @@ -5248,37 +5272,40 @@ namespace Mono.CSharp { } TypeSpec resolved_type = c.CatchType; - for (int ii = 0; ii < last_index; ++ii) { - if (resolved_type == prev_catches[ii] || TypeSpec.IsBaseClass (resolved_type, prev_catches[ii], true)) { - ec.Report.Error (160, c.loc, - "A previous catch clause already catches all exceptions of this or a super type `{0}'", - TypeManager.CSharpName (prev_catches [ii])); - ok = false; - } - } + for (int ii = 0; ii < clauses.Count; ++ii) { + if (ii == i) + continue; - prev_catches [last_index++] = resolved_type; - } + if (clauses[ii].IsGeneral) { + if (resolved_type.BuiltinType != BuiltinTypeSpec.Type.Exception) + continue; + + if (!ec.Module.DeclaringAssembly.WrapNonExceptionThrows) + continue; + + if (!ec.Module.PredefinedAttributes.RuntimeCompatibility.IsDefined) + continue; + + ec.Report.Warning (1058, 1, c.loc, + "A previous catch clause already catches all exceptions. All non-exceptions thrown will be wrapped in a `System.Runtime.CompilerServices.RuntimeWrappedException'"); - if (General != null) { - foreach (Catch c in Specific) { - if (c.CatchType.BuiltinType != BuiltinTypeSpec.Type.Exception) continue; + } - if (!ec.Module.DeclaringAssembly.WrapNonExceptionThrows) + if (ii >= i) continue; - if (!ec.Module.PredefinedAttributes.RuntimeCompatibility.IsDefined) + var ct = clauses[ii].CatchType; + if (ct == null) continue; - ec.Report.Warning (1058, 1, c.loc, - "A previous catch clause already catches all exceptions. All non-exceptions thrown will be wrapped in a `System.Runtime.CompilerServices.RuntimeWrappedException'"); + if (resolved_type == ct || TypeSpec.IsBaseClass (resolved_type, ct, true)) { + ec.Report.Error (160, c.loc, + "A previous catch clause already catches all exceptions of this or a super type `{0}'", + ct.GetSignatureForError ()); + ok = false; + } } - - ec.CurrentBranching.CreateSibling (General.Block, FlowBranching.SiblingType.Catch); - - if (!General.Resolve (ec)) - ok = false; } ec.EndFlowBranching (); @@ -5293,12 +5320,9 @@ namespace Mono.CSharp { Block.Emit (ec); - foreach (Catch c in Specific) + foreach (Catch c in clauses) c.Emit (ec); - if (General != null) - General.Emit (ec); - if (!inside_try_finally) ec.EndExceptionBlock (); } @@ -5308,14 +5332,13 @@ namespace Mono.CSharp { TryCatch target = (TryCatch) t; target.Block = clonectx.LookupBlock (Block); - if (General != null) - target.General = (Catch) General.Clone (clonectx); - if (Specific != null){ - target.Specific = new List (); - foreach (Catch c in Specific) - target.Specific.Add ((Catch) c.Clone (clonectx)); + if (clauses != null){ + target.clauses = new List (); + foreach (Catch c in clauses) + target.clauses.Add ((Catch) c.Clone (clonectx)); } } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -5468,7 +5491,7 @@ namespace Mono.CSharp { declarators = null; return stmt; - } + } public override object Accept (StructuralVisitor visitor) { @@ -5492,7 +5515,7 @@ namespace Mono.CSharp { #region Properties - public Expression Expression { + public Expression Expr { get { return decl.Variable == null ? decl.Initializer : null; } @@ -5571,6 +5594,7 @@ namespace Mono.CSharp { target.decl = (VariableDeclaration) decl.Clone (clonectx); target.stmt = stmt.Clone (clonectx); } + public override object Accept (StructuralVisitor visitor) { return visitor.Visit (this); @@ -6114,14 +6138,6 @@ namespace Mono.CSharp { LocalVariable variable; Expression expr; Statement statement; - - public Expression TypeExpr { - get { return this.type; } - } - - public LocalVariable Variable { - get { return this.variable; } - } public Foreach (Expression type, LocalVariable var, Expression expr, Statement stmt, Location l) { @@ -6132,14 +6148,23 @@ namespace Mono.CSharp { loc = l; } + public Expression Expr { + get { return expr; } + } + public Statement Statement { get { return statement; } } - public Expression Expr { - get { return this.expr; } + public Expression TypeExpression { + get { return type; } } + public LocalVariable Variable { + get { return variable; } + } + + public override bool Resolve (BlockContext ec) { expr = expr.Resolve (ec); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs b/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs index d1025a2176..3a518a4fed 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs @@ -37,7 +37,7 @@ namespace Mono.CSharp { return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode (obj); } } - +#if !NET_4_0 public class Tuple : IEquatable> { public Tuple (T1 item1, T2 item2) @@ -107,6 +107,7 @@ namespace Mono.CSharp { return new Tuple (item1, item2, item3); } } +#endif static class ArrayComparer {