diff options
84 files changed, 6626 insertions, 5431 deletions
diff --git a/.gitignore b/.gitignore index 93f2f6535f..601e78f575 100644 --- a/.gitignore +++ b/.gitignore @@ -118,6 +118,7 @@ main/external/Makefile /main/src/addins/NUnit/NUnitRunner/Makefile /main/src/addins/TextTemplating/Makefile /main/src/addins/TextTemplating/Mono.TextTemplating/Makefile +/main/src/addins/TextTemplating/Mono.TextTemplating.Tests/Makefile /main/src/addins/TextTemplating/MonoDevelop.TextTemplating/Makefile /main/src/addins/TextTemplating/TextTransform/Makefile /main/src/addins/VBNetBinding/Makefile @@ -144,7 +145,10 @@ main/external/Makefile /main/src/tools/MacCrashLogger/Makefile /main/src/tools/mdcrashlog/Makefile /main/tests/Makefile +/main/tests/MacPlatform.Tests/Makefile +/main/tests/MonoDevelop.MacDev.Tests/Makefile /main/tests/UnitTests/Makefile +/main/tests/UserInterfaceTests/Makefile /main/theme-icons/Makefile /main/contrib/NGit/Makefile /main/contrib/NSch/Makefile diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Analysis/DefiniteAssignmentAnalysis.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Analysis/DefiniteAssignmentAnalysis.cs index fdcc4d717c..fa3ca39144 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Analysis/DefiniteAssignmentAnalysis.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Analysis/DefiniteAssignmentAnalysis.cs @@ -721,7 +721,7 @@ namespace ICSharpCode.NRefactory.CSharp.Analysis } DefiniteAssignmentStatus afterTrue = conditionalExpression.TrueExpression.AcceptVisitor(this, beforeTrue); - DefiniteAssignmentStatus afterFalse = conditionalExpression.TrueExpression.AcceptVisitor(this, beforeFalse); + DefiniteAssignmentStatus afterFalse = conditionalExpression.FalseExpression.AcceptVisitor(this, beforeFalse); return MergeStatus(CleanSpecialValues(afterTrue), CleanSpecialValues(afterFalse)); } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/AstNodeCollection.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/AstNodeCollection.cs index 4e28849be4..b727dc2112 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/AstNodeCollection.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/AstNodeCollection.cs @@ -204,5 +204,21 @@ namespace ICSharpCode.NRefactory.CSharp { node.InsertChildBefore(existingItem, newItem, role); } + + /// <summary> + /// Applies the <paramref name="visitor"/> to all nodes in this collection. + /// </summary> + public void AcceptVisitor(IAstVisitor visitor) + { + AstNode next; + for (AstNode cur = node.FirstChild; cur != null; cur = next) { + Debug.Assert(cur.Parent == node); + // Remember next before yielding cur. + // This allows removing/replacing nodes while iterating through the list. + next = cur.NextSibling; + if (cur.Role == role) + cur.AcceptVisitor(visitor); + } + } } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/CompilationUnit.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/CompilationUnit.cs index 2897d7fab2..a48b924974 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/CompilationUnit.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Ast/CompilationUnit.cs @@ -61,13 +61,30 @@ namespace ICSharpCode.NRefactory.CSharp public AstNodeCollection<AstNode> Members { get { return GetChildrenByRole(MemberRole); } } - + + IList<string> conditionalSymbols = null; + List<Error> errors = new List<Error> (); public List<Error> Errors { get { return errors; } } - + + + /// <summary> + /// Gets the conditional symbols used to parse the source file. Note that this list contains + /// the conditional symbols at the start of the first token in the file - including the ones defined + /// in the source file. + /// </summary> + public IList<string> ConditionalSymbols { + get { + return conditionalSymbols ?? EmptyList<string>.Instance; + } + internal set { + conditionalSymbols = value; + } + } + /// <summary> /// Gets the expression that was on top of the parse stack. /// This is the only way to get an expression that isn't part of a statment. diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 62ca8d9939..030e4cf044 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -117,7 +117,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var nonWsResult = MagicKeyCompletion( document.GetCharAt(offset), controlSpace - ); + ); if (nonWsResult != null) { var text = new HashSet<string>(result.Select(r => r.CompletionText)); result = result.Concat(nonWsResult.Where(r => !text.Contains(r.CompletionText))); @@ -135,26 +135,26 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (type is PrimitiveType) { var pt = (PrimitiveType)type; switch (pt.Keyword) { - case "object": - yield return "o"; - yield return "obj"; - break; - case "bool": - yield return "b"; - yield return "pred"; - break; - case "double": - case "float": - case "decimal": - yield return "d"; - yield return "f"; - yield return "m"; - break; - default: - yield return "i"; - yield return "j"; - yield return "k"; - break; + case "object": + yield return "o"; + yield return "obj"; + break; + case "bool": + yield return "b"; + yield return "pred"; + break; + case "double": + case "float": + case "decimal": + yield return "d"; + yield return "f"; + yield return "m"; + break; + default: + yield return "i"; + yield return "j"; + yield return "k"; + break; } yield break; } @@ -210,7 +210,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion resolveResult.Item1, expr.Node, resolveResult.Item2 - ); + ); } @@ -219,7 +219,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion resolveResult.Item1, expr.Node, resolveResult.Item2 - ); + ); } bool IsInPreprocessorDirective() @@ -292,80 +292,80 @@ namespace ICSharpCode.NRefactory.CSharp.Completion { Tuple<ResolveResult, CSharpResolver> resolveResult; switch (completionChar) { - // Magic key completion - case ':': - case '.': - if (IsInsideCommentStringOrDirective()) { - return Enumerable.Empty<ICompletionData>(); - } - return HandleMemberReferenceCompletion(GetExpressionBeforeCursor()); - case '#': - if (!IsInPreprocessorDirective()) - return null; - return GetDirectiveCompletionData(); - // XML doc completion - case '<': - if (IsInsideDocComment()) { - return GetXmlDocumentationCompletionData(); - } - if (controlSpace) { - return DefaultControlSpaceItems(); - } + // Magic key completion + case ':': + case '.': + if (IsInsideCommentStringOrDirective()) { + return Enumerable.Empty<ICompletionData>(); + } + return HandleMemberReferenceCompletion(GetExpressionBeforeCursor()); + case '#': + if (!IsInPreprocessorDirective()) return null; - case '>': - if (!IsInsideDocComment()) { - if (offset > 2 && document.GetCharAt(offset - 2) == '-' && !IsInsideCommentStringOrDirective()) { - return HandleMemberReferenceCompletion(GetExpressionBeforeCursor()); - } - return null; + return GetDirectiveCompletionData(); + // XML doc completion + case '<': + if (IsInsideDocComment()) { + return GetXmlDocumentationCompletionData(); + } + if (controlSpace) { + return DefaultControlSpaceItems(); + } + return null; + case '>': + if (!IsInsideDocComment()) { + if (offset > 2 && document.GetCharAt(offset - 2) == '-' && !IsInsideCommentStringOrDirective()) { + return HandleMemberReferenceCompletion(GetExpressionBeforeCursor()); } - string lineText = document.GetText(document.GetLineByNumber(location.Line)); - int startIndex = Math.Min(location.Column - 1, lineText.Length - 1); - while (startIndex >= 0 && lineText [startIndex] != '<') { - --startIndex; - if (lineText [startIndex] == '/') { - // already closed. - startIndex = -1; - break; - } + return null; + } + string lineText = document.GetText(document.GetLineByNumber(location.Line)); + int startIndex = Math.Min(location.Column - 1, lineText.Length - 1); + while (startIndex >= 0 && lineText [startIndex] != '<') { + --startIndex; + if (lineText [startIndex] == '/') { + // already closed. + startIndex = -1; + break; } + } - if (startIndex >= 0) { - int endIndex = startIndex; - while (endIndex <= location.Column && endIndex < lineText.Length && !Char.IsWhiteSpace (lineText [endIndex])) { - endIndex++; - } - string tag = endIndex - startIndex - 1 > 0 ? lineText.Substring( + if (startIndex >= 0) { + int endIndex = startIndex; + while (endIndex <= location.Column && endIndex < lineText.Length && !Char.IsWhiteSpace (lineText [endIndex])) { + endIndex++; + } + string tag = endIndex - startIndex - 1 > 0 ? lineText.Substring( startIndex + 1, endIndex - startIndex - 2 - ) : null; - if (!string.IsNullOrEmpty(tag) && commentTags.IndexOf(tag) >= 0) { - document.Insert(offset, "</" + tag + ">", AnchorMovementType.BeforeInsertion); - } + ) : null; + if (!string.IsNullOrEmpty(tag) && commentTags.IndexOf(tag) >= 0) { + document.Insert(offset, "</" + tag + ">", AnchorMovementType.BeforeInsertion); } - return null; + } + return null; - // Parameter completion - case '(': - if (IsInsideCommentStringOrDirective()) { - return null; - } - var invoke = GetInvocationBeforeCursor(true); - if (invoke == null) { - if (controlSpace) - return DefaultControlSpaceItems(invoke); - return null; - } - if (invoke.Node is TypeOfExpression) { - return CreateTypeList(); - } - var invocationResult = ResolveExpression(invoke); - if (invocationResult == null) { - return null; - } - var methodGroup = invocationResult.Item1 as MethodGroupResolveResult; - if (methodGroup != null) { - return CreateParameterCompletion( + // Parameter completion + case '(': + if (IsInsideCommentStringOrDirective()) { + return null; + } + var invoke = GetInvocationBeforeCursor(true); + if (invoke == null) { + if (controlSpace) + return DefaultControlSpaceItems(invoke); + return null; + } + if (invoke.Node is TypeOfExpression) { + return CreateTypeList(); + } + var invocationResult = ResolveExpression(invoke); + if (invocationResult == null) { + return null; + } + var methodGroup = invocationResult.Item1 as MethodGroupResolveResult; + if (methodGroup != null) { + return CreateParameterCompletion( methodGroup, invocationResult.Item2, invoke.Node, @@ -373,52 +373,52 @@ namespace ICSharpCode.NRefactory.CSharp.Completion 0, controlSpace ); - } + } - if (controlSpace) { - return DefaultControlSpaceItems(invoke); - } + if (controlSpace) { + return DefaultControlSpaceItems(invoke); + } + return null; + case '=': + return controlSpace ? DefaultControlSpaceItems() : null; + case ',': + int cpos2; + if (!GetParameterCompletionCommandOffset(out cpos2)) { return null; - case '=': - return controlSpace ? DefaultControlSpaceItems() : null; - case ',': - int cpos2; - if (!GetParameterCompletionCommandOffset(out cpos2)) { - return null; - } + } // completionContext = CompletionWidget.CreateCodeCompletionContext (cpos2); // int currentParameter2 = MethodParameterDataProvider.GetCurrentParameterIndex (CompletionWidget, completionContext) - 1; // return CreateParameterCompletion (CreateResolver (), location, ExpressionContext.MethodBody, provider.Methods, currentParameter); - break; + break; - // Completion on space: - case ' ': - int tokenIndex = offset; - string token = GetPreviousToken(ref tokenIndex, false); - if (IsInsideCommentStringOrDirective()) { - if (IsInPreprocessorDirective()) - return HandleKeywordCompletion(tokenIndex, token); - return null; - } + // Completion on space: + case ' ': + int tokenIndex = offset; + string token = GetPreviousToken(ref tokenIndex, false); + if (IsInsideCommentStringOrDirective()) { + if (IsInPreprocessorDirective()) + return HandleKeywordCompletion(tokenIndex, token); + return null; + } // check propose name, for context <variable name> <ctrl+space> (but only in control space context) //IType isAsType = null; - var isAsExpression = GetExpressionAt(offset); - if (controlSpace && isAsExpression != null && isAsExpression.Node is VariableDeclarationStatement && token != "new") { - var parent = isAsExpression.Node as VariableDeclarationStatement; - var proposeNameList = new CompletionDataWrapper(this); - if (parent.Variables.Count != 1) - return DefaultControlSpaceItems(isAsExpression, controlSpace); + var isAsExpression = GetExpressionAt(offset); + if (controlSpace && isAsExpression != null && isAsExpression.Node is VariableDeclarationStatement && token != "new") { + var parent = isAsExpression.Node as VariableDeclarationStatement; + var proposeNameList = new CompletionDataWrapper(this); + if (parent.Variables.Count != 1) + return DefaultControlSpaceItems(isAsExpression, controlSpace); - foreach (var possibleName in GenerateNameProposals (parent.Type)) { - if (possibleName.Length > 0) { - proposeNameList.Result.Add(factory.CreateLiteralCompletionData(possibleName.ToString())); - } + foreach (var possibleName in GenerateNameProposals (parent.Type)) { + if (possibleName.Length > 0) { + proposeNameList.Result.Add(factory.CreateLiteralCompletionData(possibleName.ToString())); } - - AutoSelect = false; - AutoCompleteEmptyMatch = false; - return proposeNameList.Result; } + + AutoSelect = false; + AutoCompleteEmptyMatch = false; + return proposeNameList.Result; + } // int tokenIndex = offset; // string token = GetPreviousToken (ref tokenIndex, false); // if (result.ExpressionContext == ExpressionContext.ObjectInitializer) { @@ -428,67 +428,67 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // if (objectInitializer != null && objectInitializer.ArrayDimensions == 0 && objectInitializer.PointerNestingLevel == 0 && (token == "{" || token == ",")) // return CreateCtrlSpaceCompletionData (completionContext, result); // } - if (token == "=") { - int j = tokenIndex; - string prevToken = GetPreviousToken(ref j, false); - if (prevToken == "=" || prevToken == "+" || prevToken == "-") { - token = prevToken + token; - tokenIndex = j; - } + if (token == "=") { + int j = tokenIndex; + string prevToken = GetPreviousToken(ref j, false); + if (prevToken == "=" || prevToken == "+" || prevToken == "-") { + token = prevToken + token; + tokenIndex = j; + } + } + switch (token) { + case "(": + case ",": + int cpos; + if (!GetParameterCompletionCommandOffset(out cpos)) { + break; } - switch (token) { - case "(": - case ",": - int cpos; - if (!GetParameterCompletionCommandOffset(out cpos)) { - break; - } - int currentParameter = GetCurrentParameterIndex(cpos - 1, this.offset) - 1; - if (currentParameter < 0) { - return null; - } - invoke = GetInvocationBeforeCursor(token == "("); - if (invoke == null) { - return null; - } - invocationResult = ResolveExpression(invoke); - if (invocationResult == null) { - return null; - } - methodGroup = invocationResult.Item1 as MethodGroupResolveResult; - if (methodGroup != null) { - return CreateParameterCompletion( + int currentParameter = GetCurrentParameterIndex(cpos - 1, this.offset) - 1; + if (currentParameter < 0) { + return null; + } + invoke = GetInvocationBeforeCursor(token == "("); + if (invoke == null) { + return null; + } + invocationResult = ResolveExpression(invoke); + if (invocationResult == null) { + return null; + } + methodGroup = invocationResult.Item1 as MethodGroupResolveResult; + if (methodGroup != null) { + return CreateParameterCompletion( methodGroup, invocationResult.Item2, invoke.Node, invoke.Unit, currentParameter, controlSpace); - } - return null; - case "=": - case "==": - GetPreviousToken(ref tokenIndex, false); - var expressionOrVariableDeclaration = GetExpressionAt(tokenIndex); - if (expressionOrVariableDeclaration == null) { - return null; - } + } + return null; + case "=": + case "==": + GetPreviousToken(ref tokenIndex, false); + var expressionOrVariableDeclaration = GetExpressionAt(tokenIndex); + if (expressionOrVariableDeclaration == null) { + return null; + } - resolveResult = ResolveExpression(expressionOrVariableDeclaration); + resolveResult = ResolveExpression(expressionOrVariableDeclaration); - if (resolveResult == null) { - return null; - } - if (resolveResult.Item1.Type.Kind == TypeKind.Enum) { - var wrapper = new CompletionDataWrapper(this); - AddContextCompletion( + if (resolveResult == null) { + return null; + } + if (resolveResult.Item1.Type.Kind == TypeKind.Enum) { + var wrapper = new CompletionDataWrapper(this); + AddContextCompletion( wrapper, resolveResult.Item2, expressionOrVariableDeclaration.Node); - AddEnumMembers(wrapper, resolveResult.Item1.Type, resolveResult.Item2); - AutoCompleteEmptyMatch = false; - return wrapper.Result; - } + AddEnumMembers(wrapper, resolveResult.Item1.Type, resolveResult.Item2); + AutoCompleteEmptyMatch = false; + return wrapper.Result; + } // // if (resolvedType.FullName == DomReturnType.Bool.FullName) { // CompletionDataList completionList = new ProjectDomCompletionDataList (); @@ -513,50 +513,50 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // } // return completionList; // } - return null; - case "+=": - case "-=": - GetPreviousToken(ref tokenIndex, false); + return null; + case "+=": + case "-=": + GetPreviousToken(ref tokenIndex, false); - expressionOrVariableDeclaration = GetExpressionAt(tokenIndex); - if (expressionOrVariableDeclaration == null) { - return null; - } + expressionOrVariableDeclaration = GetExpressionAt(tokenIndex); + if (expressionOrVariableDeclaration == null) { + return null; + } - resolveResult = ResolveExpression(expressionOrVariableDeclaration); - if (resolveResult == null) { - return null; - } + resolveResult = ResolveExpression(expressionOrVariableDeclaration); + if (resolveResult == null) { + return null; + } - var mrr = resolveResult.Item1 as MemberResolveResult; - if (mrr != null) { - var evt = mrr.Member as IEvent; - if (evt == null) { - return null; - } - var delegateType = evt.ReturnType; - if (delegateType.Kind != TypeKind.Delegate) { - return null; - } + var mrr = resolveResult.Item1 as MemberResolveResult; + if (mrr != null) { + var evt = mrr.Member as IEvent; + if (evt == null) { + return null; + } + var delegateType = evt.ReturnType; + if (delegateType.Kind != TypeKind.Delegate) { + return null; + } - var wrapper = new CompletionDataWrapper(this); - if (currentType != null) { - // bool includeProtected = DomType.IncludeProtected (dom, typeFromDatabase, resolver.CallingType); - foreach (var method in ctx.CurrentTypeDefinition.Methods) { - if (MatchDelegate(delegateType, method) /*&& method.IsAccessibleFrom (dom, resolver.CallingType, resolver.CallingMember, includeProtected) &&*/) { - wrapper.AddMember(method); - // data.SetText (data.CompletionText + ";"); - } - } + var wrapper = new CompletionDataWrapper(this); + if (currentType != null) { + // bool includeProtected = DomType.IncludeProtected (dom, typeFromDatabase, resolver.CallingType); + foreach (var method in ctx.CurrentTypeDefinition.Methods) { + if (MatchDelegate(delegateType, method) /*&& method.IsAccessibleFrom (dom, resolver.CallingType, resolver.CallingMember, includeProtected) &&*/) { + wrapper.AddMember(method); + // data.SetText (data.CompletionText + ";"); } - if (token == "+=") { - string parameterDefinition = AddDelegateHandlers( + } + } + if (token == "+=") { + string parameterDefinition = AddDelegateHandlers( wrapper, delegateType - ); - string varName = GetPreviousMemberReferenceExpression(tokenIndex); - wrapper.Result.Add( + ); + string varName = GetPreviousMemberReferenceExpression(tokenIndex); + wrapper.Result.Add( factory.CreateEventCreationCompletionData( varName, delegateType, @@ -564,423 +564,423 @@ namespace ICSharpCode.NRefactory.CSharp.Completion parameterDefinition, currentMember, currentType) - ); - } + ); + } - return wrapper.Result; - } - return null; - case ":": - if (currentMember == null) { - token = GetPreviousToken(ref tokenIndex, false); - token = GetPreviousToken(ref tokenIndex, false); - if (token == "enum") - return HandleEnumContext(); - var wrapper = new CompletionDataWrapper(this); + return wrapper.Result; + } + return null; + case ":": + if (currentMember == null) { + token = GetPreviousToken(ref tokenIndex, false); + token = GetPreviousToken(ref tokenIndex, false); + if (token == "enum") + return HandleEnumContext(); + var wrapper = new CompletionDataWrapper(this); - AddTypesAndNamespaces( + AddTypesAndNamespaces( wrapper, GetState(), null, t => currentType != null && !currentType.ReflectionName.Equals(t.ReflectionName) ? t : null - ); - return wrapper.Result; - } - return null; + ); + return wrapper.Result; } + return null; + } - var keywordCompletion = HandleKeywordCompletion(tokenIndex, token); - if (keywordCompletion == null && controlSpace) { - goto default; - } - return keywordCompletion; - // Automatic completion - default: - if (IsInsideCommentStringOrDirective()) { + var keywordCompletion = HandleKeywordCompletion(tokenIndex, token); + if (keywordCompletion == null && controlSpace) { + goto default; + } + return keywordCompletion; + // Automatic completion + default: + if (IsInsideCommentStringOrDirective()) { + return null; + } + if (IsInLinqContext(offset)) { + if (!controlSpace && !(char.IsLetter(completionChar) || completionChar == '_')) { return null; } - if (IsInLinqContext(offset)) { - if (!controlSpace && !(char.IsLetter(completionChar) || completionChar == '_')) { - return null; - } - tokenIndex = offset; + tokenIndex = offset; + token = GetPreviousToken(ref tokenIndex, false); + // token last typed + if (!char.IsWhiteSpace(completionChar) && !linqKeywords.Contains(token)) { token = GetPreviousToken(ref tokenIndex, false); - // token last typed - if (!char.IsWhiteSpace(completionChar) && !linqKeywords.Contains(token)) { - token = GetPreviousToken(ref tokenIndex, false); - } - // token last typed + } + // token last typed - if (linqKeywords.Contains(token)) { - if (token == "from") { - // after from no auto code completion. - return null; - } - return DefaultControlSpaceItems(); + if (linqKeywords.Contains(token)) { + if (token == "from") { + // after from no auto code completion. + return null; } - var dataList = new CompletionDataWrapper(this); - AddKeywords(dataList, linqKeywords); - return dataList.Result; + return DefaultControlSpaceItems(); } - if (currentType != null && currentType.Kind == TypeKind.Enum) { - return HandleEnumContext(); + var dataList = new CompletionDataWrapper(this); + AddKeywords(dataList, linqKeywords); + return dataList.Result; + } + if (currentType != null && currentType.Kind == TypeKind.Enum) { + return HandleEnumContext(); + } + var contextList = new CompletionDataWrapper(this); + var identifierStart = GetExpressionAtCursor(); + if (identifierStart != null) { + if (identifierStart.Node is TypeParameterDeclaration) { + return null; } - var contextList = new CompletionDataWrapper(this); - var identifierStart = GetExpressionAtCursor(); - if (identifierStart != null) { - if (identifierStart.Node is TypeParameterDeclaration) { - return null; - } - if (identifierStart.Node is MemberReferenceExpression) { - return HandleMemberReferenceCompletion( + if (identifierStart.Node is MemberReferenceExpression) { + return HandleMemberReferenceCompletion( new ExpressionResult( ((MemberReferenceExpression)identifierStart.Node).Target, identifierStart.Unit ) ); - } - - if (identifierStart.Node is Identifier) { - // May happen in variable names - return controlSpace ? DefaultControlSpaceItems(identifierStart) : null; - } - if (identifierStart.Node is VariableInitializer && location <= ((VariableInitializer)identifierStart.Node).NameToken.EndLocation) { - return controlSpace ? HandleAccessorContext() ?? DefaultControlSpaceItems(identifierStart) : null; - } + } - if (identifierStart.Node is CatchClause) { - if (((CatchClause)identifierStart.Node).VariableNameToken.Contains(location)) { - return null; - } - return HandleCatchClauseType(identifierStart); - } + if (identifierStart.Node is Identifier) { + // May happen in variable names + return controlSpace ? DefaultControlSpaceItems(identifierStart) : null; } - if (!(char.IsLetter(completionChar) || completionChar == '_') && (!controlSpace || identifierStart == null || !(identifierStart.Node.Parent is ArrayInitializerExpression))) { + if (identifierStart.Node is VariableInitializer && location <= ((VariableInitializer)identifierStart.Node).NameToken.EndLocation) { return controlSpace ? HandleAccessorContext() ?? DefaultControlSpaceItems(identifierStart) : null; } - - char prevCh = offset > 2 ? document.GetCharAt(offset - 2) : ';'; - char nextCh = offset < document.TextLength ? document.GetCharAt(offset) : ' '; - const string allowedChars = ";,.[](){}+-*/%^?:&|~!<>="; - if (!Char.IsWhiteSpace(nextCh) && allowedChars.IndexOf(nextCh) < 0) { - return null; - } - if (!(Char.IsWhiteSpace(prevCh) || allowedChars.IndexOf(prevCh) >= 0)) { - return null; + + if (identifierStart.Node is CatchClause) { + if (((CatchClause)identifierStart.Node).VariableNameToken.Contains(location)) { + return null; + } + return HandleCatchClauseType(identifierStart); } + } + if (!(char.IsLetter(completionChar) || completionChar == '_') && (!controlSpace || identifierStart == null || !(identifierStart.Node.Parent is ArrayInitializerExpression))) { + return controlSpace ? HandleAccessorContext() ?? DefaultControlSpaceItems(identifierStart) : null; + } + + char prevCh = offset > 2 ? document.GetCharAt(offset - 2) : ';'; + char nextCh = offset < document.TextLength ? document.GetCharAt(offset) : ' '; + const string allowedChars = ";,.[](){}+-*/%^?:&|~!<>="; + if (!Char.IsWhiteSpace(nextCh) && allowedChars.IndexOf(nextCh) < 0) { + return null; + } + if (!(Char.IsWhiteSpace(prevCh) || allowedChars.IndexOf(prevCh) >= 0)) { + return null; + } // Do not pop up completion on identifier identifier (should be handled by keyword completion). - tokenIndex = offset - 1; - token = GetPreviousToken(ref tokenIndex, false); - if (token == "class" || token == "interface" || token == "struct" || token == "enum" || token == "namespace") { - // after these always follows a name - return null; - } - var keywordresult = HandleKeywordCompletion(tokenIndex, token); - if (keywordresult != null) { - return keywordresult; - } + tokenIndex = offset - 1; + token = GetPreviousToken(ref tokenIndex, false); + if (token == "class" || token == "interface" || token == "struct" || token == "enum" || token == "namespace") { + // after these always follows a name + return null; + } + var keywordresult = HandleKeywordCompletion(tokenIndex, token); + if (keywordresult != null) { + return keywordresult; + } - int prevTokenIndex = tokenIndex; - var prevToken2 = GetPreviousToken(ref prevTokenIndex, false); - if (prevToken2 == "delegate") { - // after these always follows a name - return null; - } + int prevTokenIndex = tokenIndex; + var prevToken2 = GetPreviousToken(ref prevTokenIndex, false); + if (prevToken2 == "delegate") { + // after these always follows a name + return null; + } - if (identifierStart == null && !string.IsNullOrEmpty(token) && !IsInsideCommentStringOrDirective() && (prevToken2 == ";" || prevToken2 == "{" || prevToken2 == "}")) { - char last = token [token.Length - 1]; - if (char.IsLetterOrDigit(last) || last == '_' || token == ">") { - return HandleKeywordCompletion(tokenIndex, token); - } + if (identifierStart == null && !string.IsNullOrEmpty(token) && !IsInsideCommentStringOrDirective() && (prevToken2 == ";" || prevToken2 == "{" || prevToken2 == "}")) { + char last = token [token.Length - 1]; + if (char.IsLetterOrDigit(last) || last == '_' || token == ">") { + return HandleKeywordCompletion(tokenIndex, token); } + } - if (identifierStart == null) { - var accCtx = HandleAccessorContext(); - if (accCtx != null) { - return accCtx; - } - return DefaultControlSpaceItems(null, controlSpace); - } - CSharpResolver csResolver; - AstNode n = identifierStart.Node; - if (n != null && n.Parent is AnonymousTypeCreateExpression) { - AutoSelect = false; + if (identifierStart == null) { + var accCtx = HandleAccessorContext(); + if (accCtx != null) { + return accCtx; } + return DefaultControlSpaceItems(null, controlSpace); + } + CSharpResolver csResolver; + AstNode n = identifierStart.Node; + if (n != null && n.Parent is AnonymousTypeCreateExpression) { + AutoSelect = false; + } // Handle foreach (type name _ - if (n is IdentifierExpression) { - var prev = n.GetPrevNode() as ForeachStatement; - if (prev != null && prev.InExpression.IsNull) { - if (controlSpace) { - contextList.AddCustom("in"); - return contextList.Result; - } - return null; + if (n is IdentifierExpression) { + var prev = n.GetPrevNode() as ForeachStatement; + if (prev != null && prev.InExpression.IsNull) { + if (controlSpace) { + contextList.AddCustom("in"); + return contextList.Result; } - - // var astResolver = new CSharpAstResolver( - // GetState(), - // identifierStart.Unit, - // CSharpParsedFile - // ); - // - // foreach (var type in CreateFieldAction.GetValidTypes(astResolver, (Expression)n)) { - // if (type.Kind == TypeKind.Delegate) { - // AddDelegateHandlers(contextList, type, false, false); - // AutoSelect = false; - // AutoCompleteEmptyMatch = false; - // } - // } + return null; } + + // var astResolver = new CSharpAstResolver( + // GetState(), + // identifierStart.Unit, + // CSharpParsedFile + // ); + // + // foreach (var type in CreateFieldAction.GetValidTypes(astResolver, (Expression)n)) { + // if (type.Kind == TypeKind.Delegate) { + // AddDelegateHandlers(contextList, type, false, false); + // AutoSelect = false; + // AutoCompleteEmptyMatch = false; + // } + // } + } // Handle object/enumerable initialzer expressions: "new O () { P$" - if (n is IdentifierExpression && n.Parent is ArrayInitializerExpression) { - var result = HandleObjectInitializer(identifierStart.Unit, n); - if (result != null) - return result; - } + if (n is IdentifierExpression && n.Parent is ArrayInitializerExpression) { + var result = HandleObjectInitializer(identifierStart.Unit, n); + if (result != null) + return result; + } - if (n != null && n.Parent is InvocationExpression) { - var invokeParent = (InvocationExpression)n.Parent; - var invokeResult = ResolveExpression( + if (n != null && n.Parent is InvocationExpression) { + var invokeParent = (InvocationExpression)n.Parent; + var invokeResult = ResolveExpression( invokeParent.Target ); - var mgr = invokeResult != null ? invokeResult.Item1 as MethodGroupResolveResult : null; - if (mgr != null) { - int idx = 0; - foreach (var arg in invokeParent.Arguments) { - if (arg == n) { - break; - } - idx++; + var mgr = invokeResult != null ? invokeResult.Item1 as MethodGroupResolveResult : null; + if (mgr != null) { + int idx = 0; + foreach (var arg in invokeParent.Arguments) { + if (arg == n) { + break; } + idx++; + } - foreach (var method in mgr.Methods) { + foreach (var method in mgr.Methods) { + if (idx < method.Parameters.Count && method.Parameters [idx].Type.Kind == TypeKind.Delegate) { + AutoSelect = false; + AutoCompleteEmptyMatch = false; + } + foreach (var p in method.Parameters) { + contextList.AddNamedParameterVariable(p); + } + } + idx++; + foreach (var list in mgr.GetEligibleExtensionMethods (true)) { + foreach (var method in list) { if (idx < method.Parameters.Count && method.Parameters [idx].Type.Kind == TypeKind.Delegate) { AutoSelect = false; AutoCompleteEmptyMatch = false; } - foreach (var p in method.Parameters) { - contextList.AddNamedParameterVariable(p); - } - } - idx++; - foreach (var list in mgr.GetEligibleExtensionMethods (true)) { - foreach (var method in list) { - if (idx < method.Parameters.Count && method.Parameters [idx].Type.Kind == TypeKind.Delegate) { - AutoSelect = false; - AutoCompleteEmptyMatch = false; - } - } } } } + } - if (n != null && n.Parent is ObjectCreateExpression) { - var invokeResult = ResolveExpression(n.Parent); - var mgr = invokeResult != null ? invokeResult.Item1 as ResolveResult : null; - if (mgr != null) { - foreach (var constructor in mgr.Type.GetConstructors ()) { - foreach (var p in constructor.Parameters) { - contextList.AddVariable(p); - } + if (n != null && n.Parent is ObjectCreateExpression) { + var invokeResult = ResolveExpression(n.Parent); + var mgr = invokeResult != null ? invokeResult.Item1 as ResolveResult : null; + if (mgr != null) { + foreach (var constructor in mgr.Type.GetConstructors ()) { + foreach (var p in constructor.Parameters) { + contextList.AddVariable(p); } } } + } - if (n is IdentifierExpression) { - var bop = n.Parent as BinaryOperatorExpression; - Expression evaluationExpr = null; + if (n is IdentifierExpression) { + var bop = n.Parent as BinaryOperatorExpression; + Expression evaluationExpr = null; - if (bop != null && bop.Right == n && (bop.Operator == BinaryOperatorType.Equality || bop.Operator == BinaryOperatorType.InEquality)) { - evaluationExpr = bop.Left; - } - // check for compare to enum case - if (evaluationExpr != null) { - resolveResult = ResolveExpression(evaluationExpr); - if (resolveResult != null && resolveResult.Item1.Type.Kind == TypeKind.Enum) { - var wrapper = new CompletionDataWrapper(this); - AddContextCompletion( + if (bop != null && bop.Right == n && (bop.Operator == BinaryOperatorType.Equality || bop.Operator == BinaryOperatorType.InEquality)) { + evaluationExpr = bop.Left; + } + // check for compare to enum case + if (evaluationExpr != null) { + resolveResult = ResolveExpression(evaluationExpr); + if (resolveResult != null && resolveResult.Item1.Type.Kind == TypeKind.Enum) { + var wrapper = new CompletionDataWrapper(this); + AddContextCompletion( wrapper, resolveResult.Item2, evaluationExpr ); - AddEnumMembers(wrapper, resolveResult.Item1.Type, resolveResult.Item2); - AutoCompleteEmptyMatch = false; - return wrapper.Result; - } + AddEnumMembers(wrapper, resolveResult.Item1.Type, resolveResult.Item2); + AutoCompleteEmptyMatch = false; + return wrapper.Result; } } + } - if (n is Identifier && n.Parent is ForeachStatement) { - if (controlSpace) { - return DefaultControlSpaceItems(); - } - return null; + if (n is Identifier && n.Parent is ForeachStatement) { + if (controlSpace) { + return DefaultControlSpaceItems(); } + return null; + } - if (n is ArrayInitializerExpression) { - // check for new [] {...} expression -> no need to resolve the type there - var parent = n.Parent as ArrayCreateExpression; - if (parent != null && parent.Type.IsNull) { - return DefaultControlSpaceItems(); - } + if (n is ArrayInitializerExpression) { + // check for new [] {...} expression -> no need to resolve the type there + var parent = n.Parent as ArrayCreateExpression; + if (parent != null && parent.Type.IsNull) { + return DefaultControlSpaceItems(); + } - var initalizerResult = ResolveExpression(n.Parent); + var initalizerResult = ResolveExpression(n.Parent); - var concreteNode = identifierStart.Unit.GetNodeAt<IdentifierExpression>(location); - // check if we're on the right side of an initializer expression - if (concreteNode != null && concreteNode.Parent != null && concreteNode.Parent.Parent != null && concreteNode.Identifier != "a" && concreteNode.Parent.Parent is NamedExpression) { - return DefaultControlSpaceItems(); - } - if (initalizerResult != null && initalizerResult.Item1.Type.Kind != TypeKind.Unknown) { + var concreteNode = identifierStart.Unit.GetNodeAt<IdentifierExpression>(location); + // check if we're on the right side of an initializer expression + if (concreteNode != null && concreteNode.Parent != null && concreteNode.Parent.Parent != null && concreteNode.Identifier != "a" && concreteNode.Parent.Parent is NamedExpression) { + return DefaultControlSpaceItems(); + } + if (initalizerResult != null && initalizerResult.Item1.Type.Kind != TypeKind.Unknown) { - foreach (var property in initalizerResult.Item1.Type.GetProperties ()) { - if (!property.IsPublic) { - continue; - } - contextList.AddMember(property); + foreach (var property in initalizerResult.Item1.Type.GetProperties ()) { + if (!property.IsPublic) { + continue; } - foreach (var field in initalizerResult.Item1.Type.GetFields ()) { - if (!field.IsPublic) { - continue; - } - contextList.AddMember(field); + contextList.AddMember(property); + } + foreach (var field in initalizerResult.Item1.Type.GetFields ()) { + if (!field.IsPublic) { + continue; } - return contextList.Result; + contextList.AddMember(field); } - return DefaultControlSpaceItems(); + return contextList.Result; } - if (IsAttributeContext(n)) { - // add attribute targets - if (currentType == null) { - contextList.AddCustom("assembly"); - contextList.AddCustom("module"); - contextList.AddCustom("type"); - } else { - contextList.AddCustom("param"); - contextList.AddCustom("field"); - contextList.AddCustom("property"); - contextList.AddCustom("method"); - contextList.AddCustom("event"); - } - contextList.AddCustom("return"); + return DefaultControlSpaceItems(); + } + if (IsAttributeContext(n)) { + // add attribute targets + if (currentType == null) { + contextList.AddCustom("assembly"); + contextList.AddCustom("module"); + contextList.AddCustom("type"); + } else { + contextList.AddCustom("param"); + contextList.AddCustom("field"); + contextList.AddCustom("property"); + contextList.AddCustom("method"); + contextList.AddCustom("event"); } - if (n is MemberType) { - resolveResult = ResolveExpression( + contextList.AddCustom("return"); + } + if (n is MemberType) { + resolveResult = ResolveExpression( ((MemberType)n).Target ); - return CreateTypeAndNamespaceCompletionData( + return CreateTypeAndNamespaceCompletionData( location, resolveResult.Item1, ((MemberType)n).Target, resolveResult.Item2 ); + } + if (n != null/* && !(identifierStart.Item2 is TypeDeclaration)*/) { + csResolver = new CSharpResolver(ctx); + var nodes = new List<AstNode>(); + nodes.Add(n); + if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) { + nodes.Add(n.Parent); } - if (n != null/* && !(identifierStart.Item2 is TypeDeclaration)*/) { - csResolver = new CSharpResolver(ctx); - var nodes = new List<AstNode>(); - nodes.Add(n); - if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) { - nodes.Add(n.Parent); - } - var astResolver = CompletionContextProvider.GetResolver(csResolver, identifierStart.Unit); - astResolver.ApplyNavigator(new NodeListResolveVisitorNavigator(nodes)); - try { - csResolver = astResolver.GetResolverStateBefore(n); - } catch (Exception) { - csResolver = GetState(); - } - // add attribute properties. - if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) { - var resolved = astResolver.Resolve(n.Parent); - if (resolved != null && resolved.Type != null) { - foreach (var property in resolved.Type.GetProperties (p => p.Accessibility == Accessibility.Public)) { - contextList.AddMember(property); - } - foreach (var field in resolved.Type.GetFields (p => p.Accessibility == Accessibility.Public)) { - contextList.AddMember(field); - } + var astResolver = CompletionContextProvider.GetResolver(csResolver, identifierStart.Unit); + astResolver.ApplyNavigator(new NodeListResolveVisitorNavigator(nodes)); + try { + csResolver = astResolver.GetResolverStateBefore(n); + } catch (Exception) { + csResolver = GetState(); + } + // add attribute properties. + if (n.Parent is ICSharpCode.NRefactory.CSharp.Attribute) { + var resolved = astResolver.Resolve(n.Parent); + if (resolved != null && resolved.Type != null) { + foreach (var property in resolved.Type.GetProperties (p => p.Accessibility == Accessibility.Public)) { + contextList.AddMember(property); + } + foreach (var field in resolved.Type.GetFields (p => p.Accessibility == Accessibility.Public)) { + contextList.AddMember(field); } } - } else { - csResolver = GetState(); } + } else { + csResolver = GetState(); + } // identifier has already started with the first letter - offset--; - AddContextCompletion( + offset--; + AddContextCompletion( contextList, csResolver, identifierStart.Node ); - return contextList.Result; - // if (stub.Parent is BlockStatement) + return contextList.Result; + // if (stub.Parent is BlockStatement) - // result = FindExpression (dom, completionContext, -1); - // if (result == null) - // return null; - // else if (result.ExpressionContext != ExpressionContext.IdentifierExpected) { - // triggerWordLength = 1; - // bool autoSelect = true; - // IType returnType = null; - // if ((prevCh == ',' || prevCh == '(') && GetParameterCompletionCommandOffset (out cpos)) { - // ctx = CompletionWidget.CreateCodeCompletionContext (cpos); - // NRefactoryParameterDataProvider dataProvider = ParameterCompletionCommand (ctx) as NRefactoryParameterDataProvider; - // if (dataProvider != null) { - // int i = dataProvider.GetCurrentParameterIndex (CompletionWidget, ctx) - 1; - // foreach (var method in dataProvider.Methods) { - // if (i < method.Parameters.Count) { - // returnType = dom.GetType (method.Parameters [i].ReturnType); - // autoSelect = returnType == null || returnType.ClassType != ClassType.Delegate; - // break; - // } - // } - // } - // } - // // Bug 677531 - Auto-complete doesn't always highlight generic parameter in method signature - // //if (result.ExpressionContext == ExpressionContext.TypeName) - // // autoSelect = false; - // CompletionDataList dataList = CreateCtrlSpaceCompletionData (completionContext, result); - // AddEnumMembers (dataList, returnType); - // dataList.AutoSelect = autoSelect; - // return dataList; - // } else { - // result = FindExpression (dom, completionContext, 0); - // tokenIndex = offset; - // - // // check foreach case, unfortunately the expression finder is too dumb to handle full type names - // // should be overworked if the expression finder is replaced with a mcs ast based analyzer. - // var possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // starting letter - // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // varname - // - // // read return types to '(' token - // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // varType - // if (possibleForeachToken == ">") { - // while (possibleForeachToken != null && possibleForeachToken != "(") { - // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); - // } - // } else { - // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // ( - // if (possibleForeachToken == ".") - // while (possibleForeachToken != null && possibleForeachToken != "(") - // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); - // } - // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // foreach - // - // if (possibleForeachToken == "foreach") { - // result.ExpressionContext = ExpressionContext.ForeachInToken; - // } else { - // return null; - // // result.ExpressionContext = ExpressionContext.IdentifierExpected; - // } - // result.Expression = ""; - // result.Region = DomRegion.Empty; - // - // return CreateCtrlSpaceCompletionData (completionContext, result); - // } - // break; + // result = FindExpression (dom, completionContext, -1); + // if (result == null) + // return null; + // else if (result.ExpressionContext != ExpressionContext.IdentifierExpected) { + // triggerWordLength = 1; + // bool autoSelect = true; + // IType returnType = null; + // if ((prevCh == ',' || prevCh == '(') && GetParameterCompletionCommandOffset (out cpos)) { + // ctx = CompletionWidget.CreateCodeCompletionContext (cpos); + // NRefactoryParameterDataProvider dataProvider = ParameterCompletionCommand (ctx) as NRefactoryParameterDataProvider; + // if (dataProvider != null) { + // int i = dataProvider.GetCurrentParameterIndex (CompletionWidget, ctx) - 1; + // foreach (var method in dataProvider.Methods) { + // if (i < method.Parameters.Count) { + // returnType = dom.GetType (method.Parameters [i].ReturnType); + // autoSelect = returnType == null || returnType.ClassType != ClassType.Delegate; + // break; + // } + // } + // } + // } + // // Bug 677531 - Auto-complete doesn't always highlight generic parameter in method signature + // //if (result.ExpressionContext == ExpressionContext.TypeName) + // // autoSelect = false; + // CompletionDataList dataList = CreateCtrlSpaceCompletionData (completionContext, result); + // AddEnumMembers (dataList, returnType); + // dataList.AutoSelect = autoSelect; + // return dataList; + // } else { + // result = FindExpression (dom, completionContext, 0); + // tokenIndex = offset; + // + // // check foreach case, unfortunately the expression finder is too dumb to handle full type names + // // should be overworked if the expression finder is replaced with a mcs ast based analyzer. + // var possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // starting letter + // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // varname + // + // // read return types to '(' token + // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // varType + // if (possibleForeachToken == ">") { + // while (possibleForeachToken != null && possibleForeachToken != "(") { + // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); + // } + // } else { + // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // ( + // if (possibleForeachToken == ".") + // while (possibleForeachToken != null && possibleForeachToken != "(") + // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); + // } + // possibleForeachToken = GetPreviousToken (ref tokenIndex, false); // foreach + // + // if (possibleForeachToken == "foreach") { + // result.ExpressionContext = ExpressionContext.ForeachInToken; + // } else { + // return null; + // // result.ExpressionContext = ExpressionContext.IdentifierExpected; + // } + // result.Expression = ""; + // result.Region = DomRegion.Empty; + // + // return CreateCtrlSpaceCompletionData (completionContext, result); + // } + // break; } return null; } @@ -989,7 +989,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion { Func<IType, IType> typePred = delegate (IType type) { if (type.GetAllBaseTypes().Any(t => t.ReflectionName == "System.Exception")) - return type; + return type; return null; }; if (identifierStart.Node is CatchClause) { @@ -1000,7 +1000,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion identifierStart.Node, typePred, m => false - ); + ); return wrapper.Result; } @@ -1011,7 +1011,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion identifierStart.Node, resolveResult.Item2, typePred - ); + ); } string[] validEnumBaseTypes = { @@ -1114,7 +1114,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion location.Line, location.Column + 2, n => n is Expression || n is AstType - ); + ); rr = ResolveExpression(node); } if (node is Identifier && node.Parent is ForeachStatement) { @@ -1200,7 +1200,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion wrapper.AddVariable(variable); } } - + if (state.CurrentMember is IParameterizedMember && !(node is AstType)) { var param = (IParameterizedMember)state.CurrentMember; foreach (var p in param.Parameters) { @@ -1295,7 +1295,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // Add 'this' keyword for first parameter (extension method case) if (node != null && node.Parent is ParameterDeclaration && - node.Parent.PrevSibling != null && node.Parent.PrevSibling.Role == Roles.LPar) { + node.Parent.PrevSibling != null && node.Parent.PrevSibling.Role == Roles.LPar) { wrapper.AddCustom("this"); } } @@ -1436,254 +1436,254 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; } switch (word) { - case "namespace": + case "namespace": + return null; + case "using": + if (currentType != null) { return null; - case "using": - if (currentType != null) { - return null; - } - var wrapper = new CompletionDataWrapper(this); - AddTypesAndNamespaces(wrapper, GetState(), null, t => null); - return wrapper.Result; - case "case": - return CreateCaseCompletionData(location); - // case ",": - // case ":": - // if (result.ExpressionContext == ExpressionContext.InheritableType) { - // IType cls = NRefactoryResolver.GetTypeAtCursor (Document.CompilationUnit, Document.FileName, new TextLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset)); - // CompletionDataList completionList = new ProjectDomCompletionDataList (); - // List<string > namespaceList = GetUsedNamespaces (); - // var col = new CSharpTextEditorCompletion.CompletionDataCollector (this, dom, completionList, Document.CompilationUnit, null, location); - // bool isInterface = false; - // HashSet<string > baseTypeNames = new HashSet<string> (); - // if (cls != null) { - // baseTypeNames.Add (cls.Name); - // if (cls.ClassType == ClassType.Struct) - // isInterface = true; - // } - // int tokenIndex = offset; - // - // // Search base types " : [Type1, ... ,TypeN,] <Caret>" - // string token = null; - // do { - // token = GetPreviousToken (ref tokenIndex, false); - // if (string.IsNullOrEmpty (token)) - // break; - // token = token.Trim (); - // if (Char.IsLetterOrDigit (token [0]) || token [0] == '_') { - // IType baseType = dom.SearchType (Document.CompilationUnit, cls, result.Region.Start, token); - // if (baseType != null) { - // if (baseType.ClassType != ClassType.Interface) - // isInterface = true; - // baseTypeNames.Add (baseType.Name); - // } - // } - // } while (token != ":"); - // foreach (object o in dom.GetNamespaceContents (namespaceList, true, true)) { - // IType type = o as IType; - // if (type != null && (type.IsStatic || type.IsSealed || baseTypeNames.Contains (type.Name) || isInterface && type.ClassType != ClassType.Interface)) { - // continue; - // } - // if (o is Namespace && !namespaceList.Any (ns => ns.StartsWith (((Namespace)o).FullName))) - // continue; - // col.Add (o); - // } - // // Add inner classes - // Stack<IType > innerStack = new Stack<IType> (); - // innerStack.Push (cls); - // while (innerStack.Count > 0) { - // IType curType = innerStack.Pop (); - // if (curType == null) - // continue; - // foreach (IType innerType in curType.InnerTypes) { - // if (innerType != cls) - // // don't add the calling class as possible base type - // col.Add (innerType); - // } - // if (curType.DeclaringType != null) - // innerStack.Push (curType.DeclaringType); - // } - // return completionList; - // } - // break; - case "is": - case "as": - if (currentType == null) { - return null; - } - IType isAsType = null; - var isAsExpression = GetExpressionAt(wordStart); - if (isAsExpression != null) { - var parent = isAsExpression.Node.Parent; - if (parent is VariableInitializer) { - parent = parent.Parent; - } - if (parent is VariableDeclarationStatement) { - var resolved = ResolveExpression(parent); - if (resolved != null) { - isAsType = resolved.Item1.Type; - } + } + var wrapper = new CompletionDataWrapper(this); + AddTypesAndNamespaces(wrapper, GetState(), null, t => null); + return wrapper.Result; + case "case": + return CreateCaseCompletionData(location); + // case ",": + // case ":": + // if (result.ExpressionContext == ExpressionContext.InheritableType) { + // IType cls = NRefactoryResolver.GetTypeAtCursor (Document.CompilationUnit, Document.FileName, new TextLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset)); + // CompletionDataList completionList = new ProjectDomCompletionDataList (); + // List<string > namespaceList = GetUsedNamespaces (); + // var col = new CSharpTextEditorCompletion.CompletionDataCollector (this, dom, completionList, Document.CompilationUnit, null, location); + // bool isInterface = false; + // HashSet<string > baseTypeNames = new HashSet<string> (); + // if (cls != null) { + // baseTypeNames.Add (cls.Name); + // if (cls.ClassType == ClassType.Struct) + // isInterface = true; + // } + // int tokenIndex = offset; + // + // // Search base types " : [Type1, ... ,TypeN,] <Caret>" + // string token = null; + // do { + // token = GetPreviousToken (ref tokenIndex, false); + // if (string.IsNullOrEmpty (token)) + // break; + // token = token.Trim (); + // if (Char.IsLetterOrDigit (token [0]) || token [0] == '_') { + // IType baseType = dom.SearchType (Document.CompilationUnit, cls, result.Region.Start, token); + // if (baseType != null) { + // if (baseType.ClassType != ClassType.Interface) + // isInterface = true; + // baseTypeNames.Add (baseType.Name); + // } + // } + // } while (token != ":"); + // foreach (object o in dom.GetNamespaceContents (namespaceList, true, true)) { + // IType type = o as IType; + // if (type != null && (type.IsStatic || type.IsSealed || baseTypeNames.Contains (type.Name) || isInterface && type.ClassType != ClassType.Interface)) { + // continue; + // } + // if (o is Namespace && !namespaceList.Any (ns => ns.StartsWith (((Namespace)o).FullName))) + // continue; + // col.Add (o); + // } + // // Add inner classes + // Stack<IType > innerStack = new Stack<IType> (); + // innerStack.Push (cls); + // while (innerStack.Count > 0) { + // IType curType = innerStack.Pop (); + // if (curType == null) + // continue; + // foreach (IType innerType in curType.InnerTypes) { + // if (innerType != cls) + // // don't add the calling class as possible base type + // col.Add (innerType); + // } + // if (curType.DeclaringType != null) + // innerStack.Push (curType.DeclaringType); + // } + // return completionList; + // } + // break; + case "is": + case "as": + if (currentType == null) { + return null; + } + IType isAsType = null; + var isAsExpression = GetExpressionAt(wordStart); + if (isAsExpression != null) { + var parent = isAsExpression.Node.Parent; + if (parent is VariableInitializer) { + parent = parent.Parent; + } + if (parent is VariableDeclarationStatement) { + var resolved = ResolveExpression(parent); + if (resolved != null) { + isAsType = resolved.Item1.Type; } } - var isAsWrapper = new CompletionDataWrapper(this); - var def = isAsType != null ? isAsType.GetDefinition() : null; - AddTypesAndNamespaces( + } + var isAsWrapper = new CompletionDataWrapper(this); + var def = isAsType != null ? isAsType.GetDefinition() : null; + AddTypesAndNamespaces( isAsWrapper, GetState(), null, t => t.GetDefinition() == null || def == null || t.GetDefinition().IsDerivedFrom(def) ? t : null, m => false); - return isAsWrapper.Result; - // { - // CompletionDataList completionList = new ProjectDomCompletionDataList (); - // ExpressionResult expressionResult = FindExpression (dom, completionContext, wordStart - document.Caret.Offset); - // NRefactoryResolver resolver = CreateResolver (); - // ResolveResult resolveResult = resolver.Resolve (expressionResult, new TextLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset)); - // if (resolveResult != null && resolveResult.ResolvedType != null) { - // CompletionDataCollector col = new CompletionDataCollector (this, dom, completionList, Document.CompilationUnit, resolver.CallingType, location); - // IType foundType = null; - // if (word == "as") { - // ExpressionContext exactContext = new NewCSharpExpressionFinder (dom).FindExactContextForAsCompletion (document, Document.CompilationUnit, Document.FileName, resolver.CallingType); - // if (exactContext is ExpressionContext.TypeExpressionContext) { - // foundType = resolver.SearchType (((ExpressionContext.TypeExpressionContext)exactContext).Type); - // AddAsCompletionData (col, foundType); - // } - // } - // - // if (foundType == null) - // foundType = resolver.SearchType (resolveResult.ResolvedType); - // - // if (foundType != null) { - // if (foundType.ClassType == ClassType.Interface) - // foundType = resolver.SearchType (DomReturnType.Object); - // - // foreach (IType type in dom.GetSubclasses (foundType)) { - // if (type.IsSpecialName || type.Name.StartsWith ("<")) - // continue; - // AddAsCompletionData (col, type); - // } - // } - // List<string > namespaceList = GetUsedNamespaces (); - // foreach (object o in dom.GetNamespaceContents (namespaceList, true, true)) { - // if (o is IType) { - // IType type = (IType)o; - // if (type.ClassType != ClassType.Interface || type.IsSpecialName || type.Name.StartsWith ("<")) - // continue; - // // if (foundType != null && !dom.GetInheritanceTree (foundType).Any (x => x.FullName == type.FullName)) - // // continue; - // AddAsCompletionData (col, type); - // continue; - // } - // if (o is Namespace) - // continue; - // col.Add (o); - // } - // return completionList; - // } - // result.ExpressionContext = ExpressionContext.TypeName; - // return CreateCtrlSpaceCompletionData (completionContext, result); - // } - case "override": + return isAsWrapper.Result; + // { + // CompletionDataList completionList = new ProjectDomCompletionDataList (); + // ExpressionResult expressionResult = FindExpression (dom, completionContext, wordStart - document.Caret.Offset); + // NRefactoryResolver resolver = CreateResolver (); + // ResolveResult resolveResult = resolver.Resolve (expressionResult, new TextLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset)); + // if (resolveResult != null && resolveResult.ResolvedType != null) { + // CompletionDataCollector col = new CompletionDataCollector (this, dom, completionList, Document.CompilationUnit, resolver.CallingType, location); + // IType foundType = null; + // if (word == "as") { + // ExpressionContext exactContext = new NewCSharpExpressionFinder (dom).FindExactContextForAsCompletion (document, Document.CompilationUnit, Document.FileName, resolver.CallingType); + // if (exactContext is ExpressionContext.TypeExpressionContext) { + // foundType = resolver.SearchType (((ExpressionContext.TypeExpressionContext)exactContext).Type); + // AddAsCompletionData (col, foundType); + // } + // } + // + // if (foundType == null) + // foundType = resolver.SearchType (resolveResult.ResolvedType); + // + // if (foundType != null) { + // if (foundType.ClassType == ClassType.Interface) + // foundType = resolver.SearchType (DomReturnType.Object); + // + // foreach (IType type in dom.GetSubclasses (foundType)) { + // if (type.IsSpecialName || type.Name.StartsWith ("<")) + // continue; + // AddAsCompletionData (col, type); + // } + // } + // List<string > namespaceList = GetUsedNamespaces (); + // foreach (object o in dom.GetNamespaceContents (namespaceList, true, true)) { + // if (o is IType) { + // IType type = (IType)o; + // if (type.ClassType != ClassType.Interface || type.IsSpecialName || type.Name.StartsWith ("<")) + // continue; + // // if (foundType != null && !dom.GetInheritanceTree (foundType).Any (x => x.FullName == type.FullName)) + // // continue; + // AddAsCompletionData (col, type); + // continue; + // } + // if (o is Namespace) + // continue; + // col.Add (o); + // } + // return completionList; + // } + // result.ExpressionContext = ExpressionContext.TypeName; + // return CreateCtrlSpaceCompletionData (completionContext, result); + // } + case "override": // Look for modifiers, in order to find the beginning of the declaration - int firstMod = wordStart; - int i = wordStart; - for (int n = 0; n < 3; n++) { - string mod = GetPreviousToken(ref i, true); - if (mod == "public" || mod == "protected" || mod == "private" || mod == "internal" || mod == "sealed") { - firstMod = i; - } else if (mod == "static") { - // static methods are not overridable - return null; - } else { - break; - } - } - if (!IsLineEmptyUpToEol()) { + int firstMod = wordStart; + int i = wordStart; + for (int n = 0; n < 3; n++) { + string mod = GetPreviousToken(ref i, true); + if (mod == "public" || mod == "protected" || mod == "private" || mod == "internal" || mod == "sealed") { + firstMod = i; + } else if (mod == "static") { + // static methods are not overridable return null; + } else { + break; } - if (currentType != null && (currentType.Kind == TypeKind.Class || currentType.Kind == TypeKind.Struct)) { - string modifiers = document.GetText(firstMod, wordStart - firstMod); - return GetOverrideCompletionData(currentType, modifiers); - } + } + if (!IsLineEmptyUpToEol()) { return null; - case "partial": + } + if (currentType != null && (currentType.Kind == TypeKind.Class || currentType.Kind == TypeKind.Struct)) { + string modifiers = document.GetText(firstMod, wordStart - firstMod); + return GetOverrideCompletionData(currentType, modifiers); + } + return null; + case "partial": // Look for modifiers, in order to find the beginning of the declaration - firstMod = wordStart; - i = wordStart; - for (int n = 0; n < 3; n++) { - string mod = GetPreviousToken(ref i, true); - if (mod == "public" || mod == "protected" || mod == "private" || mod == "internal" || mod == "sealed") { - firstMod = i; - } else if (mod == "static") { - // static methods are not overridable - return null; - } else { - break; - } - } - if (!IsLineEmptyUpToEol()) { + firstMod = wordStart; + i = wordStart; + for (int n = 0; n < 3; n++) { + string mod = GetPreviousToken(ref i, true); + if (mod == "public" || mod == "protected" || mod == "private" || mod == "internal" || mod == "sealed") { + firstMod = i; + } else if (mod == "static") { + // static methods are not overridable return null; + } else { + break; } - var state = GetState(); - - if (state.CurrentTypeDefinition != null && (state.CurrentTypeDefinition.Kind == TypeKind.Class || state.CurrentTypeDefinition.Kind == TypeKind.Struct)) { - string modifiers = document.GetText(firstMod, wordStart - firstMod); - return GetPartialCompletionData(state.CurrentTypeDefinition, modifiers); - } + } + if (!IsLineEmptyUpToEol()) { return null; + } + var state = GetState(); - case "public": - case "protected": - case "private": - case "internal": - case "sealed": - case "static": - var accessorContext = HandleAccessorContext(); - if (accessorContext != null) { - return accessorContext; - } - wrapper = new CompletionDataWrapper(this); - state = GetState(); - if (currentType != null) { - AddTypesAndNamespaces(wrapper, state, null, null, m => false); - AddKeywords(wrapper, primitiveTypesKeywords); - } - AddKeywords(wrapper, typeLevelKeywords); - return wrapper.Result; - case "new": - int j = offset - 4; + if (state.CurrentTypeDefinition != null && (state.CurrentTypeDefinition.Kind == TypeKind.Class || state.CurrentTypeDefinition.Kind == TypeKind.Struct)) { + string modifiers = document.GetText(firstMod, wordStart - firstMod); + return GetPartialCompletionData(state.CurrentTypeDefinition, modifiers); + } + return null; + + case "public": + case "protected": + case "private": + case "internal": + case "sealed": + case "static": + var accessorContext = HandleAccessorContext(); + if (accessorContext != null) { + return accessorContext; + } + wrapper = new CompletionDataWrapper(this); + state = GetState(); + if (currentType != null) { + AddTypesAndNamespaces(wrapper, state, null, null, m => false); + AddKeywords(wrapper, primitiveTypesKeywords); + } + AddKeywords(wrapper, typeLevelKeywords); + return wrapper.Result; + case "new": + int j = offset - 4; // string token = GetPreviousToken (ref j, true); - IType hintType = null; - var expressionOrVariableDeclaration = GetNewExpressionAt(j); - if (expressionOrVariableDeclaration == null) - return null; - var astResolver = CompletionContextProvider.GetResolver(GetState(), expressionOrVariableDeclaration.Unit); - hintType = CreateFieldAction.GetValidTypes( + IType hintType = null; + var expressionOrVariableDeclaration = GetNewExpressionAt(j); + if (expressionOrVariableDeclaration == null) + return null; + var astResolver = CompletionContextProvider.GetResolver(GetState(), expressionOrVariableDeclaration.Unit); + hintType = CreateFieldAction.GetValidTypes( astResolver, expressionOrVariableDeclaration.Node as Expression ) .FirstOrDefault(); - return CreateTypeCompletionData(hintType); - case "yield": - var yieldDataList = new CompletionDataWrapper(this); - DefaultCompletionString = "return"; - yieldDataList.AddCustom("break"); - yieldDataList.AddCustom("return"); - return yieldDataList.Result; - case "in": - var inList = new CompletionDataWrapper(this); + return CreateTypeCompletionData(hintType); + case "yield": + var yieldDataList = new CompletionDataWrapper(this); + DefaultCompletionString = "return"; + yieldDataList.AddCustom("break"); + yieldDataList.AddCustom("return"); + return yieldDataList.Result; + case "in": + var inList = new CompletionDataWrapper(this); - var expr = GetExpressionAtCursor(); - var rr = ResolveExpression(expr); + var expr = GetExpressionAtCursor(); + var rr = ResolveExpression(expr); - AddContextCompletion( + AddContextCompletion( inList, rr != null ? rr.Item2 : GetState(), expr.Node ); - return inList.Result; + return inList.Result; } return null; } @@ -1740,12 +1740,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var lookup = new MemberLookup( ctx.CurrentTypeDefinition, Compilation.MainAssembly - ); + ); typeCallback = (data, t) => { //check if type is in inheritance tree. if (hintType.GetDefinition() != null && - t.GetDefinition() != null && - t.GetDefinition().IsDerivedFrom(hintType.GetDefinition())) { + t.GetDefinition() != null && + t.GetDefinition().IsDerivedFrom(hintType.GetDefinition())) { data.CompletionCategory = derivedTypesCategory; } }; @@ -1761,8 +1761,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (!t.GetConstructors().Any(m => lookup.IsAccessible( m, isProtectedAllowed - ) - )) { + ) + )) { return null; } } @@ -1822,16 +1822,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion int j = declarationBegin; for (int i = 0; i < 3; i++) { switch (GetPreviousToken(ref j, true)) { - case "public": - case "protected": - case "private": - case "internal": - case "sealed": - case "override": - declarationBegin = j; - break; - case "static": - return null; // don't add override completion for static members + case "public": + case "protected": + case "private": + case "internal": + case "sealed": + case "override": + declarationBegin = j; + break; + case "static": + return null; // don't add override completion for static members } } AddVirtuals( @@ -1840,7 +1840,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion modifiers, type.Resolve(ctx), declarationBegin - ); + ); return wrapper.Result; } @@ -1851,16 +1851,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion int j = declarationBegin; for (int i = 0; i < 3; i++) { switch (GetPreviousToken(ref j, true)) { - case "public": - case "protected": - case "private": - case "internal": - case "sealed": - case "override": - declarationBegin = j; - break; - case "static": - return null; // don't add override completion for static members + case "public": + case "protected": + case "private": + case "internal": + case "sealed": + case "override": + declarationBegin = j; + break; + case "static": + return null; // don't add override completion for static members } } @@ -1882,8 +1882,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion declarationBegin, method.DeclaringTypeDefinition, method - ) - ); + ) + ); } return wrapper.Result; @@ -1926,13 +1926,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion declarationBegin, currentType, m - ); + ); // check if the member is already implemented bool foundMember = curType.GetMembers().Any(cm => SignatureComparer.Ordinal.Equals( cm, m - ) && cm.DeclaringTypeDefinition == curType.GetDefinition() - ); + ) && cm.DeclaringTypeDefinition == curType.GetDefinition() + ); if (foundMember) { continue; } @@ -2014,34 +2014,47 @@ namespace ICSharpCode.NRefactory.CSharp.Completion "delegate", "Creates anonymous delegate.", "delegate {" + EolMarker + thisLineIndent + IndentString + "|" + delegateEndString - ); + ); } var sb = new StringBuilder("("); var sbWithoutTypes = new StringBuilder("("); + var state = GetState(); + var builder = new TypeSystemAstBuilder(state); + for (int k = 0; k < delegateMethod.Parameters.Count; k++) { if (k > 0) { sb.Append(", "); sbWithoutTypes.Append(", "); } - var parameterType = delegateMethod.Parameters [k].Type; - sb.Append(GetShortType(parameterType, GetState())); - sb.Append(" "); - sb.Append(delegateMethod.Parameters [k].Name); + var convertedParameter = builder.ConvertParameter (delegateMethod.Parameters [k]); + if (convertedParameter.ParameterModifier == ParameterModifier.Params) + convertedParameter.ParameterModifier = ParameterModifier.None; + sb.Append(convertedParameter.GetText (FormattingPolicy)); sbWithoutTypes.Append(delegateMethod.Parameters [k].Name); } + sb.Append(")"); sbWithoutTypes.Append(")"); completionList.AddCustom( "delegate" + sb, "Creates anonymous delegate.", "delegate" + sb + " {" + EolMarker + thisLineIndent + IndentString + "|" + delegateEndString - ); - if (!completionList.Result.Any(data => data.DisplayText == sbWithoutTypes.ToString())) { + ); + + if (!completionList.Result.Any(data => data.DisplayText == sb.ToString())) { + completionList.AddCustom( + sb.ToString(), + "Creates typed lambda expression.", + sb + " => |" + (addSemicolon ? ";" : "") + ); + } + + if (!delegateMethod.Parameters.Any (p => p.IsOut || p.IsRef) && !completionList.Result.Any(data => data.DisplayText == sbWithoutTypes.ToString())) { completionList.AddCustom( sbWithoutTypes.ToString(), "Creates lambda expression.", sbWithoutTypes + " => |" + (addSemicolon ? ";" : "") - ); + ); } /* TODO:Make factory method out of it. // It's needed to temporarly disable inserting auto matching bracket because the anonymous delegates are selectable with '(' @@ -2075,7 +2088,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion calledType, currentMember, includeProtected - ); + ); } if (member.IsProtected && !(member.DeclaringTypeDefinition.IsProtectedOrInternal && !includeProtected)) { @@ -2103,7 +2116,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // should never happen ! result = true; }*/ - return member.IsProtectedAndInternal ? includeProtected && result : result; + return member.IsProtectedAndInternal ? includeProtected && result : result; } if (!(currentMember is IType) && (currentMember.DeclaringTypeDefinition == null || member.DeclaringTypeDefinition == null)) { @@ -2215,7 +2228,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion parameterDefinition, currentMember, currentType) - ); + ); } } @@ -2310,7 +2323,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var lookup = new MemberLookup( ctx.CurrentTypeDefinition, Compilation.MainAssembly - ); + ); if (resolveResult is LocalResolveResult) { @@ -2340,7 +2353,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion resolveResult, ((IdentifierExpression)resolvedNode).Identifier, out trr - )) { + )) { if (currentMember != null && mrr.Member.IsStatic ^ currentMember.IsStatic) { skipNonStaticMembers = true; @@ -2593,8 +2606,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } tref.ReplaceWith(expr); } - exit: - return new ExpressionResult((AstNode)expr, baseUnit); + exit: + return new ExpressionResult((AstNode)expr, baseUnit); } ExpressionResult GetExpressionAtCursor() @@ -2612,7 +2625,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion AstNode expr = baseUnit.GetNodeAt( location, n => n is IdentifierExpression || n is MemberReferenceExpression - ); + ); if (expr == null) { expr = baseUnit.GetNodeAt<AstType>(location.Line, location.Column - 1); @@ -2623,12 +2636,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (expr == null && baseUnit.GetNodeAt<EmptyStatement>( location.Line, location.Column - ) != null) { + ) != null) { tmpUnit = baseUnit = ParseStub("a();", false); expr = baseUnit.GetNodeAt<InvocationExpression>( location.Line, location.Column + 1 - ); + ); } if (expr == null) { @@ -2636,7 +2649,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion expr = baseUnit.GetNodeAt<IdentifierExpression>( location.Line, location.Column - 1 - ); + ); if (expr == null) { expr = baseUnit.GetNodeAt<MemberType>(location.Line, location.Column - 1); } @@ -2647,7 +2660,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion expr = baseUnit.GetNodeAt( location, n => n is IdentifierExpression || n is MemberReferenceExpression || n is CatchClause - ); + ); } // try statement @@ -2655,7 +2668,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion expr = tmpUnit.GetNodeAt<SwitchStatement>( location.Line, location.Column - 1 - ); + ); baseUnit = tmpUnit; } @@ -2677,7 +2690,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var forStmt = tmpUnit.GetNodeAt<ForeachStatement>( location.Line, location.Column - 3 - ); + ); if (forStmt != null && forStmt.EmbeddedStatement.IsNull) { forStmt.VariableNameToken = Identifier.Create("stub"); expr = forStmt.VariableNameToken; @@ -2688,7 +2701,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion expr = tmpUnit.GetNodeAt<VariableInitializer>( location.Line, location.Column - 1 - ); + ); baseUnit = tmpUnit; } @@ -2698,7 +2711,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion expr = baseUnit.GetNodeAt<TypeParameterDeclaration>( location.Line, location.Column - 1 - ); + ); } // try parameter declaration method @@ -2707,7 +2720,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion expr = baseUnit.GetNodeAt<TypeParameterDeclaration>( location.Line, location.Column - 1 - ); + ); } // try expression in anonymous type "new { sample = x$" case @@ -2716,7 +2729,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion expr = baseUnit.GetNodeAt<AnonymousTypeCreateExpression>( location.Line, location.Column - ); + ); if (expr != null) { expr = baseUnit.GetNodeAt<Expression>(location.Line, location.Column) ?? expr; } @@ -2746,7 +2759,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion var expr = completionUnit.GetNodeAt( loc, n => n is Expression || n is VariableDeclarationStatement - ); + ); if (expr == null) { return null; } @@ -2868,14 +2881,14 @@ namespace ICSharpCode.NRefactory.CSharp.Completion "summary", "value" } - ); + ); string GetLastClosingXmlCommentTag() { var line = document.GetLineByNumber(location.Line); - restart: - string lineText = document.GetText(line); + restart: + string lineText = document.GetText(line); if (!lineText.Trim().StartsWith("///")) return null; int startIndex = Math.Min(location.Column - 1, lineText.Length - 1) - 1; @@ -2914,105 +2927,105 @@ namespace ICSharpCode.NRefactory.CSharp.Completion if (closingTag != null) { yield return factory.CreateLiteralCompletionData( "/" + closingTag + ">" - ); + ); } yield return factory.CreateLiteralCompletionData( "c", "Set text in a code-like font" - ); + ); yield return factory.CreateLiteralCompletionData( "code", "Set one or more lines of source code or program output" - ); + ); yield return factory.CreateLiteralCompletionData( "example", "Indicate an example" - ); + ); yield return factory.CreateLiteralCompletionData( "exception", "Identifies the exceptions a method can throw", "exception cref=\"|\"></exception>" - ); + ); yield return factory.CreateLiteralCompletionData( "include", "Includes comments from a external file", "include file=\"|\" path=\"\">" - ); + ); yield return factory.CreateLiteralCompletionData( "list", "Create a list or table", "list type=\"|\">" - ); + ); yield return factory.CreateLiteralCompletionData( "listheader", "Define the heading row" - ); + ); yield return factory.CreateLiteralCompletionData( "item", "Defines list or table item" - ); + ); yield return factory.CreateLiteralCompletionData("term", "A term to define"); yield return factory.CreateLiteralCompletionData( "description", "Describes a list item" - ); + ); yield return factory.CreateLiteralCompletionData( "para", "Permit structure to be added to text" - ); + ); yield return factory.CreateLiteralCompletionData( "param", "Describe a parameter for a method or constructor", "param name=\"|\">" - ); + ); yield return factory.CreateLiteralCompletionData( "paramref", "Identify that a word is a parameter name", "paramref name=\"|\"/>" - ); + ); yield return factory.CreateLiteralCompletionData( "permission", "Document the security accessibility of a member", "permission cref=\"|\"" - ); + ); yield return factory.CreateLiteralCompletionData( "remarks", "Describe a type" - ); + ); yield return factory.CreateLiteralCompletionData( "returns", "Describe the return value of a method" - ); + ); yield return factory.CreateLiteralCompletionData( "see", "Specify a link", "see cref=\"|\"/>" - ); + ); yield return factory.CreateLiteralCompletionData( "seealso", "Generate a See Also entry", "seealso cref=\"|\"/>" - ); + ); yield return factory.CreateLiteralCompletionData( "summary", "Describe a member of a type" - ); + ); yield return factory.CreateLiteralCompletionData( "typeparam", "Describe a type parameter for a generic type or method" - ); + ); yield return factory.CreateLiteralCompletionData( "typeparamref", "Identify that a word is a type parameter name" - ); + ); yield return factory.CreateLiteralCompletionData( "value", "Describe a property" - ); + ); } #endregion diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index de60fd29e6..8ecaec6236 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -2387,7 +2387,9 @@ namespace ICSharpCode.NRefactory.CSharp if (binaryExpression.Left != null) result.AddChild ((Expression)binaryExpression.Left.Accept (this), BinaryOperatorExpression.LeftRole); - result.AddChild (new CSharpTokenNode (Convert (binaryExpression.Location)), BinaryOperatorExpression.GetOperatorRole (result.Operator)); + var location = LocationsBag.GetLocations (binaryExpression); + if (location != null) + result.AddChild (new CSharpTokenNode (Convert (location[0])), BinaryOperatorExpression.GetOperatorRole (result.Operator)); if (binaryExpression.Right != null) result.AddChild ((Expression)binaryExpression.Right.Accept (this), BinaryOperatorExpression.RightRole); return result; @@ -2399,7 +2401,9 @@ namespace ICSharpCode.NRefactory.CSharp result.Operator = BinaryOperatorType.NullCoalescing; if (nullCoalescingOperator.LeftExpression != null) result.AddChild ((Expression)nullCoalescingOperator.LeftExpression.Accept (this), BinaryOperatorExpression.LeftRole); - result.AddChild (new CSharpTokenNode (Convert (nullCoalescingOperator.Location)), BinaryOperatorExpression.NullCoalescingRole); + var location = LocationsBag.GetLocations (nullCoalescingOperator); + if (location != null) + result.AddChild (new CSharpTokenNode (Convert (location[0])), BinaryOperatorExpression.NullCoalescingRole); if (nullCoalescingOperator.RightExpression != null) result.AddChild ((Expression)nullCoalescingOperator.RightExpression.Accept (this), BinaryOperatorExpression.RightRole); return result; @@ -3073,7 +3077,9 @@ namespace ICSharpCode.NRefactory.CSharp result.Operator = AssignmentOperatorType.Assign; if (simpleAssign.Target != null) result.AddChild ((Expression)simpleAssign.Target.Accept (this), AssignmentExpression.LeftRole); - result.AddChild (new CSharpTokenNode (Convert (simpleAssign.Location)), AssignmentExpression.AssignRole); + var location = LocationsBag.GetLocations (simpleAssign); + if (location != null) + result.AddChild (new CSharpTokenNode (Convert (location[0])), AssignmentExpression.AssignRole); if (simpleAssign.Source != null) { result.AddChild ((Expression)simpleAssign.Source.Accept (this), AssignmentExpression.RightRole); } @@ -3118,7 +3124,9 @@ namespace ICSharpCode.NRefactory.CSharp if (compoundAssign.Target != null) result.AddChild ((Expression)compoundAssign.Target.Accept (this), AssignmentExpression.LeftRole); - result.AddChild (new CSharpTokenNode (Convert (compoundAssign.Location)), AssignmentExpression.GetOperatorRole (result.Operator)); + var location = LocationsBag.GetLocations (compoundAssign); + if (location != null) + result.AddChild (new CSharpTokenNode (Convert (location[0])), AssignmentExpression.GetOperatorRole (result.Operator)); if (compoundAssign.Source != null) result.AddChild ((Expression)compoundAssign.Source.Accept (this), AssignmentExpression.RightRole); return result; @@ -3469,6 +3477,73 @@ namespace ICSharpCode.NRefactory.CSharp return result; } #endregion + + #region XmlDoc + public DocumentationReference ConvertXmlDoc(DocumentationBuilder doc) + { + DocumentationReference result = new DocumentationReference(); + if (doc.ParsedName != null) { + if (doc.ParsedName.Name == "<this>") { + result.EntityType = EntityType.Indexer; + } else { + result.MemberName = doc.ParsedName.Name; + } + if (doc.ParsedName.Left != null) { + result.DeclaringType = ConvertToType(doc.ParsedName.Left); + } else if (doc.ParsedBuiltinType != null) { + result.DeclaringType = ConvertToType(doc.ParsedBuiltinType); + } + if (doc.ParsedName.TypeParameters != null) { + for (int i = 0; i < doc.ParsedName.TypeParameters.Count; i++) { + result.TypeArguments.Add(ConvertToType(doc.ParsedName.TypeParameters[i])); + } + } + } else if (doc.ParsedBuiltinType != null) { + result.EntityType = EntityType.TypeDefinition; + result.DeclaringType = ConvertToType(doc.ParsedBuiltinType); + } + if (doc.ParsedParameters != null) { + result.HasParameterList = true; + result.Parameters.AddRange(doc.ParsedParameters.Select(ConvertXmlDocParameter)); + } + if (doc.ParsedOperator != null) { + result.EntityType = EntityType.Operator; + result.OperatorType = (OperatorType)doc.ParsedOperator; + if (result.OperatorType == OperatorType.Implicit || result.OperatorType == OperatorType.Explicit) { + var returnTypeParam = result.Parameters.LastOrNullObject(); + returnTypeParam.Remove(); // detach from parameter list + var returnType = returnTypeParam.Type; + returnType.Remove(); + result.ConversionOperatorReturnType = returnType; + } + if (result.Parameters.Count == 0) { + // reset HasParameterList if necessary + result.HasParameterList = false; + } + } + return result; + } + + ParameterDeclaration ConvertXmlDocParameter(DocumentationParameter p) + { + ParameterDeclaration result = new ParameterDeclaration(); + switch (p.Modifier) { + case Parameter.Modifier.OUT: + result.ParameterModifier = ParameterModifier.Out; + break; + case Parameter.Modifier.REF: + result.ParameterModifier = ParameterModifier.Ref; + break; + case Parameter.Modifier.PARAMS: + result.ParameterModifier = ParameterModifier.Params; + break; + } + if (p.Type != null) { + result.Type = ConvertToType(p.Type); + } + return result; + } + #endregion } public CSharpParser () @@ -3669,7 +3744,9 @@ namespace ICSharpCode.NRefactory.CSharp if (top.LastYYValue is Mono.CSharp.Expression) { conversionVisitor.Unit.TopExpression = ((Mono.CSharp.Expression)top.LastYYValue).Accept(conversionVisitor) as AstNode; } + conversionVisitor.Unit.FileName = fileName; + conversionVisitor.Unit.ConditionalSymbols = top.Conditionals.ToArray (); return conversionVisitor.Unit; } @@ -3709,12 +3786,15 @@ namespace ICSharpCode.NRefactory.CSharp var file = new SourceFile (fileName, fileName, 0); Location.Initialize (new List<SourceFile> (new [] { file })); var module = new ModuleContainer (ctx); - var parser = Driver.Parse (reader, file, module, lineModifier); - + var session = new ParserSession (); + session.LocationsBag = new LocationsBag (); + var report = new Report (ctx, errorReportPrinter); + var parser = Driver.Parse (reader, file, module, session, report, lineModifier); var top = new CompilerCompilationUnit () { ModuleCompiled = module, - LocationsBag = parser.LocationsBag, - SpecialsBag = parser.Lexer.sbag + LocationsBag = session.LocationsBag, + SpecialsBag = parser.Lexer.sbag, + Conditionals = parser.Lexer.SourceFile.Conditionals }; var unit = Parse (top, fileName, lineModifier); unit.Errors.AddRange (errorReportPrinter.Errors); @@ -3730,8 +3810,13 @@ namespace ICSharpCode.NRefactory.CSharp if (cu == null) return Enumerable.Empty<EntityDeclaration> (); var td = cu.Children.FirstOrDefault () as TypeDeclaration; - if (td != null) - return td.Members; + if (td != null) { + var members = td.Members.ToArray(); + // detach members from parent + foreach (var m in members) + m.Remove(); + return members; + } return Enumerable.Empty<EntityDeclaration> (); } @@ -3740,8 +3825,13 @@ namespace ICSharpCode.NRefactory.CSharp string code = "void M() { " + Environment.NewLine + reader.ReadToEnd () + "}"; var members = ParseTypeMembers (new StringReader (code), lineModifier - 1); var method = members.FirstOrDefault () as MethodDeclaration; - if (method != null && method.Body != null) - return method.Body.Statements; + if (method != null && method.Body != null) { + var statements = method.Body.Statements.ToArray(); + // detach statements from parent + foreach (var st in statements) + st.Remove(); + return statements; + } return Enumerable.Empty<Statement> (); } @@ -3750,8 +3840,11 @@ namespace ICSharpCode.NRefactory.CSharp string code = reader.ReadToEnd () + " a;"; var members = ParseTypeMembers (new StringReader (code)); var field = members.FirstOrDefault () as FieldDeclaration; - if (field != null) - return field.ReturnType; + if (field != null) { + AstType type = field.ReturnType; + type.Remove(); + return type; + } return AstType.Null; } @@ -3760,8 +3853,11 @@ namespace ICSharpCode.NRefactory.CSharp var es = ParseStatements (new StringReader ("tmp = " + Environment.NewLine + reader.ReadToEnd () + ";"), -1).FirstOrDefault () as ExpressionStatement; if (es != null) { AssignmentExpression ae = es.Expression as AssignmentExpression; - if (ae != null) - return ae.Right; + if (ae != null) { + Expression expr = ae.Right; + expr.Remove(); + return expr; + } } return Expression.Null; } @@ -3777,12 +3873,41 @@ namespace ICSharpCode.NRefactory.CSharp public DocumentationReference ParseDocumentationReference (string cref) { + // see Mono.CSharp.DocumentationBuilder.HandleXrefCommon if (cref == null) throw new ArgumentNullException ("cref"); + + // Additional symbols for < and > are allowed for easier XML typing cref = cref.Replace ('{', '<').Replace ('}', '>'); - // TODO: add support for parsing cref attributes - // (documentation_parsing production, see DocumentationBuilder.HandleXrefCommon) - throw new NotImplementedException (); + + lock (parseLock) { + errorReportPrinter = new ErrorReportPrinter(""); + var ctx = new CompilerContext(compilerSettings.ToMono(), errorReportPrinter); + ctx.Settings.TabSize = 1; + var stream = new MemoryStream(Encoding.Unicode.GetBytes(cref)); + var reader = new SeekableStreamReader(stream, Encoding.Unicode); + var file = new SourceFile("", "", 0); + Location.Initialize(new List<SourceFile> (new [] { file })); + var module = new ModuleContainer(ctx); + module.DocumentationBuilder = new DocumentationBuilder(module); + var source_file = new CompilationSourceFile (module); + var report = new Report (ctx, errorReportPrinter); + ParserSession session = new ParserSession (); + session.LocationsBag = new LocationsBag (); + var parser = new Mono.CSharp.CSharpParser (reader, source_file, report, session); + parser.Lexer.putback_char = Tokenizer.DocumentationXref; + parser.Lexer.parsing_generic_declaration_doc = true; + parser.parse (); + if (report.Errors > 0) { +// Report.Warning (1584, 1, mc.Location, "XML comment on `{0}' has syntactically incorrect cref attribute `{1}'", +// mc.GetSignatureForError (), cref); + } + + ConversionVisitor conversionVisitor = new ConversionVisitor (false, session.LocationsBag); + DocumentationReference docRef = conversionVisitor.ConvertXmlDoc(module.DocumentationBuilder); + CompilerCallableEntryPoint.Reset(); + return docRef; + } } } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolFile.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolFile.cs index 664cdf0cf8..9b83bf3bed 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolFile.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolFile.cs @@ -53,7 +53,7 @@ namespace Mono.CompilerServices.SymbolWriter } } - internal class MyBinaryWriter : BinaryWriter + sealed class MyBinaryWriter : BinaryWriter { public MyBinaryWriter (Stream stream) : base (stream) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs index c9beaa0d43..88d604f2e3 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/MonoSymbolTable.cs @@ -183,6 +183,7 @@ namespace Mono.CompilerServices.SymbolWriter { #region This is actually written to the symbol file public readonly int Row; + public int Column; public readonly int File; public readonly int Offset; public readonly bool IsHidden; // Obsolete is never used @@ -195,28 +196,35 @@ namespace Mono.CompilerServices.SymbolWriter public int Compare (LineNumberEntry l1, LineNumberEntry l2) { return l1.Row == l2.Row ? - l1.Offset.CompareTo (l2.Offset) : + l1.Column.CompareTo (l2.Column) : l1.Row.CompareTo (l2.Row); } } - public static readonly LineNumberEntry Null = new LineNumberEntry (0, 0, 0); + public static readonly LineNumberEntry Null = new LineNumberEntry (0, 0, 0, 0); + + public LineNumberEntry (int file, int row, int column, int offset) + : this (file, row, offset, column, false) + { + } public LineNumberEntry (int file, int row, int offset) - : this (file, row, offset, false) - { } + : this (file, row, -1, offset, false) + { + } - public LineNumberEntry (int file, int row, int offset, bool is_hidden) + public LineNumberEntry (int file, int row, int column, int offset, bool is_hidden) { this.File = file; this.Row = row; + this.Column = column; this.Offset = offset; this.IsHidden = is_hidden; } public override string ToString () { - return String.Format ("[Line {0}:{1}:{2}]", File, Row, Offset); + return String.Format ("[Line {0}:{1,2}:{3}]", File, Row, Column, Offset); } } @@ -675,8 +683,7 @@ namespace Mono.CompilerServices.SymbolWriter creating = true; } - public SourceFileEntry (MonoSymbolFile file, string file_name, - byte[] guid, byte[] checksum) + public SourceFileEntry (MonoSymbolFile file, string file_name, byte[] guid, byte[] checksum) : this (file, file_name) { this.guid = guid; @@ -694,13 +701,15 @@ namespace Mono.CompilerServices.SymbolWriter DataOffset = (int) bw.BaseStream.Position; bw.Write (file_name); - if (guid == null) { - guid = Guid.NewGuid ().ToByteArray (); + if (guid == null) + guid = new byte[16]; + + if (hash == null) { try { - using (FileStream fs = new FileStream (file_name, FileMode.Open, FileAccess.Read)) { - MD5 md5 = MD5.Create (); - hash = md5.ComputeHash (fs); - } + using (FileStream fs = new FileStream (file_name, FileMode.Open, FileAccess.Read)) { + MD5 md5 = MD5.Create (); + hash = md5.ComputeHash (fs); + } } catch { hash = new byte [16]; } @@ -791,7 +800,6 @@ namespace Mono.CompilerServices.SymbolWriter public const int Default_LineRange = 8; public const byte Default_OpcodeBase = 9; - public const bool SuppressDuplicates = true; #endregion public const byte DW_LNS_copy = 1; @@ -822,7 +830,7 @@ namespace Mono.CompilerServices.SymbolWriter this._line_numbers = lines; } - internal void Write (MonoSymbolFile file, MyBinaryWriter bw) + internal void Write (MonoSymbolFile file, MyBinaryWriter bw, bool readColumnsInfo) { int start = (int) bw.BaseStream.Position; @@ -832,11 +840,6 @@ namespace Mono.CompilerServices.SymbolWriter int line_inc = LineNumbers [i].Row - last_line; int offset_inc = LineNumbers [i].Offset - last_offset; - if (SuppressDuplicates && (i+1 < LineNumbers.Length)) { - if (LineNumbers [i+1].Equals (LineNumbers [i])) - continue; - } - if (LineNumbers [i].File != last_file) { bw.Write (DW_LNS_set_file); bw.WriteLeb128 (LineNumbers [i].File); @@ -884,17 +887,23 @@ namespace Mono.CompilerServices.SymbolWriter bw.Write ((byte) 1); bw.Write (DW_LNE_end_sequence); + for (int i = 0; i < LineNumbers.Length; i++) { + var ln = LineNumbers [i]; + if (ln.Row >= 0) + bw.WriteLeb128 (ln.Column); + } + file.ExtendedLineNumberSize += (int) bw.BaseStream.Position - start; } - internal static LineNumberTable Read (MonoSymbolFile file, MyBinaryReader br) + internal static LineNumberTable Read (MonoSymbolFile file, MyBinaryReader br, bool readColumnsInfo) { LineNumberTable lnt = new LineNumberTable (file); - lnt.DoRead (file, br); + lnt.DoRead (file, br, readColumnsInfo); return lnt; } - void DoRead (MonoSymbolFile file, MyBinaryReader br) + void DoRead (MonoSymbolFile file, MyBinaryReader br, bool includesColumns) { var lines = new List<LineNumberEntry> (); @@ -911,7 +920,7 @@ namespace Mono.CompilerServices.SymbolWriter if (opcode == DW_LNE_end_sequence) { if (modified) lines.Add (new LineNumberEntry ( - stm_file, stm_line, stm_offset, is_hidden)); + stm_file, stm_line, -1, stm_offset, is_hidden)); break; } else if (opcode == DW_LNE_MONO_negate_is_hidden) { is_hidden = !is_hidden; @@ -929,7 +938,7 @@ namespace Mono.CompilerServices.SymbolWriter switch (opcode) { case DW_LNS_copy: lines.Add (new LineNumberEntry ( - stm_file, stm_line, stm_offset, is_hidden)); + stm_file, stm_line, -1, stm_offset, is_hidden)); modified = false; break; case DW_LNS_advance_pc: @@ -959,13 +968,20 @@ namespace Mono.CompilerServices.SymbolWriter stm_offset += opcode / LineRange; stm_line += LineBase + (opcode % LineRange); lines.Add (new LineNumberEntry ( - stm_file, stm_line, stm_offset, is_hidden)); + stm_file, stm_line, -1, stm_offset, is_hidden)); modified = false; } } - _line_numbers = new LineNumberEntry [lines.Count]; - lines.CopyTo (_line_numbers, 0); + _line_numbers = lines.ToArray (); + + if (includesColumns) { + for (int i = 0; i < _line_numbers.Length; ++i) { + var ln = _line_numbers[i]; + if (ln.Row >= 0) + ln.Column = br.ReadLeb128 (); + } + } } public bool GetMethodBounds (out LineNumberEntry start, out LineNumberEntry end) @@ -1022,7 +1038,8 @@ namespace Mono.CompilerServices.SymbolWriter [Flags] public enum Flags { - LocalNamesAmbiguous = 1 + LocalNamesAmbiguous = 1, + ColumnsInfoIncluded = 1 << 1 } public const int Size = 12; @@ -1176,7 +1193,7 @@ namespace Mono.CompilerServices.SymbolWriter } LineNumberTableOffset = (int) bw.BaseStream.Position; - lnt.Write (file, bw); + lnt.Write (file, bw, (flags & Flags.ColumnsInfoIncluded) != 0); DataOffset = (int) bw.BaseStream.Position; @@ -1204,7 +1221,7 @@ namespace Mono.CompilerServices.SymbolWriter long old_pos = reader.BaseStream.Position; reader.BaseStream.Position = LineNumberTableOffset; - lnt = LineNumberTable.Read (SymbolFile, reader); + lnt = LineNumberTable.Read (SymbolFile, reader, (flags & Flags.ColumnsInfoIncluded) != 0); reader.BaseStream.Position = old_pos; return lnt; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs index 1ff399cdcd..b45bf8a1fb 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/SourceMethodBuilder.cs @@ -64,7 +64,7 @@ namespace Mono.CompilerServices.SymbolWriter public void MarkSequencePoint (int offset, SourceFileEntry file, int line, int column, bool is_hidden) { int file_idx = file != null ? file.Index : 0; - var lne = new LineNumberEntry (file_idx, line, offset, is_hidden); + var lne = new LineNumberEntry (file_idx, line, column, offset, is_hidden); if (method_lines.Count > 0) { var prev = method_lines[method_lines.Count - 1]; @@ -185,7 +185,7 @@ namespace Mono.CompilerServices.SymbolWriter { MethodEntry entry = new MethodEntry ( file, _comp_unit.Entry, token, ScopeVariables, - Locals, method_lines.ToArray (), Blocks, null, 0, ns_id); + Locals, method_lines.ToArray (), Blocks, null, MethodEntry.Flags.ColumnsInfoIncluded, ns_id); file.AddMethod (entry); } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs index 87a472af79..9a2c4a334a 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/anonymous.cs @@ -816,7 +816,7 @@ namespace Mono.CSharp { sealed class HoistedFieldAssign : CompilerAssign { public HoistedFieldAssign (Expression target, Expression source) - : base (target, source, source.Location) + : base (target, source, target.Location) { } @@ -1503,6 +1503,10 @@ namespace Mono.CSharp { aec.Set (flags); + var bc = ec as BlockContext; + if (bc != null) + aec.FlowOffset = bc.FlowOffset; + var errors = ec.Report.Errors; bool res = Block.Resolve (ec.CurrentBranching, aec, null); @@ -2013,11 +2017,11 @@ namespace Mono.CSharp { IntConstant FNV_prime = new IntConstant (Compiler.BuiltinTypes, 16777619, loc); rs_hashcode = new Binary (Binary.Operator.Multiply, - new Binary (Binary.Operator.ExclusiveOr, rs_hashcode, field_hashcode, loc), - FNV_prime, loc); + new Binary (Binary.Operator.ExclusiveOr, rs_hashcode, field_hashcode), + FNV_prime); Expression field_to_string = new Conditional (new BooleanExpression (new Binary (Binary.Operator.Inequality, - new MemberAccess (new This (f.Location), f.Name), new NullLiteral (loc), loc)), + new MemberAccess (new This (f.Location), f.Name), new NullLiteral (loc))), new Invocation (new MemberAccess ( new MemberAccess (new This (f.Location), f.Name), "ToString"), null), new StringConstant (Compiler.BuiltinTypes, string.Empty, loc), loc); @@ -2028,9 +2032,7 @@ namespace Mono.CSharp { string_concat, new Binary (Binary.Operator.Addition, new StringConstant (Compiler.BuiltinTypes, " " + p.Name + " = ", loc), - field_to_string, - loc), - loc); + field_to_string)); continue; } @@ -2040,18 +2042,15 @@ namespace Mono.CSharp { string_concat = new Binary (Binary.Operator.Addition, new Binary (Binary.Operator.Addition, string_concat, - new StringConstant (Compiler.BuiltinTypes, ", " + p.Name + " = ", loc), - loc), - field_to_string, - loc); + new StringConstant (Compiler.BuiltinTypes, ", " + p.Name + " = ", loc)), + field_to_string); - rs_equals = new Binary (Binary.Operator.LogicalAnd, rs_equals, field_equal, loc); + rs_equals = new Binary (Binary.Operator.LogicalAnd, rs_equals, field_equal); } string_concat = new Binary (Binary.Operator.Addition, string_concat, - new StringConstant (Compiler.BuiltinTypes, " }", loc), - loc); + new StringConstant (Compiler.BuiltinTypes, " }", loc)); // // Equals (object obj) override @@ -2062,9 +2061,9 @@ namespace Mono.CSharp { new As (equals_block.GetParameterReference (0, loc), current_type, loc), loc))); - Expression equals_test = new Binary (Binary.Operator.Inequality, other_variable, new NullLiteral (loc), loc); + Expression equals_test = new Binary (Binary.Operator.Inequality, other_variable, new NullLiteral (loc)); if (rs_equals != null) - equals_test = new Binary (Binary.Operator.LogicalAnd, equals_test, rs_equals, loc); + equals_test = new Binary (Binary.Operator.LogicalAnd, equals_test, rs_equals); equals_block.AddStatement (new Return (equals_test, loc)); equals.Block = equals_block; @@ -2106,19 +2105,19 @@ namespace Mono.CSharp { var hash_variable = new LocalVariableReference (li_hash, loc); hashcode_block.AddStatement (new StatementExpression ( new CompoundAssign (Binary.Operator.Addition, hash_variable, - new Binary (Binary.Operator.LeftShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 13, loc), loc), loc))); + new Binary (Binary.Operator.LeftShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 13, loc))))); hashcode_block.AddStatement (new StatementExpression ( new CompoundAssign (Binary.Operator.ExclusiveOr, hash_variable, - new Binary (Binary.Operator.RightShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 7, loc), loc), loc))); + new Binary (Binary.Operator.RightShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 7, loc))))); hashcode_block.AddStatement (new StatementExpression ( new CompoundAssign (Binary.Operator.Addition, hash_variable, - new Binary (Binary.Operator.LeftShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 3, loc), loc), loc))); + new Binary (Binary.Operator.LeftShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 3, loc))))); hashcode_block.AddStatement (new StatementExpression ( new CompoundAssign (Binary.Operator.ExclusiveOr, hash_variable, - new Binary (Binary.Operator.RightShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 17, loc), loc), loc))); + new Binary (Binary.Operator.RightShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 17, loc))))); hashcode_block.AddStatement (new StatementExpression ( new CompoundAssign (Binary.Operator.Addition, hash_variable, - new Binary (Binary.Operator.LeftShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 5, loc), loc), loc))); + new Binary (Binary.Operator.LeftShift, hash_variable, new IntConstant (Compiler.BuiltinTypes, 5, loc))))); hashcode_block.AddStatement (new Return (hash_variable, loc)); hashcode.Block = hashcode_top; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs index 9da98b8a80..22e28eaf72 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/argument.cs @@ -320,20 +320,20 @@ namespace Mono.CSharp if (a.Expr is Constant) { info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "Constant", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "Constant", loc)); } else if (a.ArgType == Argument.AType.Ref) { info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "IsRef", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "IsRef", loc)); info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "UseCompileTimeType", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "UseCompileTimeType", loc)); } else if (a.ArgType == Argument.AType.Out) { info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "IsOut", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "IsOut", loc)); info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "UseCompileTimeType", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "UseCompileTimeType", loc)); } else if (a.ArgType == Argument.AType.DynamicTypeName) { info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "IsStaticType", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "IsStaticType", loc)); } var arg_type = a.Expr.Type; @@ -354,14 +354,14 @@ namespace Mono.CSharp } info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "UseCompileTimeType", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "UseCompileTimeType", loc)); } string named_value; NamedArgument na = a as NamedArgument; if (na != null) { info_flags = new Binary (Binary.Operator.BitwiseOr, info_flags, - new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "NamedArgument", loc), loc); + new MemberAccess (new MemberAccess (binder, info_flags_enum, loc), "NamedArgument", loc)); named_value = na.Name; } else { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs index 673d586d10..ce8e254308 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/assign.cs @@ -543,11 +543,11 @@ namespace Mono.CSharp { ExpressionStatement resolved; IMemberContext mc; - public FieldInitializer (FieldSpec spec, Expression expression, IMemberContext mc) - : base (new FieldExpr (spec, expression.Location), expression, expression.Location) + public FieldInitializer (FieldBase mc, Expression expression, Location loc) + : base (new FieldExpr (mc.Spec, expression.Location), expression, loc) { this.mc = mc; - if (!spec.IsStatic) + if (!mc.IsStatic) ((FieldExpr)target).InstanceExpression = new CompilerGeneratedThis (mc.CurrentType, expression.Location); } @@ -660,15 +660,15 @@ namespace Mono.CSharp { } } - public CompoundAssign (Binary.Operator op, Expression target, Expression source, Location loc) - : base (target, source, loc) + public CompoundAssign (Binary.Operator op, Expression target, Expression source) + : base (target, source, target.Location) { right = source; this.op = op; } - public CompoundAssign (Binary.Operator op, Expression target, Expression source, Expression left, Location loc) - : this (op, target, source, loc) + public CompoundAssign (Binary.Operator op, Expression target, Expression source, Expression left) + : this (op, target, source) { this.left = left; } @@ -731,7 +731,7 @@ namespace Mono.CSharp { if (left == null) left = new TargetExpression (target); - source = new Binary (op, left, right, true, loc); + source = new Binary (op, left, right, true); if (target is DynamicMemberAssignable) { Arguments targs = ((DynamicMemberAssignable) target).Arguments; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs index 4c0cce6127..e962e7d623 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/async.cs @@ -227,7 +227,9 @@ namespace Mono.CSharp // // awaiter = expr.GetAwaiter (); // - fe_awaiter.EmitAssign (ec, expr, false, false); + using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { + fe_awaiter.EmitAssign (ec, expr, false, false); + } Label skip_continuation = ec.DefineLabel (); @@ -284,14 +286,8 @@ namespace Mono.CSharp awaiter.IsAvailableForReuse = true; - if (ResultType.Kind != MemberKind.Void) { - var storey = (AsyncTaskStorey) machine_initializer.Storey; - - if (storey.HoistedReturn != null) - storey.HoistedReturn.EmitAssign (ec); - else - ec.Emit (OpCodes.Pop); - } + if (ResultType.Kind != MemberKind.Void) + ec.Emit (OpCodes.Pop); } void Error_WrongAwaiterPattern (ResolveContext rc, TypeSpec awaiter) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs index 47eaad62e0..eff7a5231d 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/attribute.cs @@ -1016,7 +1016,7 @@ namespace Mono.CSharp { 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"); + Error_AttributeEmitError ("DllName cannot be empty or null"); } } else if (Type == predefined.MethodImpl && pt.BuiltinType == BuiltinTypeSpec.Type.Short && !System.Enum.IsDefined (typeof (MethodImplOptions), ((Constant) arg_expr).GetValue ().ToString ())) { @@ -1476,6 +1476,12 @@ namespace Mono.CSharp { Encode (type.MemberDefinition.IsImported ? old_type.AssemblyQualifiedName : old_type.FullName); } + public void EncodeTypeName (TypeContainer type) + { + Encode (type.GetSignatureForMetadata ()); + } + + // // Encodes single property named argument per call // @@ -1629,6 +1635,10 @@ namespace Mono.CSharp { // New in .NET 4.0 public readonly PredefinedDynamicAttribute Dynamic; + // New in .NET 4.5 + public readonly PredefinedStateMachineAttribute AsyncStateMachine; + public readonly PredefinedStateMachineAttribute IteratorStateMachine; + // // Optional types which are used as types and for member lookup // @@ -1690,6 +1700,11 @@ namespace Mono.CSharp { StructLayout = new PredefinedAttribute (module, "System.Runtime.InteropServices", "StructLayoutAttribute"); FieldOffset = new PredefinedAttribute (module, "System.Runtime.InteropServices", "FieldOffsetAttribute"); + AsyncStateMachine = new PredefinedStateMachineAttribute (module, "System.Runtime.CompilerServices", "AsyncStateMachineAttribute"); + IteratorStateMachine = new PredefinedStateMachineAttribute (module, "System.Runtime.CompilerServices", "IteratorStateMachineAttribute") { + IsIterator = true + }; + CallerMemberNameAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerMemberNameAttribute"); CallerLineNumberAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerLineNumberAttribute"); CallerFilePathAttribute = new PredefinedAttribute (module, "System.Runtime.CompilerServices", "CallerFilePathAttribute"); @@ -1877,6 +1892,34 @@ namespace Mono.CSharp { } } + public class PredefinedStateMachineAttribute : PredefinedAttribute + { + public PredefinedStateMachineAttribute (ModuleContainer module, string ns, string name) + : base (module, ns, name) + { + } + + public bool IsIterator { get; set; } + + public void EmitAttribute (MethodBuilder builder, StateMachine type) + { + var predefined_ctor = IsIterator ? + module.PredefinedMembers.IteratorStateMachineAttributeCtor : + module.PredefinedMembers.AsyncStateMachineAttributeCtor; + + var ctor = predefined_ctor.Get (); + + if (ctor == null) + return; + + AttributeEncoder encoder = new AttributeEncoder (); + encoder.EncodeTypeName (type); + encoder.EncodeEmptyNamedArguments (); + + builder.SetCustomAttribute ((ConstructorInfo) ctor.GetMetaInfo (), encoder.ToArray ()); + } + } + public class PredefinedDynamicAttribute : PredefinedAttribute { MethodSpec tctor; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs index 9e2cfc8b96..8724e48b52 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cfold.cs @@ -187,7 +187,7 @@ namespace Mono.CSharp { // if ((lt.BuiltinType == BuiltinTypeSpec.Type.Bool && right is NullLiteral) || (rt.BuiltinType == BuiltinTypeSpec.Type.Bool && left is NullLiteral)) { - var b = new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + var b = new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); // false | null => null // null | false => null @@ -231,7 +231,7 @@ namespace Mono.CSharp { // if ((lt.BuiltinType == BuiltinTypeSpec.Type.Bool && right is NullLiteral) || (rt.BuiltinType == BuiltinTypeSpec.Type.Bool && left is NullLiteral)) { - var b = new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + var b = new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); // false & null => false // null & false => false @@ -469,7 +469,7 @@ namespace Mono.CSharp { if (left is NullLiteral && right is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (!DoBinaryNumericPromotions (ec, ref left, ref right)) @@ -566,7 +566,7 @@ namespace Mono.CSharp { if (left is NullLiteral && right is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (!DoBinaryNumericPromotions (ec, ref left, ref right)) @@ -662,7 +662,7 @@ namespace Mono.CSharp { if (left is NullLiteral && right is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (!DoBinaryNumericPromotions (ec, ref left, ref right)) @@ -762,7 +762,7 @@ namespace Mono.CSharp { if (left is NullLiteral && right is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (!DoBinaryNumericPromotions (ec, ref left, ref right)) @@ -852,7 +852,7 @@ namespace Mono.CSharp { if (left is NullLiteral && right is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } IntConstant ic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant; @@ -873,7 +873,7 @@ namespace Mono.CSharp { // null << value => null if (left is NullLiteral) - return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); left = left.ConvertImplicitly (ec.BuiltinTypes.Int); if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int) @@ -889,7 +889,7 @@ namespace Mono.CSharp { if (left is NullLiteral && right is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } IntConstant sic = right.ConvertImplicitly (ec.BuiltinTypes.Int) as IntConstant; @@ -909,7 +909,7 @@ namespace Mono.CSharp { // null >> value => null if (left is NullLiteral) - return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); left = left.ConvertImplicitly (ec.BuiltinTypes.Int); if (left.Type.BuiltinType == BuiltinTypeSpec.Type.Int) @@ -925,7 +925,7 @@ namespace Mono.CSharp { if (left.IsNull || right.IsNull) { return ReducedExpression.Create ( new BoolConstant (ec.BuiltinTypes, left.IsNull == right.IsNull, left.Location), - new Binary (oper, left, right, loc)); + new Binary (oper, left, right)); } if (left is StringConstant && right is StringConstant) @@ -969,7 +969,7 @@ namespace Mono.CSharp { if (left.IsNull || right.IsNull) { return ReducedExpression.Create ( new BoolConstant (ec.BuiltinTypes, left.IsNull != right.IsNull, left.Location), - new Binary (oper, left, right, loc)); + new Binary (oper, left, right)); } if (left is StringConstant && right is StringConstant) @@ -1011,11 +1011,11 @@ namespace Mono.CSharp { if (left is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (left is Nullable.LiftedNull) { - return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); } } @@ -1051,11 +1051,11 @@ namespace Mono.CSharp { if (left is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (left is Nullable.LiftedNull) { - return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); } } @@ -1091,11 +1091,11 @@ namespace Mono.CSharp { if (left is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (left is Nullable.LiftedNull) { - return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); } } @@ -1131,11 +1131,11 @@ namespace Mono.CSharp { if (left is NullLiteral) { var lifted_int = new Nullable.NullableType (ec.BuiltinTypes.Int, loc); lifted_int.ResolveAsType (ec); - return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, lifted_int, right).Resolve (ec); } if (left is Nullable.LiftedNull) { - return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right, loc).Resolve (ec); + return (Constant) new Nullable.LiftedBinaryOperator (oper, left, right).Resolve (ec); } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs index c776c47b08..645f53245c 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/class.cs @@ -346,6 +346,24 @@ namespace Mono.CSharp return MemberName.GetSignatureForError (); } + public string GetSignatureForMetadata () + { +#if STATIC + var name = TypeNameParser.Escape (MemberName.Basename); + + if (Parent is TypeDefinition) { + return Parent.GetSignatureForMetadata () + "+" + name; + } + + if (Parent != null && Parent.MemberName != null) + return Parent.GetSignatureForMetadata () + "." + name; + + return name; +#else + throw new NotImplementedException (); +#endif + } + public virtual void RemoveContainer (TypeContainer cont) { if (containers != null) @@ -1845,13 +1863,20 @@ namespace Mono.CSharp return; string class_indexer_name = null; - has_normal_indexers = true; // // Check normal indexers for consistent name, explicit interface implementation // indexers are ignored // foreach (var indexer in indexers) { + // + // FindMembers can return unfiltered full hierarchy names + // + if (indexer.DeclaringType != spec) + continue; + + has_normal_indexers = true; + if (class_indexer_name == null) { indexer_name = class_indexer_name = indexer.Name; continue; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs index 026d410698..9bb7066758 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/codegen.cs @@ -944,10 +944,10 @@ namespace Mono.CSharp if (method.ReturnType.Kind == MemberKind.Void && method.IsConditionallyExcluded (ec.MemberContext, loc)) return; - EmitPredefined (ec, method, Arguments); + EmitPredefined (ec, method, Arguments, loc); } - public void EmitPredefined (EmitContext ec, MethodSpec method, Arguments Arguments) + public void EmitPredefined (EmitContext ec, MethodSpec method, Arguments Arguments, Location? loc = null) { Expression instance_copy = null; @@ -1006,6 +1006,18 @@ namespace Mono.CSharp ec.Emit (OpCodes.Constrained, InstanceExpression.Type); } + if (loc != null) { + // + // Emit explicit sequence point for expressions like Foo.Bar () to help debugger to + // break at right place when LHS expression can be stepped-into + // + // TODO: The list is probably not comprehensive, need to do more testing + // + if (InstanceExpression is PropertyExpr || InstanceExpression is Invocation || InstanceExpression is IndexerExpr || + InstanceExpression is New || InstanceExpression is DelegateInvocation) + ec.Mark (loc.Value); + } + // // Set instance expression to actual result expression. When it contains await it can be // picked up by caller diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs index 5eb93d129a..31cba91fe0 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/const.cs @@ -59,7 +59,7 @@ namespace Mono.CSharp { if ((field_attr & FieldAttributes.InitOnly) != 0) Parent.PartialContainer.RegisterFieldForInitialization (this, - new FieldInitializer (spec, initializer, this)); + new FieldInitializer (this, initializer, Location)); if (declarators != null) { var t = new TypeExpression (MemberType, TypeExpression.Location); diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs index 5f309854bd..0e45bd5deb 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/context.cs @@ -13,6 +13,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Security.Cryptography; namespace Mono.CSharp { @@ -730,4 +731,28 @@ namespace Mono.CSharp return new FlagsHandle (this, options, enable ? options : 0); } } + + // + // Parser session objects. We could recreate all these objects for each parser + // instance but the best parser performance the session object can be reused + // + public class ParserSession + { + MD5 md5; + + public readonly char[] StreamReaderBuffer = new char[SeekableStreamReader.DefaultReadAheadSize * 2]; + public readonly Dictionary<char[], string>[] Identifiers = new Dictionary<char[], string>[Tokenizer.MaxIdentifierLength + 1]; + public readonly List<Parameter> ParametersStack = new List<Parameter> (4); + public readonly char[] IDBuilder = new char[Tokenizer.MaxIdentifierLength]; + public readonly char[] NumberBuilder = new char[Tokenizer.MaxNumberLength]; + + public LocationsBag LocationsBag { get; set; } + public bool UseJayGlobalArrays { get; set; } + public Tokenizer.LocatedToken[] LocatedTokens { get; set; } + + public MD5 GetChecksumAlgorithm () + { + return md5 ?? (md5 = MD5.Create ()); + } + } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs index 32eafa832d..b9491273a1 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.cs @@ -78,7 +78,7 @@ namespace Mono.CSharp /// /// An out-of-band stack. /// - static Stack<object> oob_stack; + Stack<object> oob_stack; /// /// Controls the verbosity of the errors produced by the parser @@ -134,12 +134,19 @@ namespace Mono.CSharp // share the bucket for very common constructs which can never // be recursive // - static List<Parameter> parameters_bucket = new List<Parameter> (6); + List<Parameter> parameters_bucket; // // Full AST support members // - LocationsBag lbag; + readonly LocationsBag lbag; + + public LocationsBag LocationsBag { + get { + return lbag; + } + } + List<Tuple<Modifiers, Location>> mod_locations; Location parameterModifierLocation, savedLocation, savedOpenLocation, savedCloseLocation; Location savedAttrParenOpenLocation, savedAttrParenCloseLocation, savedOperatorLocation; @@ -163,10 +170,10 @@ namespace Mono.CSharp public void yyerror (string message) { yyerror(message, null); } - +#pragma warning disable 649 /* An EOF token */ public int eof_token; - +#pragma warning restore 649 /** (syntax) error message. Can be overwritten to control message format. @param message text to be displayed. @@ -516,6 +523,7 @@ namespace Mono.CSharp //t "enum_member_declaration : opt_attributes IDENTIFIER", //t "$$59 :", //t "enum_member_declaration : opt_attributes IDENTIFIER $$59 ASSIGN constant_expression", +//t "enum_member_declaration : opt_attributes IDENTIFIER error", //t "enum_member_declaration : attributes_without_members", //t "$$60 :", //t "$$61 :", @@ -753,7 +761,6 @@ namespace Mono.CSharp //t "additive_expression : multiplicative_expression", //t "additive_expression : additive_expression PLUS multiplicative_expression", //t "additive_expression : additive_expression MINUS multiplicative_expression", -//t "additive_expression : parenthesized_expression MINUS multiplicative_expression", //t "additive_expression : additive_expression AS type", //t "additive_expression : additive_expression IS type", //t "shift_expression : additive_expression", @@ -1045,10 +1052,12 @@ namespace Mono.CSharp //t "goto_statement : GOTO CASE constant_expression SEMICOLON", //t "goto_statement : GOTO DEFAULT SEMICOLON", //t "return_statement : RETURN opt_expression SEMICOLON", +//t "return_statement : RETURN expression error", //t "return_statement : RETURN error", //t "throw_statement : THROW opt_expression SEMICOLON", //t "throw_statement : THROW error", //t "yield_statement : identifier_inside_body RETURN opt_expression SEMICOLON", +//t "yield_statement : identifier_inside_body RETURN expression error", //t "yield_statement : identifier_inside_body BREAK SEMICOLON", //t "opt_expression :", //t "opt_expression : expression", @@ -1240,7 +1249,9 @@ namespace Mono.CSharp //t return "[unknown]"; //t } +#pragma warning disable 414 int yyExpectingState; +#pragma warning restore 414 /** computes list of expected tokens on error by tracing the tables. @param state for which to compute the list. @return list of token names. @@ -1306,7 +1317,9 @@ namespace Mono.CSharp static int[] global_yyStates; static object[] global_yyVals; +#pragma warning disable 649 protected bool use_global_stacks; +#pragma warning restore 649 object[] yyVals; // value stack object yyVal; // value stack ptr int yyToken; // current input @@ -2328,38 +2341,38 @@ case 322: case 323: case_323(); break; -case 325: -#line 2678 "cs-parser.jay" +case 324: + case_324(); + break; +case 326: +#line 2693 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; -case 326: - case_326(); - break; case 327: -#line 2697 "cs-parser.jay" + case_327(); + break; +case 328: +#line 2712 "cs-parser.jay" { lexer.ConstraintsParsing = false; } break; -case 328: - case_328(); - break; -case 330: - case_330(); +case 329: + case_329(); break; -case 332: - case_332(); +case 331: + case_331(); break; -case 334: - case_334(); +case 333: + case_333(); break; case 335: case_335(); break; -case 337: - case_337(); +case 336: + case_336(); break; case 338: case_338(); @@ -2371,19 +2384,19 @@ case 340: case_340(); break; case 341: -#line 2803 "cs-parser.jay" + case_341(); + break; +case 342: +#line 2818 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; -case 342: - case_342(); - break; case 343: case_343(); break; -case 345: - case_345(); +case 344: + case_344(); break; case 346: case_346(); @@ -2400,8 +2413,8 @@ case 349: case 350: case_350(); break; -case 352: - case_352(); +case 351: + case_351(); break; case 353: case_353(); @@ -2415,60 +2428,60 @@ case 355: case 356: case_356(); break; -case 358: -#line 2925 "cs-parser.jay" +case 357: + case_357(); + break; +case 359: +#line 2940 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; -case 359: -#line 2932 "cs-parser.jay" +case 360: +#line 2947 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; -case 361: - case_361(); +case 362: + case_362(); break; -case 363: - case_363(); +case 364: + case_364(); break; -case 365: - case_365(); +case 366: + case_366(); break; -case 367: -#line 2970 "cs-parser.jay" +case 368: +#line 2985 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 368: - case_368(); - break; case 369: -#line 2989 "cs-parser.jay" + case_369(); + break; +case 370: +#line 3004 "cs-parser.jay" { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 370: - case_370(); - break; case 371: -#line 2998 "cs-parser.jay" + case_371(); + break; +case 372: +#line 3013 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 372: -#line 3002 "cs-parser.jay" +case 373: +#line 3017 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; -case 373: - case_373(); - break; case 374: case_374(); break; @@ -2476,95 +2489,95 @@ case 375: case_375(); break; case 376: -#line 3036 "cs-parser.jay" - { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } + case_376(); break; case 377: -#line 3037 "cs-parser.jay" - { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } +#line 3051 "cs-parser.jay" + { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; case 378: -#line 3038 "cs-parser.jay" - { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } +#line 3052 "cs-parser.jay" + { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; case 379: -#line 3039 "cs-parser.jay" - { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } +#line 3053 "cs-parser.jay" + { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; case 380: -#line 3040 "cs-parser.jay" - { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } +#line 3054 "cs-parser.jay" + { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; case 381: -#line 3041 "cs-parser.jay" +#line 3055 "cs-parser.jay" + { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } + break; +case 382: +#line 3056 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; -case 383: -#line 3046 "cs-parser.jay" +case 384: +#line 3061 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; -case 384: -#line 3047 "cs-parser.jay" +case 385: +#line 3062 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; -case 385: -#line 3048 "cs-parser.jay" +case 386: +#line 3063 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; -case 386: -#line 3049 "cs-parser.jay" +case 387: +#line 3064 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; -case 387: -#line 3050 "cs-parser.jay" +case 388: +#line 3065 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; -case 388: -#line 3051 "cs-parser.jay" +case 389: +#line 3066 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; -case 389: -#line 3052 "cs-parser.jay" +case 390: +#line 3067 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; -case 390: -#line 3053 "cs-parser.jay" +case 391: +#line 3068 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; -case 391: -#line 3054 "cs-parser.jay" +case 392: +#line 3069 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; -case 412: - case_412(); - break; case 413: case_413(); break; -case 417: -#line 3101 "cs-parser.jay" - { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } +case 414: + case_414(); break; case 418: -#line 3105 "cs-parser.jay" - { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } +#line 3116 "cs-parser.jay" + { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; case 419: -#line 3106 "cs-parser.jay" - { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } +#line 3120 "cs-parser.jay" + { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; -case 424: - case_424(); +case 420: +#line 3121 "cs-parser.jay" + { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; case 425: -#line 3139 "cs-parser.jay" + case_425(); + break; +case 426: +#line 3154 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); } break; -case 426: - case_426(); - break; case 427: case_427(); break; @@ -2575,23 +2588,23 @@ case 429: case_429(); break; case 430: -#line 3174 "cs-parser.jay" + case_430(); + break; +case 431: +#line 3189 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); } break; -case 431: - case_431(); - break; case 432: -#line 3182 "cs-parser.jay" + case_432(); + break; +case 433: +#line 3197 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } break; -case 433: - case_433(); - break; case 434: case_434(); break; @@ -2599,28 +2612,28 @@ case 435: case_435(); break; case 436: -#line 3206 "cs-parser.jay" - { yyVal = null; } + case_436(); break; -case 438: - case_438(); +case 437: +#line 3221 "cs-parser.jay" + { yyVal = null; } break; case 439: case_439(); break; case 440: -#line 3229 "cs-parser.jay" - { yyVal = null; } + case_440(); break; case 441: -#line 3233 "cs-parser.jay" +#line 3244 "cs-parser.jay" + { yyVal = null; } + break; +case 442: +#line 3248 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; -case 442: - case_442(); - break; case 443: case_443(); break; @@ -2631,26 +2644,26 @@ case 445: case_445(); break; case 446: -#line 3266 "cs-parser.jay" + case_446(); + break; +case 447: +#line 3281 "cs-parser.jay" { yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } break; -case 447: - case_447(); - break; case 448: case_448(); break; case 449: case_449(); break; -case 452: -#line 3297 "cs-parser.jay" - { yyVal = null; } +case 450: + case_450(); break; -case 454: - case_454(); +case 453: +#line 3312 "cs-parser.jay" + { yyVal = null; } break; case 455: case_455(); @@ -2665,14 +2678,14 @@ case 458: case_458(); break; case 459: -#line 3350 "cs-parser.jay" + case_459(); + break; +case 460: +#line 3365 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; -case 463: - case_463(); - break; case 464: case_464(); break; @@ -2682,8 +2695,8 @@ case 465: case 466: case_466(); break; -case 468: - case_468(); +case 467: + case_467(); break; case 469: case_469(); @@ -2707,38 +2720,38 @@ case 475: case_475(); break; case 476: -#line 3447 "cs-parser.jay" + case_476(); + break; +case 477: +#line 3462 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; -case 478: -#line 3455 "cs-parser.jay" +case 479: +#line 3470 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } break; -case 479: - case_479(); - break; case 480: case_480(); break; case 481: -#line 3475 "cs-parser.jay" + case_481(); + break; +case 482: +#line 3490 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; -case 482: -#line 3482 "cs-parser.jay" +case 483: +#line 3497 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; -case 483: - case_483(); - break; case 484: case_484(); break; @@ -2758,23 +2771,23 @@ case 489: case_489(); break; case 490: -#line 3549 "cs-parser.jay" + case_490(); + break; +case 491: +#line 3564 "cs-parser.jay" { ++lexer.parsing_type; } break; -case 491: - case_491(); - break; case 492: case_492(); break; -case 495: -#line 3576 "cs-parser.jay" - { yyVal = null; } +case 493: + case_493(); break; -case 497: - case_497(); +case 496: +#line 3591 "cs-parser.jay" + { yyVal = null; } break; case 498: case_498(); @@ -2791,8 +2804,8 @@ case 501: case 502: case_502(); break; -case 506: - case_506(); +case 503: + case_503(); break; case 507: case_507(); @@ -2801,32 +2814,32 @@ case 508: case_508(); break; case 509: -#line 3654 "cs-parser.jay" + case_509(); + break; +case 510: +#line 3669 "cs-parser.jay" { yyVal = 2; } break; -case 510: -#line 3658 "cs-parser.jay" +case 511: +#line 3673 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; -case 511: -#line 3665 "cs-parser.jay" +case 512: +#line 3680 "cs-parser.jay" { yyVal = null; } break; -case 512: -#line 3669 "cs-parser.jay" +case 513: +#line 3684 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; -case 513: - case_513(); - break; case 514: case_514(); break; @@ -2837,16 +2850,16 @@ case 516: case_516(); break; case 517: -#line 3713 "cs-parser.jay" + case_517(); + break; +case 518: +#line 3728 "cs-parser.jay" { lexer.TypeOfParsing = true; } break; -case 518: - case_518(); - break; -case 521: - case_521(); +case 519: + case_519(); break; case 522: case_522(); @@ -2882,124 +2895,121 @@ case 532: case_532(); break; case 533: -#line 3833 "cs-parser.jay" + case_533(); + break; +case 534: +#line 3848 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); } break; -case 534: - case_534(); - break; case 535: -#line 3846 "cs-parser.jay" + case_535(); + break; +case 536: +#line 3861 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; -case 536: - case_536(); - break; case 537: -#line 3863 "cs-parser.jay" + case_537(); + break; +case 538: +#line 3878 "cs-parser.jay" { yyVal = ParametersCompiled.Undefined; } break; -case 539: -#line 3871 "cs-parser.jay" +case 540: +#line 3886 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 540: - case_540(); - break; case 541: case_541(); break; -case 543: -#line 3897 "cs-parser.jay" +case 542: + case_542(); + break; +case 544: +#line 3912 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 544: -#line 3901 "cs-parser.jay" +case 545: +#line 3916 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 545: - case_545(); - break; case 546: case_546(); break; -case 548: -#line 3937 "cs-parser.jay" +case 547: + case_547(); + break; +case 549: +#line 3952 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 549: -#line 3941 "cs-parser.jay" +case 550: +#line 3956 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 550: -#line 3945 "cs-parser.jay" +case 551: +#line 3960 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 551: -#line 3949 "cs-parser.jay" +case 552: +#line 3964 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 552: -#line 3953 "cs-parser.jay" +case 553: +#line 3968 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 553: -#line 3957 "cs-parser.jay" +case 554: +#line 3972 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; -case 555: - case_555(); - break; case 556: case_556(); break; case 557: case_557(); break; -case 559: - case_559(); +case 558: + case_558(); break; case 560: -#line 3989 "cs-parser.jay" - { - yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_560(); break; case 561: case_561(); break; case 562: -#line 3998 "cs-parser.jay" +#line 4009 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 563: -#line 4002 "cs-parser.jay" +#line 4013 "cs-parser.jay" { yyVal = new Is ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } @@ -3053,10 +3063,7 @@ case 589: case_589(); break; case 590: -#line 4131 "cs-parser.jay" - { - yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_590(); break; case 591: case_591(); @@ -3104,14 +3111,14 @@ case 605: case_605(); break; case 606: -#line 4228 "cs-parser.jay" +#line 4241 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 607: case_607(); break; case 610: -#line 4244 "cs-parser.jay" +#line 4257 "cs-parser.jay" { start_block (Location.Null); } @@ -3135,7 +3142,7 @@ case 617: case_617(); break; case 618: -#line 4289 "cs-parser.jay" +#line 4302 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3147,7 +3154,7 @@ case 620: case_620(); break; case 621: -#line 4303 "cs-parser.jay" +#line 4316 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } @@ -3159,7 +3166,7 @@ case 623: case_623(); break; case 629: -#line 4328 "cs-parser.jay" +#line 4341 "cs-parser.jay" { yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } @@ -3174,13 +3181,13 @@ case 632: case_632(); break; case 634: -#line 4357 "cs-parser.jay" +#line 4370 "cs-parser.jay" { yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; case 635: -#line 4370 "cs-parser.jay" +#line 4383 "cs-parser.jay" { lexer.ConstraintsParsing = true; } @@ -3198,18 +3205,18 @@ case 639: case_639(); break; case 640: -#line 4415 "cs-parser.jay" +#line 4428 "cs-parser.jay" { yyVal = null; } break; case 641: -#line 4417 "cs-parser.jay" +#line 4430 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 642: case_642(); break; case 643: -#line 4430 "cs-parser.jay" +#line 4443 "cs-parser.jay" { lexer.parsing_modifiers = false; } @@ -3269,7 +3276,7 @@ case 663: case_663(); break; case 665: -#line 4556 "cs-parser.jay" +#line 4569 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3299,19 +3306,19 @@ case 673: case_673(); break; case 674: -#line 4649 "cs-parser.jay" +#line 4662 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; case 675: -#line 4653 "cs-parser.jay" +#line 4666 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); } break; case 676: -#line 4660 "cs-parser.jay" +#line 4673 "cs-parser.jay" { yyVal = Variance.None; } @@ -3329,7 +3336,7 @@ case 680: case_680(); break; case 681: -#line 4705 "cs-parser.jay" +#line 4718 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3350,13 +3357,13 @@ case 686: case_686(); break; case 691: -#line 4754 "cs-parser.jay" +#line 4767 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 692: -#line 4758 "cs-parser.jay" +#line 4771 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } @@ -3368,13 +3375,13 @@ case 695: case_695(); break; case 698: -#line 4792 "cs-parser.jay" +#line 4805 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 699: -#line 4796 "cs-parser.jay" +#line 4809 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } @@ -3407,13 +3414,13 @@ case 738: case_738(); break; case 739: -#line 4940 "cs-parser.jay" +#line 4953 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 740: -#line 4944 "cs-parser.jay" +#line 4957 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } @@ -3425,7 +3432,7 @@ case 743: case_743(); break; case 744: -#line 4965 "cs-parser.jay" +#line 4978 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } @@ -3467,7 +3474,7 @@ case 764: case_764(); break; case 765: -#line 5100 "cs-parser.jay" +#line 5113 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); } @@ -3488,18 +3495,18 @@ case 775: case_775(); break; case 776: -#line 5150 "cs-parser.jay" +#line 5163 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 777: case_777(); break; case 778: -#line 5160 "cs-parser.jay" +#line 5173 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 779: -#line 5161 "cs-parser.jay" +#line 5174 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 780: @@ -3521,7 +3528,7 @@ case 787: case_787(); break; case 788: -#line 5236 "cs-parser.jay" +#line 5249 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); } @@ -3545,13 +3552,13 @@ case 795: case_795(); break; case 796: -#line 5287 "cs-parser.jay" +#line 5300 "cs-parser.jay" { current_block = current_block.CreateSwitchBlock (lexer.Location); } break; case 797: -#line 5291 "cs-parser.jay" +#line 5304 "cs-parser.jay" { yyVal = new SwitchSection ((List<SwitchLabel>) yyVals[-2+yyTop], current_block); } @@ -3569,7 +3576,7 @@ case 801: case_801(); break; case 802: -#line 5325 "cs-parser.jay" +#line 5338 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } @@ -3593,7 +3600,7 @@ case 812: case_812(); break; case 813: -#line 5386 "cs-parser.jay" +#line 5399 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3602,7 +3609,7 @@ case 814: case_814(); break; case 815: -#line 5401 "cs-parser.jay" +#line 5414 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3614,7 +3621,7 @@ case 817: case_817(); break; case 818: -#line 5422 "cs-parser.jay" +#line 5435 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } @@ -3629,7 +3636,7 @@ case 821: case_821(); break; case 822: -#line 5456 "cs-parser.jay" +#line 5469 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 824: @@ -3639,11 +3646,11 @@ case 825: case_825(); break; case 827: -#line 5477 "cs-parser.jay" +#line 5490 "cs-parser.jay" { yyVal = null; } break; case 829: -#line 5482 "cs-parser.jay" +#line 5495 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 833: @@ -3703,17 +3710,17 @@ case 856: case 857: case_857(); break; -case 860: -#line 5699 "cs-parser.jay" - { - yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); - } +case 858: + case_858(); break; -case 861: - case_861(); +case 859: + case_859(); break; case 862: - case_862(); +#line 5735 "cs-parser.jay" + { + yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); + } break; case 863: case_863(); @@ -3724,50 +3731,50 @@ case 864: case 865: case_865(); break; -case 868: -#line 5749 "cs-parser.jay" - { - yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } +case 866: + case_866(); break; -case 869: - case_869(); +case 867: + case_867(); break; case 870: -#line 5768 "cs-parser.jay" +#line 5785 "cs-parser.jay" { - yyVal = yyVals[-1+yyTop]; + yyVal = new Catch ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 871: case_871(); break; case 872: -#line 5786 "cs-parser.jay" +#line 5804 "cs-parser.jay" { - yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = yyVals[-1+yyTop]; } break; case 873: -#line 5793 "cs-parser.jay" - { - yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + case_873(); break; case 874: - case_874(); +#line 5822 "cs-parser.jay" + { + yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + } break; case 875: -#line 5803 "cs-parser.jay" +#line 5829 "cs-parser.jay" { - yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 876: case_876(); break; case 877: - case_877(); +#line 5839 "cs-parser.jay" + { + yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); + } break; case 878: case_878(); @@ -3793,20 +3800,20 @@ case 884: case 885: case_885(); break; +case 886: + case_886(); + break; case 887: case_887(); break; -case 888: -#line 5908 "cs-parser.jay" - { - Error_MissingInitializer (lexer.Location); - } - break; case 889: case_889(); break; case 890: - case_890(); +#line 5944 "cs-parser.jay" + { + Error_MissingInitializer (lexer.Location); + } break; case 891: case_891(); @@ -3830,16 +3837,13 @@ case 897: case_897(); break; case 898: -#line 6013 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_898(); break; case 899: case_899(); break; case 900: -#line 6029 "cs-parser.jay" +#line 6049 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3848,28 +3852,31 @@ case 901: case_901(); break; case 902: - case_902(); +#line 6065 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 903: case_903(); break; +case 904: + case_904(); + break; case 905: case_905(); break; -case 906: - case_906(); - break; case 907: -#line 6093 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } + case_907(); break; case 908: case_908(); break; case 909: - case_909(); +#line 6129 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 910: case_910(); @@ -3877,20 +3884,17 @@ case 910: case 911: case_911(); break; +case 912: + case_912(); + break; case 913: case_913(); break; -case 919: -#line 6147 "cs-parser.jay" - { - current_block = new Linq.QueryBlock (current_block, lexer.Location); - } - break; -case 920: - case_920(); +case 915: + case_915(); break; case 921: -#line 6166 "cs-parser.jay" +#line 6183 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } @@ -3899,7 +3903,10 @@ case 922: case_922(); break; case 923: - case_923(); +#line 6202 "cs-parser.jay" + { + current_block = new Linq.QueryBlock (current_block, lexer.Location); + } break; case 924: case_924(); @@ -3922,141 +3929,147 @@ case 929: case 930: case_930(); break; +case 931: + case_931(); + break; case 932: case_932(); break; -case 933: -#line 6320 "cs-parser.jay" +case 934: + case_934(); + break; +case 935: +#line 6356 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; -case 934: - case_934(); - break; case 936: case_936(); break; -case 937: - case_937(); +case 938: + case_938(); break; case 939: case_939(); break; -case 940: - case_940(); - break; case 941: -#line 6366 "cs-parser.jay" - { - yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); - } + case_941(); break; case 942: case_942(); break; case 943: - case_943(); - break; -case 944: -#line 6383 "cs-parser.jay" +#line 6402 "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 944: + case_944(); + break; case 945: case_945(); break; case 946: - case_946(); +#line 6419 "cs-parser.jay" + { + yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); + } + break; +case 947: + case_947(); break; case 948: case_948(); break; -case 949: - case_949(); +case 950: + case_950(); + break; +case 951: + case_951(); break; -case 952: - case_952(); +case 954: + case_954(); break; -case 953: - case_953(); +case 955: + case_955(); break; -case 961: -#line 6505 "cs-parser.jay" +case 963: +#line 6541 "cs-parser.jay" { module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; } break; -case 962: -#line 6512 "cs-parser.jay" +case 964: +#line 6548 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; } break; -case 963: - case_963(); +case 965: + case_965(); break; -case 964: - case_964(); +case 966: + case_966(); break; -case 965: -#line 6529 "cs-parser.jay" +case 967: +#line 6565 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); } break; -case 966: -#line 6533 "cs-parser.jay" +case 968: +#line 6569 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 967: - case_967(); - break; -case 968: - case_968(); - break; case 969: case_969(); break; case 970: case_970(); break; +case 971: + case_971(); + break; case 972: -#line 6569 "cs-parser.jay" + case_972(); + break; +case 974: +#line 6605 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; -case 974: -#line 6577 "cs-parser.jay" +case 976: +#line 6613 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; -case 975: -#line 6581 "cs-parser.jay" +case 977: +#line 6617 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; -case 976: -#line 6588 "cs-parser.jay" +case 978: +#line 6624 "cs-parser.jay" { yyVal = new List<DocumentationParameter> (0); } break; -case 978: - case_978(); - break; -case 979: - case_979(); - break; case 980: case_980(); break; +case 981: + case_981(); + break; +case 982: + case_982(); + break; #line default } yyTop -= yyLen[yyN]; @@ -5949,8 +5962,25 @@ void case_323() yyVal = em; } -void case_326() -#line 2680 "cs-parser.jay" +void case_324() +#line 2668 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + + var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) yyVals[-2+yyTop]); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) { + em.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + yyVal = em; + } + +void case_327() +#line 2695 "cs-parser.jay" { valid_param_mod = 0; @@ -5966,8 +5996,8 @@ void case_326() lexer.ConstraintsParsing = true; } -void case_328() -#line 2699 "cs-parser.jay" +void case_329() +#line 2714 "cs-parser.jay" { if (doc_support) { current_delegate.DocComment = Lexer.consume_doc_comment (); @@ -5983,8 +6013,8 @@ void case_328() current_delegate = null; } -void case_330() -#line 2718 "cs-parser.jay" +void case_331() +#line 2733 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "nullable types"); @@ -5992,8 +6022,8 @@ void case_330() yyVal = ComposedTypeSpecifier.CreateNullable (GetLocation (yyVals[0+yyTop])); } -void case_332() -#line 2729 "cs-parser.jay" +void case_333() +#line 2744 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6002,23 +6032,23 @@ void case_332() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_334() -#line 2741 "cs-parser.jay" +void case_335() +#line 2756 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_335() -#line 2750 "cs-parser.jay" +void case_336() +#line 2765 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } -void case_337() -#line 2762 "cs-parser.jay" +void case_338() +#line 2777 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -6030,15 +6060,15 @@ void case_337() yyVal = yyVals[-1+yyTop];; } -void case_338() -#line 2773 "cs-parser.jay" +void case_339() +#line 2788 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = new TypeArguments (); } -void case_339() -#line 2781 "cs-parser.jay" +void case_340() +#line 2796 "cs-parser.jay" { TypeArguments type_args = new TypeArguments (); type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6046,8 +6076,8 @@ void case_339() locationListStack.Push (new List<Location> ()); } -void case_340() -#line 2788 "cs-parser.jay" +void case_341() +#line 2803 "cs-parser.jay" { TypeArguments type_args = (TypeArguments) yyVals[-2+yyTop]; type_args.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6055,16 +6085,16 @@ void case_340() locationListStack.Peek ().Add (GetLocation (yyVals[-1+yyTop])); } -void case_342() -#line 2805 "cs-parser.jay" +void case_343() +#line 2820 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberName (lt.Value, (TypeParameters)yyVals[0+yyTop], lt.Location); } -void case_343() -#line 2814 "cs-parser.jay" +void case_344() +#line 2829 "cs-parser.jay" { MemberName mn = (MemberName)yyVals[0+yyTop]; if (mn.TypeParameters != null) @@ -6072,38 +6102,38 @@ void case_343() mn.GetSignatureForError ())); } -void case_345() -#line 2825 "cs-parser.jay" +void case_346() +#line 2840 "cs-parser.jay" { lexer.parsing_generic_declaration = false; var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberName (lt.Value, (TypeParameters) yyVals[0+yyTop], (ATypeNameExpression) yyVals[-2+yyTop], lt.Location); } -void case_346() -#line 2834 "cs-parser.jay" +void case_347() +#line 2849 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, GetLocation (yyVals[0+yyTop])); } -void case_347() -#line 2839 "cs-parser.jay" +void case_348() +#line 2854 "cs-parser.jay" { lexer.parsing_generic_declaration = false; yyVal = new MemberName (TypeDefinition.DefaultIndexerName, null, (ATypeNameExpression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } -void case_348() -#line 2847 "cs-parser.jay" +void case_349() +#line 2862 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_349() -#line 2853 "cs-parser.jay" +void case_350() +#line 2868 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -6112,16 +6142,16 @@ void case_349() lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_350() -#line 2861 "cs-parser.jay" +void case_351() +#line 2876 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new MemberAccess ((ATypeNameExpression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[-1+yyTop], lt.Location); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_352() -#line 2871 "cs-parser.jay" +void case_353() +#line 2886 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "generics"); @@ -6133,8 +6163,8 @@ void case_352() lbag.AddLocation (yyVals[-1+yyTop], list); } -void case_353() -#line 2885 "cs-parser.jay" +void case_354() +#line 2900 "cs-parser.jay" { var tparams = new TypeParameters (); tparams.Add ((TypeParameter)yyVals[0+yyTop]); @@ -6142,8 +6172,8 @@ void case_353() locationListStack.Push (new List<Location> ()); } -void case_354() -#line 2892 "cs-parser.jay" +void case_355() +#line 2907 "cs-parser.jay" { var tparams = (TypeParameters) yyVals[-2+yyTop]; tparams.Add ((TypeParameter)yyVals[0+yyTop]); @@ -6151,15 +6181,15 @@ void case_354() locationListStack.Peek ().Add (GetLocation (yyVals[-1+yyTop])); } -void case_355() -#line 2902 "cs-parser.jay" +void case_356() +#line 2917 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken)yyVals[0+yyTop]; yyVal = new TypeParameter (new MemberName (lt.Value, lt.Location), (Attributes)yyVals[-2+yyTop], (Variance) yyVals[-1+yyTop]); } -void case_356() -#line 2907 "cs-parser.jay" +void case_357() +#line 2922 "cs-parser.jay" { if (GetTokenName (yyToken) == "type") report.Error (81, GetLocation (yyVals[0+yyTop]), "Type parameter declaration must be an identifier not a type"); @@ -6169,29 +6199,29 @@ void case_356() yyVal = new TypeParameter (MemberName.Null, null, Variance.None); } -void case_361() -#line 2941 "cs-parser.jay" +void case_362() +#line 2956 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_363() -#line 2950 "cs-parser.jay" +void case_364() +#line 2965 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } -void case_365() -#line 2959 "cs-parser.jay" +void case_366() +#line 2974 "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_368() -#line 2975 "cs-parser.jay" +void case_369() +#line 2990 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); @@ -6204,23 +6234,23 @@ void case_368() } } -void case_370() -#line 2991 "cs-parser.jay" +void case_371() +#line 3006 "cs-parser.jay" { if (yyVals[0+yyTop] != null) yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } -void case_373() -#line 3007 "cs-parser.jay" +void case_374() +#line 3022 "cs-parser.jay" { var types = new List<FullNamedExpression> (2); types.Add ((FullNamedExpression) yyVals[0+yyTop]); yyVal = types; } -void case_374() -#line 3013 "cs-parser.jay" +void case_375() +#line 3028 "cs-parser.jay" { var types = (List<FullNamedExpression>) yyVals[-2+yyTop]; types.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -6228,8 +6258,8 @@ void case_374() yyVal = types; } -void case_375() -#line 3023 "cs-parser.jay" +void case_376() +#line 3038 "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 ()); @@ -6237,29 +6267,29 @@ void case_375() yyVal = yyVals[0+yyTop]; } -void case_412() -#line 3087 "cs-parser.jay" +void case_413() +#line 3102 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (TypeArguments)yyVals[0+yyTop], lt.Location); } -void case_413() -#line 3091 "cs-parser.jay" +void case_414() +#line 3106 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionSimpleName (MemberName.MakeName (lt.Value, null), lt.Location); } -void case_424() -#line 3132 "cs-parser.jay" +void case_425() +#line 3147 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_426() -#line 3144 "cs-parser.jay" +void case_427() +#line 3159 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new MemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, (TypeArguments) yyVals[0+yyTop], lt.Location) { @@ -6267,8 +6297,8 @@ void case_426() }; } -void case_427() -#line 3151 "cs-parser.jay" +void case_428() +#line 3166 "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) { @@ -6276,8 +6306,8 @@ void case_427() }; } -void case_428() -#line 3158 "cs-parser.jay" +void case_429() +#line 3173 "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) { @@ -6285,8 +6315,8 @@ void case_428() }; } -void case_429() -#line 3165 "cs-parser.jay" +void case_430() +#line 3180 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6295,29 +6325,29 @@ void case_429() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_431() -#line 3175 "cs-parser.jay" +void case_432() +#line 3190 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_433() -#line 3183 "cs-parser.jay" +void case_434() +#line 3198 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new CompletionMemberAccess ((Expression) yyVals[-3+yyTop], lt.Value, lt.Location); } -void case_434() -#line 3191 "cs-parser.jay" +void case_435() +#line 3206 "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_435() -#line 3196 "cs-parser.jay" +void case_436() +#line 3211 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -6325,8 +6355,8 @@ void case_435() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_438() -#line 3212 "cs-parser.jay" +void case_439() +#line 3227 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) { yyVal = new CollectionOrObjectInitializers (new List<Expression> (), GetLocation (yyVals[-2+yyTop])); @@ -6337,23 +6367,23 @@ void case_438() } } -void case_439() -#line 3222 "cs-parser.jay" +void case_440() +#line 3237 "cs-parser.jay" { yyVal = new CollectionOrObjectInitializers ((List<Expression>) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_442() -#line 3238 "cs-parser.jay" +void case_443() +#line 3253 "cs-parser.jay" { var a = new List<Expression> (); a.Add ((Expression) yyVals[0+yyTop]); yyVal = a; } -void case_443() -#line 3244 "cs-parser.jay" +void case_444() +#line 3259 "cs-parser.jay" { var a = (List<Expression>)yyVals[-2+yyTop]; a.Add ((Expression) yyVals[0+yyTop]); @@ -6361,23 +6391,23 @@ void case_443() yyVal = a; } -void case_444() -#line 3250 "cs-parser.jay" +void case_445() +#line 3265 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } -void case_445() -#line 3258 "cs-parser.jay" +void case_446() +#line 3273 "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_447() -#line 3267 "cs-parser.jay" +void case_448() +#line 3282 "cs-parser.jay" { CompletionSimpleName csn = yyVals[-1+yyTop] as CompletionSimpleName; if (csn == null) @@ -6386,8 +6416,8 @@ void case_447() yyVal = new CompletionElementInitializer (csn.Prefix, csn.Location); } -void case_448() -#line 3275 "cs-parser.jay" +void case_449() +#line 3290 "cs-parser.jay" { if (yyVals[-1+yyTop] == null) yyVal = null; @@ -6397,24 +6427,24 @@ void case_448() } } -void case_449() -#line 3284 "cs-parser.jay" +void case_450() +#line 3299 "cs-parser.jay" { report.Error (1920, GetLocation (yyVals[-1+yyTop]), "An element initializer cannot be empty"); yyVal = new CollectionElementInitializer (new List<Expression> (), GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_454() -#line 3303 "cs-parser.jay" +void case_455() +#line 3318 "cs-parser.jay" { Arguments list = new Arguments (4); list.Add ((Argument) yyVals[0+yyTop]); yyVal = list; } -void case_455() -#line 3309 "cs-parser.jay" +void case_456() +#line 3324 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; if (list [list.Count - 1] is NamedArgument) @@ -6425,8 +6455,8 @@ void case_455() yyVal = list; } -void case_456() -#line 3319 "cs-parser.jay" +void case_457() +#line 3334 "cs-parser.jay" { Arguments list = (Arguments) yyVals[-2+yyTop]; NamedArgument a = (NamedArgument) yyVals[0+yyTop]; @@ -6442,80 +6472,80 @@ void case_456() yyVal = list; } -void case_457() -#line 3334 "cs-parser.jay" +void case_458() +#line 3349 "cs-parser.jay" { lexer.putback (')'); /* TODO: Wrong but what can I do*/ Error_SyntaxError (yyToken); yyVal = yyVals[-2+yyTop]; } -void case_458() -#line 3340 "cs-parser.jay" +void case_459() +#line 3355 "cs-parser.jay" { report.Error (839, GetLocation (yyVals[-1+yyTop]), "An argument is missing"); yyVal = null; } -void case_463() -#line 3361 "cs-parser.jay" +void case_464() +#line 3376 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_464() -#line 3366 "cs-parser.jay" +void case_465() +#line 3381 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_465() -#line 3371 "cs-parser.jay" +void case_466() +#line 3386 "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_466() -#line 3376 "cs-parser.jay" +void case_467() +#line 3391 "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_468() -#line 3388 "cs-parser.jay" +void case_469() +#line 3403 "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_469() -#line 3393 "cs-parser.jay" +void case_470() +#line 3408 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_470() -#line 3398 "cs-parser.jay" +void case_471() +#line 3413 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess ((Expression) yyVals[-2+yyTop], null, GetLocation (yyVals[-1+yyTop])); } -void case_471() -#line 3406 "cs-parser.jay" +void case_472() +#line 3421 "cs-parser.jay" { var list = new List<Expression> (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_472() -#line 3412 "cs-parser.jay" +void case_473() +#line 3427 "cs-parser.jay" { var list = (List<Expression>) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6523,23 +6553,23 @@ void case_472() yyVal = list; } -void case_473() -#line 3418 "cs-parser.jay" +void case_474() +#line 3433 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = yyVals[-1+yyTop]; } -void case_474() -#line 3426 "cs-parser.jay" +void case_475() +#line 3441 "cs-parser.jay" { Arguments args = new Arguments (4); args.Add ((Argument) yyVals[0+yyTop]); yyVal = args; } -void case_475() -#line 3432 "cs-parser.jay" +void case_476() +#line 3447 "cs-parser.jay" { Arguments args = (Arguments) yyVals[-2+yyTop]; if (args [args.Count - 1] is NamedArgument && !(yyVals[0+yyTop] is NamedArgument)) @@ -6550,22 +6580,22 @@ void case_475() yyVal = args; } -void case_479() -#line 3460 "cs-parser.jay" +void case_480() +#line 3475 "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_480() -#line 3465 "cs-parser.jay" +void case_481() +#line 3480 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new ElementAccess (null, null, GetLocation (yyVals[-1+yyTop])); } -void case_483() -#line 3487 "cs-parser.jay" +void case_484() +#line 3502 "cs-parser.jay" { if (yyVals[0+yyTop] != null) { if (lang_version <= LanguageVersion.ISO_2) @@ -6579,8 +6609,8 @@ void case_483() lbag.AddLocation (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_484() -#line 3500 "cs-parser.jay" +void case_485() +#line 3515 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "collection initializers"); @@ -6588,8 +6618,8 @@ void case_484() yyVal = new NewInitialize ((FullNamedExpression) yyVals[-1+yyTop], null, (CollectionOrObjectInitializers) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_485() -#line 3512 "cs-parser.jay" +void case_486() +#line 3527 "cs-parser.jay" { yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-5+yyTop], (List<Expression>) yyVals[-3+yyTop], new ComposedTypeSpecifier (((List<Expression>) yyVals[-3+yyTop]).Count, GetLocation (yyVals[-4+yyTop])) { @@ -6598,8 +6628,8 @@ void case_485() lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } -void case_486() -#line 3520 "cs-parser.jay" +void case_487() +#line 3535 "cs-parser.jay" { if (yyVals[0+yyTop] == null) report.Error (1586, GetLocation (yyVals[-3+yyTop]), "Array creation must have array size or array initializer"); @@ -6607,8 +6637,8 @@ void case_486() yyVal = new ArrayCreation ((FullNamedExpression) yyVals[-2+yyTop], (ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); } -void case_487() -#line 3527 "cs-parser.jay" +void case_488() +#line 3542 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-2+yyTop]), "implicitly typed arrays"); @@ -6616,30 +6646,30 @@ void case_487() yyVal = new ImplicitlyTypedArrayCreation ((ComposedTypeSpecifier) yyVals[-1+yyTop], (ArrayInitializer) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } -void case_488() -#line 3534 "cs-parser.jay" +void case_489() +#line 3549 "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_489() -#line 3539 "cs-parser.jay" +void case_490() +#line 3554 "cs-parser.jay" { Error_SyntaxError (yyToken); /* It can be any of new expression, create the most common one*/ yyVal = new New ((FullNamedExpression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } -void case_491() -#line 3551 "cs-parser.jay" +void case_492() +#line 3566 "cs-parser.jay" { --lexer.parsing_type; yyVal = yyVals[0+yyTop]; } -void case_492() -#line 3559 "cs-parser.jay" +void case_493() +#line 3574 "cs-parser.jay" { if (lang_version <= LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "anonymous types"); @@ -6650,16 +6680,16 @@ void case_492() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_497() -#line 3582 "cs-parser.jay" +void case_498() +#line 3597 "cs-parser.jay" { var a = new List<AnonymousTypeParameter> (4); a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); yyVal = a; } -void case_498() -#line 3588 "cs-parser.jay" +void case_499() +#line 3603 "cs-parser.jay" { var a = (List<AnonymousTypeParameter>) yyVals[-2+yyTop]; a.Add ((AnonymousTypeParameter) yyVals[0+yyTop]); @@ -6668,60 +6698,60 @@ void case_498() yyVal = a; } -void case_499() -#line 3599 "cs-parser.jay" +void case_500() +#line 3614 "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_500() -#line 3605 "cs-parser.jay" +void case_501() +#line 3620 "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_501() -#line 3611 "cs-parser.jay" +void case_502() +#line 3626 "cs-parser.jay" { MemberAccess ma = (MemberAccess) yyVals[0+yyTop]; yyVal = new AnonymousTypeParameter (ma, ma.Name, ma.Location); } -void case_502() -#line 3616 "cs-parser.jay" +void case_503() +#line 3631 "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_506() -#line 3631 "cs-parser.jay" +void case_507() +#line 3646 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_507() -#line 3639 "cs-parser.jay" +void case_508() +#line 3654 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension (1, GetLocation (yyVals[-1+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_508() -#line 3644 "cs-parser.jay" +void case_509() +#line 3659 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreateArrayDimension ((int)yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_513() -#line 3674 "cs-parser.jay" +void case_514() +#line 3689 "cs-parser.jay" { var ai = new ArrayInitializer (0, GetLocation (yyVals[-1+yyTop])); ai.VariableDeclaration = current_variable; @@ -6729,8 +6759,8 @@ void case_513() yyVal = ai; } -void case_514() -#line 3681 "cs-parser.jay" +void case_515() +#line 3696 "cs-parser.jay" { var ai = new ArrayInitializer ((List<Expression>) yyVals[-2+yyTop], GetLocation (yyVals[-3+yyTop])); ai.VariableDeclaration = current_variable; @@ -6742,16 +6772,16 @@ void case_514() yyVal = ai; } -void case_515() -#line 3695 "cs-parser.jay" +void case_516() +#line 3710 "cs-parser.jay" { var list = new List<Expression> (4); list.Add ((Expression) yyVals[0+yyTop]); yyVal = list; } -void case_516() -#line 3701 "cs-parser.jay" +void case_517() +#line 3716 "cs-parser.jay" { var list = (List<Expression>) yyVals[-2+yyTop]; list.Add ((Expression) yyVals[0+yyTop]); @@ -6759,31 +6789,31 @@ void case_516() yyVal = list; } -void case_518() -#line 3715 "cs-parser.jay" +void case_519() +#line 3730 "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_521() -#line 3726 "cs-parser.jay" +void case_522() +#line 3741 "cs-parser.jay" { Error_TypeExpected (lexer.Location); yyVal = null; } -void case_522() -#line 3734 "cs-parser.jay" +void case_523() +#line 3749 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new SimpleName (lt.Value, (int) yyVals[0+yyTop], lt.Location); } -void case_523() -#line 3740 "cs-parser.jay" +void case_524() +#line 3755 "cs-parser.jay" { var lt1 = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var lt2 = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6792,8 +6822,8 @@ void case_523() lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_524() -#line 3748 "cs-parser.jay" +void case_525() +#line 3763 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -6802,8 +6832,8 @@ void case_524() }; } -void case_525() -#line 3756 "cs-parser.jay" +void case_526() +#line 3771 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -6812,8 +6842,8 @@ void case_525() }; } -void case_526() -#line 3764 "cs-parser.jay" +void case_527() +#line 3779 "cs-parser.jay" { var tne = (ATypeNameExpression) yyVals[-3+yyTop]; if (tne.HasTypeArguments) @@ -6825,8 +6855,8 @@ void case_526() }; } -void case_527() -#line 3778 "cs-parser.jay" +void case_528() +#line 3793 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[0+yyTop]), "generics"); @@ -6834,8 +6864,8 @@ void case_527() yyVal = yyVals[0+yyTop]; } -void case_528() -#line 3788 "cs-parser.jay" +void case_529() +#line 3803 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; if (lang_version == LanguageVersion.ISO_1) @@ -6844,36 +6874,36 @@ void case_528() yyVal = lt; } -void case_529() -#line 3799 "cs-parser.jay" +void case_530() +#line 3814 "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_530() -#line 3807 "cs-parser.jay" +void case_531() +#line 3822 "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_531() -#line 3815 "cs-parser.jay" +void case_532() +#line 3830 "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_532() -#line 3823 "cs-parser.jay" +void case_533() +#line 3838 "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_534() -#line 3835 "cs-parser.jay" +void case_535() +#line 3850 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); if ((ParametersCompiled) yyVals[-2+yyTop] != ParametersCompiled.Undefined) { @@ -6883,8 +6913,8 @@ void case_534() } } -void case_536() -#line 3848 "cs-parser.jay" +void case_537() +#line 3863 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); @@ -6895,8 +6925,8 @@ void case_536() } } -void case_540() -#line 3873 "cs-parser.jay" +void case_541() +#line 3888 "cs-parser.jay" { valid_param_mod = 0; yyVal = yyVals[-1+yyTop]; @@ -6904,8 +6934,8 @@ void case_540() savedCloseLocation = GetLocation (yyVals[-2+yyTop]); } -void case_541() -#line 3883 "cs-parser.jay" +void case_542() +#line 3898 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-3+yyTop]), "default value expression"); @@ -6914,15 +6944,15 @@ void case_541() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_545() -#line 3903 "cs-parser.jay" +void case_546() +#line 3918 "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_546() -#line 3908 "cs-parser.jay" +void case_547() +#line 3923 "cs-parser.jay" { if (!async_block) { if (current_anonymous_method is LambdaExpression) { @@ -6942,227 +6972,235 @@ void case_546() yyVal = new Await ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } -void case_555() -#line 3963 "cs-parser.jay" +void case_556() +#line 3978 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.Multiply, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_556() -#line 3968 "cs-parser.jay" +void case_557() +#line 3983 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.Division, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_557() -#line 3973 "cs-parser.jay" +void case_558() +#line 3988 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.Modulus, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_559() -#line 3982 "cs-parser.jay" +void case_560() +#line 3997 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.Addition, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_561() -#line 3991 "cs-parser.jay" +#line 4002 "cs-parser.jay" { - /* Shift/Reduce conflict*/ - yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); - } + yyVal = new Binary (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } void case_565() -#line 4008 "cs-parser.jay" +#line 4019 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.LeftShift, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_566() -#line 4013 "cs-parser.jay" +#line 4024 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.RightShift, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_568() -#line 4022 "cs-parser.jay" +#line 4033 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.LessThan, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.LessThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_569() -#line 4027 "cs-parser.jay" +#line 4038 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.GreaterThan, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.GreaterThan, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_570() -#line 4032 "cs-parser.jay" +#line 4043 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.LessThanOrEqual, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.LessThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_571() -#line 4037 "cs-parser.jay" +#line 4048 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_573() -#line 4046 "cs-parser.jay" +#line 4057 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.Equality, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.Equality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_574() -#line 4051 "cs-parser.jay" +#line 4062 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.Inequality, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.Inequality, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_576() -#line 4060 "cs-parser.jay" +#line 4071 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.BitwiseAnd, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_578() -#line 4069 "cs-parser.jay" +#line 4080 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.ExclusiveOr, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_580() -#line 4078 "cs-parser.jay" +#line 4089 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.BitwiseOr, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_582() -#line 4087 "cs-parser.jay" +#line 4098 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.LogicalAnd, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.LogicalAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_584() -#line 4096 "cs-parser.jay" +#line 4107 "cs-parser.jay" { - yyVal = new Binary (Binary.Operator.LogicalOr, - (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Binary (Binary.Operator.LogicalOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_586() -#line 4105 "cs-parser.jay" +#line 4116 "cs-parser.jay" { if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation (yyVals[-1+yyTop]), "null coalescing operator"); - yyVal = new Nullable.NullCoalescingOperator ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new Nullable.NullCoalescingOperator ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_588() -#line 4116 "cs-parser.jay" +#line 4128 "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_589() -#line 4121 "cs-parser.jay" +#line 4133 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Conditional (new BooleanExpression ((Expression) yyVals[-3+yyTop]), (Expression) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); } +void case_590() +#line 4141 "cs-parser.jay" +{ + yyVal = new SimpleAssign ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); + } + void case_591() -#line 4133 "cs-parser.jay" +#line 4146 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.Multiply, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_592() -#line 4138 "cs-parser.jay" +#line 4151 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.Division, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_593() -#line 4143 "cs-parser.jay" +#line 4156 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.Modulus, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_594() -#line 4148 "cs-parser.jay" +#line 4161 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.Addition, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_595() -#line 4153 "cs-parser.jay" +#line 4166 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.Subtraction, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_596() -#line 4158 "cs-parser.jay" +#line 4171 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.LeftShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_597() -#line 4163 "cs-parser.jay" +#line 4176 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.RightShift, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_598() -#line 4168 "cs-parser.jay" +#line 4181 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.BitwiseAnd, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_599() -#line 4173 "cs-parser.jay" +#line 4186 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.BitwiseOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_600() -#line 4178 "cs-parser.jay" +#line 4191 "cs-parser.jay" { - yyVal = new CompoundAssign ( - Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); + yyVal = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop]); + lbag.AddLocation (yyVal, GetLocation (yyVals[-1+yyTop])); } void case_601() -#line 4186 "cs-parser.jay" +#line 4199 "cs-parser.jay" { var pars = new List<Parameter> (4); pars.Add ((Parameter) yyVals[0+yyTop]); @@ -7171,7 +7209,7 @@ void case_601() } void case_602() -#line 4193 "cs-parser.jay" +#line 4206 "cs-parser.jay" { var pars = (List<Parameter>) yyVals[-2+yyTop]; Parameter p = (Parameter)yyVals[0+yyTop]; @@ -7186,7 +7224,7 @@ void case_602() } void case_603() -#line 4209 "cs-parser.jay" +#line 4222 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -7194,7 +7232,7 @@ void case_603() } void case_604() -#line 4215 "cs-parser.jay" +#line 4228 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; @@ -7202,14 +7240,14 @@ void case_604() } void case_605() -#line 4221 "cs-parser.jay" +#line 4234 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; yyVal = new ImplicitLambdaParameter (lt.Value, lt.Location); } void case_607() -#line 4229 "cs-parser.jay" +#line 4242 "cs-parser.jay" { var pars_list = (List<Parameter>) yyVals[0+yyTop]; yyVal = new ParametersCompiled (pars_list.ToArray ()); @@ -7217,7 +7255,7 @@ void case_607() } void case_611() -#line 4246 "cs-parser.jay" +#line 4259 "cs-parser.jay" { Block b = end_block (Location.Null); b.IsCompilerGenerated = true; @@ -7226,14 +7264,14 @@ void case_611() } void case_613() -#line 4257 "cs-parser.jay" +#line 4270 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = EmptyExpression.Null; } void case_614() -#line 4265 "cs-parser.jay" +#line 4278 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); @@ -7241,14 +7279,14 @@ void case_614() } void case_615() -#line 4271 "cs-parser.jay" +#line 4284 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } void case_616() -#line 4276 "cs-parser.jay" +#line 4289 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; Parameter p = new ImplicitLambdaParameter (lt.Value, lt.Location); @@ -7256,63 +7294,63 @@ void case_616() } void case_617() -#line 4282 "cs-parser.jay" +#line 4295 "cs-parser.jay" { yyVal = end_anonymous ((ParametersBlock) yyVals[0+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); } void case_619() -#line 4291 "cs-parser.jay" +#line 4304 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], false, GetLocation (yyVals[-4+yyTop])); } void case_620() -#line 4296 "cs-parser.jay" +#line 4309 "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_622() -#line 4305 "cs-parser.jay" +#line 4318 "cs-parser.jay" { valid_param_mod = 0; start_anonymous (true, (ParametersCompiled) yyVals[-2+yyTop], true, GetLocation (yyVals[-5+yyTop])); } void case_623() -#line 4310 "cs-parser.jay" +#line 4323 "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_630() -#line 4333 "cs-parser.jay" +#line 4346 "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_631() -#line 4338 "cs-parser.jay" +#line 4351 "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_632() -#line 4343 "cs-parser.jay" +#line 4356 "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_636() -#line 4372 "cs-parser.jay" +#line 4385 "cs-parser.jay" { Class c = new Class (current_container, (MemberName) yyVals[0+yyTop], (Modifiers) yyVals[-4+yyTop], (Attributes) yyVals[-5+yyTop]); if (((c.ModFlags & Modifiers.STATIC) != 0) && lang_version == LanguageVersion.ISO_1) { @@ -7324,7 +7362,7 @@ void case_636() } void case_637() -#line 4383 "cs-parser.jay" +#line 4396 "cs-parser.jay" { lexer.ConstraintsParsing = false; @@ -7340,7 +7378,7 @@ void case_637() } void case_638() -#line 4397 "cs-parser.jay" +#line 4410 "cs-parser.jay" { --lexer.parsing_declaration; if (doc_support) @@ -7348,7 +7386,7 @@ void case_638() } void case_639() -#line 4403 "cs-parser.jay" +#line 4416 "cs-parser.jay" { if (yyVals[0+yyTop] == null) { lbag.AppendToMember (current_container, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-2+yyTop])); @@ -7359,7 +7397,7 @@ void case_639() } void case_642() -#line 4422 "cs-parser.jay" +#line 4435 "cs-parser.jay" { mod_locations = null; yyVal = ModifierNone; @@ -7367,7 +7405,7 @@ void case_642() } void case_645() -#line 4436 "cs-parser.jay" +#line 4449 "cs-parser.jay" { var m1 = (Modifiers) yyVals[-1+yyTop]; var m2 = (Modifiers) yyVals[0+yyTop]; @@ -7385,7 +7423,7 @@ void case_645() } void case_646() -#line 4455 "cs-parser.jay" +#line 4468 "cs-parser.jay" { yyVal = Modifiers.NEW; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7395,91 +7433,91 @@ void case_646() } void case_647() -#line 4463 "cs-parser.jay" +#line 4476 "cs-parser.jay" { yyVal = Modifiers.PUBLIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_648() -#line 4468 "cs-parser.jay" +#line 4481 "cs-parser.jay" { yyVal = Modifiers.PROTECTED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_649() -#line 4473 "cs-parser.jay" +#line 4486 "cs-parser.jay" { yyVal = Modifiers.INTERNAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_650() -#line 4478 "cs-parser.jay" +#line 4491 "cs-parser.jay" { yyVal = Modifiers.PRIVATE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_651() -#line 4483 "cs-parser.jay" +#line 4496 "cs-parser.jay" { yyVal = Modifiers.ABSTRACT; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_652() -#line 4488 "cs-parser.jay" +#line 4501 "cs-parser.jay" { yyVal = Modifiers.SEALED; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_653() -#line 4493 "cs-parser.jay" +#line 4506 "cs-parser.jay" { yyVal = Modifiers.STATIC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_654() -#line 4498 "cs-parser.jay" +#line 4511 "cs-parser.jay" { yyVal = Modifiers.READONLY; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_655() -#line 4503 "cs-parser.jay" +#line 4516 "cs-parser.jay" { yyVal = Modifiers.VIRTUAL; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_656() -#line 4508 "cs-parser.jay" +#line 4521 "cs-parser.jay" { yyVal = Modifiers.OVERRIDE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_657() -#line 4513 "cs-parser.jay" +#line 4526 "cs-parser.jay" { yyVal = Modifiers.EXTERN; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_658() -#line 4518 "cs-parser.jay" +#line 4531 "cs-parser.jay" { yyVal = Modifiers.VOLATILE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_659() -#line 4523 "cs-parser.jay" +#line 4536 "cs-parser.jay" { yyVal = Modifiers.UNSAFE; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); @@ -7488,21 +7526,21 @@ void case_659() } void case_660() -#line 4530 "cs-parser.jay" +#line 4543 "cs-parser.jay" { yyVal = Modifiers.ASYNC; StoreModifierLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_662() -#line 4539 "cs-parser.jay" +#line 4552 "cs-parser.jay" { current_type.AddBasesForPart ((List<FullNamedExpression>) yyVals[0+yyTop]); lbag.AppendToMember (current_type, GetLocation (yyVals[-1+yyTop])); } void case_663() -#line 4544 "cs-parser.jay" +#line 4557 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7510,7 +7548,7 @@ void case_663() } void case_666() -#line 4561 "cs-parser.jay" +#line 4574 "cs-parser.jay" { var constraints = new List<Constraints> (1); constraints.Add ((Constraints) yyVals[0+yyTop]); @@ -7518,7 +7556,7 @@ void case_666() } void case_667() -#line 4567 "cs-parser.jay" +#line 4580 "cs-parser.jay" { var constraints = (List<Constraints>) yyVals[-1+yyTop]; Constraints new_constraint = (Constraints)yyVals[0+yyTop]; @@ -7536,7 +7574,7 @@ void case_667() } void case_668() -#line 4586 "cs-parser.jay" +#line 4599 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; yyVal = new Constraints (new SimpleMemberName (lt.Value, lt.Location), (List<FullNamedExpression>) yyVals[0+yyTop], GetLocation (yyVals[-3+yyTop])); @@ -7544,7 +7582,7 @@ void case_668() } void case_669() -#line 4592 "cs-parser.jay" +#line 4605 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -7553,7 +7591,7 @@ void case_669() } void case_670() -#line 4602 "cs-parser.jay" +#line 4615 "cs-parser.jay" { var constraints = new List<FullNamedExpression> (1); constraints.Add ((FullNamedExpression) yyVals[0+yyTop]); @@ -7561,7 +7599,7 @@ void case_670() } void case_671() -#line 4608 "cs-parser.jay" +#line 4621 "cs-parser.jay" { var constraints = (List<FullNamedExpression>) yyVals[-2+yyTop]; var prev = constraints [constraints.Count - 1] as SpecialContraintExpr; @@ -7587,7 +7625,7 @@ void case_671() } void case_672() -#line 4635 "cs-parser.jay" +#line 4648 "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 ()); @@ -7596,14 +7634,14 @@ void case_672() } void case_673() -#line 4642 "cs-parser.jay" +#line 4655 "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_677() -#line 4662 "cs-parser.jay" +#line 4675 "cs-parser.jay" { if (lang_version <= LanguageVersion.V_3) FeatureIsNotAvailable (lexer.Location, "generic type variance"); @@ -7612,56 +7650,56 @@ void case_677() } void case_678() -#line 4672 "cs-parser.jay" +#line 4685 "cs-parser.jay" { yyVal = Variance.Covariant; savedLocation = GetLocation (yyVals[0+yyTop]); } void case_679() -#line 4677 "cs-parser.jay" +#line 4690 "cs-parser.jay" { yyVal = Variance.Contravariant; savedLocation = GetLocation (yyVals[0+yyTop]); } void case_680() -#line 4698 "cs-parser.jay" +#line 4711 "cs-parser.jay" { ++lexer.parsing_block; start_block (GetLocation (yyVals[0+yyTop])); } void case_682() -#line 4710 "cs-parser.jay" +#line 4723 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } void case_683() -#line 4715 "cs-parser.jay" +#line 4728 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (lexer.Location); } void case_684() -#line 4724 "cs-parser.jay" +#line 4737 "cs-parser.jay" { ++lexer.parsing_block; current_block.StartLocation = GetLocation (yyVals[0+yyTop]); } void case_685() -#line 4729 "cs-parser.jay" +#line 4742 "cs-parser.jay" { --lexer.parsing_block; yyVal = end_block (GetLocation (yyVals[0+yyTop])); } void case_686() -#line 4733 "cs-parser.jay" +#line 4746 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol '}', expected '{'"); lexer.putback ('}'); @@ -7669,7 +7707,7 @@ void case_686() } void case_694() -#line 4762 "cs-parser.jay" +#line 4775 "cs-parser.jay" { Error_SyntaxError (yyToken); var lt =(Tokenizer.LocatedToken) yyVals[-1+yyTop]; @@ -7679,42 +7717,42 @@ void case_694() } void case_695() -#line 4771 "cs-parser.jay" +#line 4784 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } void case_728() -#line 4835 "cs-parser.jay" +#line 4848 "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_729() -#line 4840 "cs-parser.jay" +#line 4853 "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_730() -#line 4845 "cs-parser.jay" +#line 4858 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } void case_731() -#line 4853 "cs-parser.jay" +#line 4866 "cs-parser.jay" { /* Uses lexer.Location because semicolon location is not kept in quick mode*/ yyVal = new EmptyStatement (lexer.Location); } void case_732() -#line 4861 "cs-parser.jay" +#line 4874 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; LabeledStatement labeled = new LabeledStatement (lt.Value, current_block, lt.Location); @@ -7724,7 +7762,7 @@ void case_732() } void case_735() -#line 4874 "cs-parser.jay" +#line 4887 "cs-parser.jay" { if (yyVals[-1+yyTop] is VarExpr) yyVals[-1+yyTop] = new SimpleName ("var", ((VarExpr) yyVals[-1+yyTop]).Location); @@ -7733,7 +7771,7 @@ void case_735() } void case_736() -#line 4890 "cs-parser.jay" +#line 4903 "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*/ @@ -7765,7 +7803,7 @@ void case_736() } void case_737() -#line 4920 "cs-parser.jay" +#line 4933 "cs-parser.jay" { ATypeNameExpression expr = yyVals[-1+yyTop] as ATypeNameExpression; @@ -7778,7 +7816,7 @@ void case_737() } void case_738() -#line 4931 "cs-parser.jay" +#line 4944 "cs-parser.jay" { if (yyVals[0+yyTop] == null) yyVal = yyVals[-1+yyTop]; @@ -7787,30 +7825,30 @@ void case_738() } void case_741() -#line 4946 "cs-parser.jay" +#line 4959 "cs-parser.jay" { Expression.Error_VoidInvalidInTheContext (GetLocation (yyVals[0+yyTop]), report); yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } void case_743() -#line 4955 "cs-parser.jay" +#line 4968 "cs-parser.jay" { ((ComposedTypeSpecifier) yyVals[-1+yyTop]).Next = (ComposedTypeSpecifier) yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } void case_746() -#line 4971 "cs-parser.jay" +#line 4984 "cs-parser.jay" { if (async_block) { report.Error (4003, GetLocation (yyVals[0+yyTop]), "`await' cannot be used as an identifier within an async method or lambda expression"); - yyVal = Tokenizer.LocatedToken.Create ("await", GetLocation (yyVals[0+yyTop])); + yyVal = new Tokenizer.LocatedToken ("await", GetLocation (yyVals[0+yyTop])); } } void case_747() -#line 4981 "cs-parser.jay" +#line 4994 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -7819,7 +7857,7 @@ void case_747() } void case_748() -#line 4988 "cs-parser.jay" +#line 5001 "cs-parser.jay" { yyVal = current_variable; current_variable = null; @@ -7827,7 +7865,7 @@ void case_748() } void case_749() -#line 4994 "cs-parser.jay" +#line 5007 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7836,7 +7874,7 @@ void case_749() } void case_750() -#line 5001 "cs-parser.jay" +#line 5014 "cs-parser.jay" { if (current_variable.Initializer != null) { lbag.AddLocation (current_variable, GetLocation (yyVals[-6+yyTop]), savedLocation, GetLocation (yyVals[0+yyTop])); @@ -7848,7 +7886,7 @@ void case_750() } void case_752() -#line 5014 "cs-parser.jay" +#line 5027 "cs-parser.jay" { /* Redundant, but wont regress*/ report.Error (1525, lexer.Location, "Unexpected symbol }"); @@ -7857,14 +7895,14 @@ void case_752() } void case_754() -#line 5025 "cs-parser.jay" +#line 5038 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); } void case_755() -#line 5030 "cs-parser.jay" +#line 5043 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -7880,7 +7918,7 @@ void case_755() } void case_756() -#line 5044 "cs-parser.jay" +#line 5057 "cs-parser.jay" { if (yyToken == Token.OPEN_BRACKET_EXPR) { report.Error (650, lexer.Location, @@ -7891,7 +7929,7 @@ void case_756() } void case_760() -#line 5062 "cs-parser.jay" +#line 5075 "cs-parser.jay" { foreach (var d in current_variable.Declarators) { if (d.Initializer == null) @@ -7900,7 +7938,7 @@ void case_760() } void case_763() -#line 5077 "cs-parser.jay" +#line 5090 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7911,7 +7949,7 @@ void case_763() } void case_764() -#line 5086 "cs-parser.jay" +#line 5099 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_variable.Variable, lt.Value, lt.Location); @@ -7922,14 +7960,14 @@ void case_764() } void case_766() -#line 5102 "cs-parser.jay" +#line 5115 "cs-parser.jay" { savedLocation = GetLocation (yyVals[-1+yyTop]); current_variable.Initializer = (Expression) yyVals[0+yyTop]; } void case_771() -#line 5120 "cs-parser.jay" +#line 5133 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; var li = new LocalVariable (current_block, lt.Value, LocalVariable.Flags.Constant, lt.Location); @@ -7940,28 +7978,28 @@ void case_771() } void case_773() -#line 5133 "cs-parser.jay" +#line 5146 "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_774() -#line 5138 "cs-parser.jay" +#line 5151 "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_775() -#line 5146 "cs-parser.jay" +#line 5159 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_777() -#line 5152 "cs-parser.jay" +#line 5165 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; report.Error (1002, GetLocation (yyVals[0+yyTop]), "; expected"); @@ -7969,7 +8007,7 @@ void case_777() } void case_780() -#line 5170 "cs-parser.jay" +#line 5183 "cs-parser.jay" { ExpressionStatement s = yyVals[0+yyTop] as ExpressionStatement; if (s == null) { @@ -7981,7 +8019,7 @@ void case_780() } void case_781() -#line 5183 "cs-parser.jay" +#line 5196 "cs-parser.jay" { Expression expr = (Expression) yyVals[0+yyTop]; ExpressionStatement s; @@ -7991,14 +8029,14 @@ void case_781() } void case_782() -#line 5191 "cs-parser.jay" +#line 5204 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new EmptyStatement (GetLocation (yyVals[0+yyTop])); } void case_785() -#line 5205 "cs-parser.jay" +#line 5218 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8008,7 +8046,7 @@ void case_785() } void case_786() -#line 5214 "cs-parser.jay" +#line 5227 "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])); @@ -8020,7 +8058,7 @@ void case_786() } void case_787() -#line 5224 "cs-parser.jay" +#line 5237 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8029,7 +8067,7 @@ void case_787() } void case_789() -#line 5238 "cs-parser.jay" +#line 5251 "cs-parser.jay" { yyVal = new Switch ((Expression) yyVals[-5+yyTop], (ExplicitBlock) current_block.Explicit, (List<SwitchSection>) yyVals[-1+yyTop], GetLocation (yyVals[-7+yyTop])); end_block (GetLocation (yyVals[0+yyTop])); @@ -8037,7 +8075,7 @@ void case_789() } void case_790() -#line 5244 "cs-parser.jay" +#line 5257 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8046,14 +8084,14 @@ void case_790() } void case_791() -#line 5254 "cs-parser.jay" +#line 5267 "cs-parser.jay" { report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); yyVal = new List<SwitchSection> (); } void case_793() -#line 5263 "cs-parser.jay" +#line 5276 "cs-parser.jay" { var sections = new List<SwitchSection> (4); @@ -8062,7 +8100,7 @@ void case_793() } void case_794() -#line 5270 "cs-parser.jay" +#line 5283 "cs-parser.jay" { var sections = (List<SwitchSection>) yyVals[-1+yyTop]; @@ -8071,14 +8109,14 @@ void case_794() } void case_795() -#line 5277 "cs-parser.jay" +#line 5290 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new List<SwitchSection> (); } void case_798() -#line 5296 "cs-parser.jay" +#line 5309 "cs-parser.jay" { var labels = new List<SwitchLabel> (2); @@ -8087,7 +8125,7 @@ void case_798() } void case_799() -#line 5303 "cs-parser.jay" +#line 5316 "cs-parser.jay" { var labels = (List<SwitchLabel>) (yyVals[-1+yyTop]); labels.Add ((SwitchLabel) yyVals[0+yyTop]); @@ -8096,21 +8134,21 @@ void case_799() } void case_800() -#line 5313 "cs-parser.jay" +#line 5326 "cs-parser.jay" { yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } void case_801() -#line 5318 "cs-parser.jay" +#line 5331 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new SwitchLabel ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } void case_807() -#line 5337 "cs-parser.jay" +#line 5350 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8120,7 +8158,7 @@ void case_807() } void case_808() -#line 5345 "cs-parser.jay" +#line 5358 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8129,30 +8167,30 @@ void case_808() } void case_809() -#line 5355 "cs-parser.jay" +#line 5368 "cs-parser.jay" { - yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop])); + yyVal = new Do ((Statement) yyVals[-5+yyTop], (BooleanExpression) yyVals[-2+yyTop], GetLocation (yyVals[-6+yyTop]), GetLocation (yyVals[-4+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-4+yyTop]), GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_810() -#line 5360 "cs-parser.jay" +#line 5373 "cs-parser.jay" { Error_SyntaxError (yyToken); - yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop])); + yyVal = new Do ((Statement) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), Location.Null); } void case_811() -#line 5365 "cs-parser.jay" +#line 5378 "cs-parser.jay" { Error_SyntaxError (yyToken); - yyVal = new Do ((Statement) yyVals[-4+yyTop], (BooleanExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop])); + yyVal = new Do ((Statement) yyVals[-4+yyTop], (BooleanExpression) yyVals[-1+yyTop], GetLocation (yyVals[-5+yyTop]), GetLocation (yyVals[-3+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-2+yyTop])); } void case_812() -#line 5375 "cs-parser.jay" +#line 5388 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); current_block.IsCompilerGenerated = true; @@ -8163,7 +8201,7 @@ void case_812() } void case_814() -#line 5392 "cs-parser.jay" +#line 5405 "cs-parser.jay" { For f = (For) yyVals[-2+yyTop]; f.Initializer = (Statement) yyVals[-1+yyTop]; @@ -8172,7 +8210,7 @@ void case_814() } void case_816() -#line 5402 "cs-parser.jay" +#line 5415 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); For f = (For) yyVals[-2+yyTop]; @@ -8182,7 +8220,7 @@ void case_816() } void case_817() -#line 5413 "cs-parser.jay" +#line 5426 "cs-parser.jay" { For f = (For) yyVals[-2+yyTop]; f.Condition = (BooleanExpression) yyVals[-1+yyTop]; @@ -8191,7 +8229,7 @@ void case_817() } void case_819() -#line 5424 "cs-parser.jay" +#line 5437 "cs-parser.jay" { report.Error (1525, GetLocation (yyVals[0+yyTop]), "Unexpected symbol ')', expected ';'"); For f = (For) yyVals[-2+yyTop]; @@ -8201,7 +8239,7 @@ void case_819() } void case_820() -#line 5436 "cs-parser.jay" +#line 5449 "cs-parser.jay" { For f = (For) yyVals[-3+yyTop]; f.Iterator = (Statement) yyVals[-2+yyTop]; @@ -8216,14 +8254,14 @@ void case_820() } void case_821() -#line 5449 "cs-parser.jay" +#line 5462 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = end_block (current_block.StartLocation); } void case_824() -#line 5462 "cs-parser.jay" +#line 5475 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[0+yyTop]; var li = new LocalVariable (current_block, lt.Value, lt.Location); @@ -8232,14 +8270,14 @@ void case_824() } void case_825() -#line 5469 "cs-parser.jay" +#line 5482 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } void case_833() -#line 5493 "cs-parser.jay" +#line 5506 "cs-parser.jay" { var sl = yyVals[-2+yyTop] as StatementList; if (sl == null) { @@ -8255,7 +8293,7 @@ void case_833() } void case_834() -#line 5510 "cs-parser.jay" +#line 5523 "cs-parser.jay" { report.Error (230, GetLocation (yyVals[-3+yyTop]), "Type and identifier are both required in a foreach statement"); @@ -8270,7 +8308,7 @@ void case_834() } void case_835() -#line 5523 "cs-parser.jay" +#line 5536 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8289,7 +8327,7 @@ void case_835() } void case_836() -#line 5540 "cs-parser.jay" +#line 5553 "cs-parser.jay" { start_block (GetLocation (yyVals[-5+yyTop])); current_block.IsCompilerGenerated = true; @@ -8300,7 +8338,7 @@ void case_836() } void case_837() -#line 5549 "cs-parser.jay" +#line 5562 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8313,7 +8351,7 @@ void case_837() } void case_838() -#line 5560 "cs-parser.jay" +#line 5573 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); current_block.IsCompilerGenerated = true; @@ -8328,7 +8366,7 @@ void case_838() } void case_839() -#line 5573 "cs-parser.jay" +#line 5586 "cs-parser.jay" { Foreach f = new Foreach ((Expression) yyVals[-1+yyTop], null, null, null, null, GetLocation (yyVals[-3+yyTop])); current_block.AddStatement (f); @@ -8338,28 +8376,28 @@ void case_839() } void case_846() -#line 5593 "cs-parser.jay" +#line 5606 "cs-parser.jay" { yyVal = new Break (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_847() -#line 5601 "cs-parser.jay" +#line 5614 "cs-parser.jay" { yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_848() -#line 5606 "cs-parser.jay" +#line 5619 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Continue (GetLocation (yyVals[-1+yyTop])); } void case_849() -#line 5614 "cs-parser.jay" +#line 5627 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-1+yyTop]; yyVal = new Goto (lt.Value, GetLocation (yyVals[-2+yyTop])); @@ -8367,49 +8405,56 @@ void case_849() } void case_850() -#line 5620 "cs-parser.jay" +#line 5633 "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_851() -#line 5625 "cs-parser.jay" +#line 5638 "cs-parser.jay" { yyVal = new GotoDefault (GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } void case_852() -#line 5633 "cs-parser.jay" +#line 5646 "cs-parser.jay" { yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } void case_853() -#line 5638 "cs-parser.jay" +#line 5651 "cs-parser.jay" { Error_SyntaxError (yyToken); - yyVal = new Return (null, GetLocation (yyVals[-1+yyTop])); + yyVal = new Return ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } void case_854() -#line 5646 "cs-parser.jay" +#line 5656 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + yyVal = new Return (null, GetLocation (yyVals[-1+yyTop])); + } + +void case_855() +#line 5664 "cs-parser.jay" { yyVal = new Throw ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); lbag.AddStatement (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_855() -#line 5651 "cs-parser.jay" +void case_856() +#line 5669 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = new Throw (null, GetLocation (yyVals[-1+yyTop])); } -void case_856() -#line 5659 "cs-parser.jay" +void case_857() +#line 5677 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; string s = lt.Value; @@ -8426,8 +8471,28 @@ void case_856() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_857() -#line 5675 "cs-parser.jay" +void case_858() +#line 5693 "cs-parser.jay" +{ + Error_SyntaxError (yyToken); + + var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if (yyVals[-1+yyTop] == null) { + report.Error (1627, GetLocation (yyVals[0+yyTop]), "Expression expected after yield return"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + yyVal = new Yield ((Expression) yyVals[-1+yyTop], lt.Location); + lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); + } + +void case_859() +#line 5711 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; string s = lt.Value; @@ -8442,30 +8507,30 @@ void case_857() lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop]), GetLocation (yyVals[0+yyTop])); } -void case_861() -#line 5701 "cs-parser.jay" +void case_863() +#line 5737 "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_862() -#line 5706 "cs-parser.jay" +void case_864() +#line 5742 "cs-parser.jay" { var loc = GetLocation (yyVals[-4+yyTop]); yyVal = new TryFinally (new TryCatch ((Block) yyVals[-3+yyTop], (List<Catch>) yyVals[-2+yyTop], loc, true), (Block) yyVals[0+yyTop], loc); lbag.AddStatement (yyVal, GetLocation (yyVals[-1+yyTop])); } -void case_863() -#line 5712 "cs-parser.jay" +void case_865() +#line 5748 "cs-parser.jay" { Error_SyntaxError (1524, yyToken); yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); } -void case_864() -#line 5720 "cs-parser.jay" +void case_866() +#line 5756 "cs-parser.jay" { var l = new List<Catch> (2); @@ -8473,8 +8538,8 @@ void case_864() yyVal = l; } -void case_865() -#line 5727 "cs-parser.jay" +void case_867() +#line 5763 "cs-parser.jay" { var l = (List<Catch>) yyVals[-1+yyTop]; @@ -8487,8 +8552,8 @@ void case_865() yyVal = l; } -void case_869() -#line 5751 "cs-parser.jay" +void case_871() +#line 5787 "cs-parser.jay" { start_block (GetLocation (yyVals[-3+yyTop])); var c = new Catch (current_block, GetLocation (yyVals[-4+yyTop])); @@ -8504,8 +8569,8 @@ void case_869() yyVal = c; } -void case_871() -#line 5770 "cs-parser.jay" +void case_873() +#line 5806 "cs-parser.jay" { if (yyToken == Token.CLOSE_PARENS) { report.Error (1015, lexer.Location, @@ -8517,15 +8582,15 @@ void case_871() yyVal = new Catch (null, GetLocation (yyVals[-2+yyTop])); } -void case_874() -#line 5798 "cs-parser.jay" +void case_876() +#line 5834 "cs-parser.jay" { if (!settings.Unsafe) Error_UnsafeCodeNotAllowed (GetLocation (yyVals[0+yyTop])); } -void case_876() -#line 5808 "cs-parser.jay" +void case_878() +#line 5844 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8534,8 +8599,8 @@ void case_876() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_877() -#line 5816 "cs-parser.jay" +void case_879() +#line 5852 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8543,8 +8608,8 @@ void case_877() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_878() -#line 5826 "cs-parser.jay" +void case_880() +#line 5862 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8555,15 +8620,15 @@ void case_878() current_variable = new Fixed.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_879() -#line 5836 "cs-parser.jay" +void case_881() +#line 5872 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_880() -#line 5841 "cs-parser.jay" +void case_882() +#line 5877 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8574,8 +8639,8 @@ void case_880() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_881() -#line 5854 "cs-parser.jay" +void case_883() +#line 5890 "cs-parser.jay" { start_block (GetLocation (yyVals[-2+yyTop])); @@ -8586,15 +8651,15 @@ void case_881() current_variable = new Using.VariableDeclaration ((FullNamedExpression) yyVals[-1+yyTop], li); } -void case_882() -#line 5864 "cs-parser.jay" +void case_884() +#line 5900 "cs-parser.jay" { yyVal = current_variable; current_variable = null; } -void case_883() -#line 5869 "cs-parser.jay" +void case_885() +#line 5905 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8605,8 +8670,8 @@ void case_883() yyVal = end_block (GetLocation (yyVals[-2+yyTop])); } -void case_884() -#line 5879 "cs-parser.jay" +void case_886() +#line 5915 "cs-parser.jay" { if (yyVals[0+yyTop] is EmptyStatement && lexer.peek_token () == Token.OPEN_BRACE) Warning_EmptyStatement (GetLocation (yyVals[0+yyTop])); @@ -8615,8 +8680,8 @@ void case_884() lbag.AddStatement (yyVal, GetLocation (yyVals[-3+yyTop]), GetLocation (yyVals[-1+yyTop])); } -void case_885() -#line 5887 "cs-parser.jay" +void case_887() +#line 5923 "cs-parser.jay" { Error_SyntaxError (yyToken); @@ -8624,23 +8689,23 @@ void case_885() lbag.AddStatement (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_887() -#line 5898 "cs-parser.jay" +void case_889() +#line 5934 "cs-parser.jay" { /* It has to be here for the parent to safely restore artificial block*/ Error_SyntaxError (yyToken); } -void case_889() -#line 5910 "cs-parser.jay" +void case_891() +#line 5946 "cs-parser.jay" { current_variable.Initializer = (Expression) yyVals[0+yyTop]; lbag.AppendTo (current_variable, GetLocation (yyVals[-1+yyTop])); yyVal = current_variable; } -void case_890() -#line 5922 "cs-parser.jay" +void case_892() +#line 5958 "cs-parser.jay" { lexer.query_parsing = false; @@ -8653,8 +8718,8 @@ void case_890() current_block = current_block.Parent; } -void case_891() -#line 5934 "cs-parser.jay" +void case_893() +#line 5970 "cs-parser.jay" { Linq.AQueryClause from = yyVals[-1+yyTop] as Linq.AQueryClause; @@ -8665,8 +8730,8 @@ void case_891() current_block = current_block.Parent; } -void case_892() -#line 5945 "cs-parser.jay" +void case_894() +#line 5981 "cs-parser.jay" { lexer.query_parsing = false; yyVal = yyVals[-1+yyTop]; @@ -8675,16 +8740,16 @@ void case_892() current_block = current_block.Parent; } -void case_893() -#line 5952 "cs-parser.jay" +void case_895() +#line 5988 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; } -void case_894() -#line 5961 "cs-parser.jay" +void case_896() +#line 5997 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8695,8 +8760,8 @@ void case_894() yyVal = new Linq.QueryExpression (start); } -void case_895() -#line 5971 "cs-parser.jay" +void case_897() +#line 6007 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8709,8 +8774,8 @@ void case_895() yyVal = new Linq.QueryExpression (start); } -void case_896() -#line 5986 "cs-parser.jay" +void case_898() +#line 6022 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8721,8 +8786,8 @@ void case_896() yyVal = new Linq.QueryExpression (start); } -void case_897() -#line 5996 "cs-parser.jay" +void case_899() +#line 6032 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); @@ -8735,8 +8800,8 @@ void case_897() yyVal = new Linq.QueryExpression (start); } -void case_899() -#line 6015 "cs-parser.jay" +void case_901() +#line 6051 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8749,8 +8814,8 @@ void case_899() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_901() -#line 6031 "cs-parser.jay" +void case_903() +#line 6067 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8767,8 +8832,8 @@ void case_901() lbag.AddLocation (yyVal, GetLocation (yyVals[-2+yyTop])); } -void case_902() -#line 6050 "cs-parser.jay" +void case_904() +#line 6086 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[-1+yyTop]; @@ -8784,8 +8849,8 @@ void case_902() yyVal = head; } -void case_903() -#line 6065 "cs-parser.jay" +void case_905() +#line 6101 "cs-parser.jay" { Linq.AQueryClause head = (Linq.AQueryClause)yyVals[0+yyTop]; @@ -8798,22 +8863,22 @@ void case_903() yyVal = head; } -void case_905() -#line 6078 "cs-parser.jay" +void case_907() +#line 6114 "cs-parser.jay" { report.Error (742, GetLocation (yyVals[0+yyTop]), "Unexpected symbol `{0}'. A query body must end with select or group clause", GetSymbolName (yyToken)); yyVal = yyVals[-1+yyTop]; } -void case_906() -#line 6083 "cs-parser.jay" +void case_908() +#line 6119 "cs-parser.jay" { Error_SyntaxError (yyToken); yyVal = null; } -void case_908() -#line 6095 "cs-parser.jay" +void case_910() +#line 6131 "cs-parser.jay" { yyVal = new Linq.Select ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8821,8 +8886,8 @@ void case_908() current_block = current_block.Parent; } -void case_909() -#line 6102 "cs-parser.jay" +void case_911() +#line 6138 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack<Linq.QueryBlock> (); @@ -8831,8 +8896,8 @@ void case_909() linq_clause_blocks.Push ((Linq.QueryBlock)current_block); } -void case_910() -#line 6110 "cs-parser.jay" +void case_912() +#line 6146 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8840,8 +8905,8 @@ void case_910() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_911() -#line 6117 "cs-parser.jay" +void case_913() +#line 6153 "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])); @@ -8850,15 +8915,15 @@ void case_911() current_block = current_block.Parent; } -void case_913() -#line 6129 "cs-parser.jay" +void case_915() +#line 6165 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-1+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-1+yyTop]; } -void case_920() -#line 6149 "cs-parser.jay" +void case_922() +#line 6185 "cs-parser.jay" { var lt = (Tokenizer.LocatedToken) yyVals[-3+yyTop]; var sn = new Linq.RangeVariable (lt.Value, lt.Location); @@ -8871,8 +8936,8 @@ void case_920() ((Linq.QueryBlock)current_block).AddRangeVariable (sn); } -void case_922() -#line 6168 "cs-parser.jay" +void case_924() +#line 6204 "cs-parser.jay" { yyVal = new Linq.Where ((Linq.QueryBlock)current_block, (Expression)yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); @@ -8880,8 +8945,8 @@ void case_922() current_block = current_block.Parent; } -void case_923() -#line 6178 "cs-parser.jay" +void case_925() +#line 6214 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack<Linq.QueryBlock> (); @@ -8890,8 +8955,8 @@ void case_923() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_924() -#line 6186 "cs-parser.jay" +void case_926() +#line 6222 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8900,8 +8965,8 @@ void case_924() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_925() -#line 6194 "cs-parser.jay" +void case_927() +#line 6230 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8910,8 +8975,8 @@ void case_925() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_926() -#line 6202 "cs-parser.jay" +void case_928() +#line 6238 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8950,8 +9015,8 @@ void case_926() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_927() -#line 6240 "cs-parser.jay" +void case_929() +#line 6276 "cs-parser.jay" { if (linq_clause_blocks == null) linq_clause_blocks = new Stack<Linq.QueryBlock> (); @@ -8960,8 +9025,8 @@ void case_927() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_928() -#line 6248 "cs-parser.jay" +void case_930() +#line 6284 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -8970,8 +9035,8 @@ void case_928() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_929() -#line 6256 "cs-parser.jay" +void case_931() +#line 6292 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -8980,8 +9045,8 @@ void case_929() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_930() -#line 6264 "cs-parser.jay" +void case_932() +#line 6300 "cs-parser.jay" { current_block.AddStatement (new ContextualReturn ((Expression) yyVals[-1+yyTop])); current_block.SetEndLocation (lexer.Location); @@ -9024,15 +9089,15 @@ void case_930() ((Linq.QueryBlock)current_block).AddRangeVariable (into); } -void case_932() -#line 6310 "cs-parser.jay" +void case_934() +#line 6346 "cs-parser.jay" { opt_intoStack.Push (GetLocation (yyVals[-1+yyTop])); yyVal = yyVals[0+yyTop]; } -void case_934() -#line 6322 "cs-parser.jay" +void case_936() +#line 6358 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9040,8 +9105,8 @@ void case_934() yyVal = yyVals[0+yyTop]; } -void case_936() -#line 6333 "cs-parser.jay" +void case_938() +#line 6369 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9049,15 +9114,15 @@ void case_936() current_block = new Linq.QueryBlock (current_block, lexer.Location); } -void case_937() -#line 6340 "cs-parser.jay" +void case_939() +#line 6376 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_939() -#line 6349 "cs-parser.jay" +void case_941() +#line 6385 "cs-parser.jay" { current_block.SetEndLocation (lexer.Location); current_block = current_block.Parent; @@ -9065,43 +9130,43 @@ void case_939() current_block = new Linq.QueryBlock ((Linq.QueryBlock) current_block, lexer.Location); } -void case_940() -#line 6356 "cs-parser.jay" +void case_942() +#line 6392 "cs-parser.jay" { ((Linq.AQueryClause)yyVals[-3+yyTop]).Tail.Next = (Linq.AQueryClause)yyVals[0+yyTop]; yyVal = yyVals[-3+yyTop]; } -void case_942() -#line 6368 "cs-parser.jay" +void case_944() +#line 6404 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_943() -#line 6373 "cs-parser.jay" +void case_945() +#line 6409 "cs-parser.jay" { yyVal = new Linq.OrderByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_945() -#line 6385 "cs-parser.jay" +void case_947() +#line 6421 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_946() -#line 6390 "cs-parser.jay" +void case_948() +#line 6426 "cs-parser.jay" { yyVal = new Linq.ThenByDescending ((Linq.QueryBlock) current_block, (Expression)yyVals[-1+yyTop]); lbag.AddLocation (yyVal, GetLocation (yyVals[0+yyTop])); } -void case_948() -#line 6400 "cs-parser.jay" +void case_950() +#line 6436 "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*/ @@ -9118,8 +9183,8 @@ void case_948() linq_clause_blocks.Push ((Linq.QueryBlock) current_block); } -void case_949() -#line 6416 "cs-parser.jay" +void case_951() +#line 6452 "cs-parser.jay" { var current_block = linq_clause_blocks.Pop (); var lt = (Tokenizer.LocatedToken) yyVals[-2+yyTop]; @@ -9129,8 +9194,8 @@ void case_949() }; } -void case_952() -#line 6443 "cs-parser.jay" +void case_954() +#line 6479 "cs-parser.jay" { current_container = current_type = new Class (current_container, new MemberName ("<InteractiveExpressionClass>"), Modifiers.PUBLIC, null); @@ -9159,8 +9224,8 @@ void case_952() start_block (lexer.Location); } -void case_953() -#line 6471 "cs-parser.jay" +void case_955() +#line 6507 "cs-parser.jay" { --lexer.parsing_block; Method method = (Method) oob_stack.Pop (); @@ -9171,16 +9236,16 @@ void case_953() current_local_parameters = null; } -void case_963() -#line 6514 "cs-parser.jay" +void case_965() +#line 6550 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-1+yyTop]; module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; yyVal = null; } -void case_964() -#line 6520 "cs-parser.jay" +void case_966() +#line 6556 "cs-parser.jay" { module.DocumentationBuilder.ParsedBuiltinType = (TypeExpression)yyVals[-3+yyTop]; module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; @@ -9188,15 +9253,15 @@ void case_964() yyVal = new MemberName (lt.Value); } -void case_967() -#line 6535 "cs-parser.jay" +void case_969() +#line 6571 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[-1+yyTop]; yyVal = new MemberName ((MemberName) yyVals[-6+yyTop], MemberCache.IndexerNameAlias, Location.Null); } -void case_968() -#line 6540 "cs-parser.jay" +void case_970() +#line 6576 "cs-parser.jay" { var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -9205,8 +9270,8 @@ void case_968() yyVal = null; } -void case_969() -#line 6548 "cs-parser.jay" +void case_971() +#line 6584 "cs-parser.jay" { var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1); p.Add (new DocumentationParameter ((FullNamedExpression) yyVals[-1+yyTop])); @@ -9215,8 +9280,8 @@ void case_969() yyVal = null; } -void case_970() -#line 6556 "cs-parser.jay" +void case_972() +#line 6592 "cs-parser.jay" { var p = (List<DocumentationParameter>)yyVals[0+yyTop] ?? new List<DocumentationParameter> (1); module.DocumentationBuilder.ParsedParameters = p; @@ -9224,24 +9289,24 @@ void case_970() yyVal = null; } -void case_978() -#line 6594 "cs-parser.jay" +void case_980() +#line 6630 "cs-parser.jay" { var parameters = new List<DocumentationParameter> (); parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_979() -#line 6600 "cs-parser.jay" +void case_981() +#line 6636 "cs-parser.jay" { var parameters = yyVals[-2+yyTop] as List<DocumentationParameter>; parameters.Add ((DocumentationParameter) yyVals[0+yyTop]); yyVal = parameters; } -void case_980() -#line 6609 "cs-parser.jay" +void case_982() +#line 6645 "cs-parser.jay" { if (yyVals[-1+yyTop] != null) yyVal = new DocumentationParameter ((Parameter.Modifier) yyVals[-1+yyTop], (FullNamedExpression) yyVals[0+yyTop]); @@ -9283,30 +9348,30 @@ void case_980() 171, 172, 173, 172, 174, 169, 166, 166, 166, 166, 166, 178, 175, 179, 176, 177, 177, 61, 181, 183, 184, 29, 180, 180, 180, 182, 182, 182, 185, 185, - 186, 187, 186, 186, 188, 189, 190, 30, 191, 191, - 16, 16, 192, 192, 195, 194, 194, 194, 196, 196, - 198, 64, 121, 101, 101, 126, 126, 199, 199, 199, - 197, 197, 200, 200, 201, 201, 203, 203, 82, 72, - 72, 86, 86, 116, 116, 146, 146, 204, 204, 204, - 204, 204, 208, 208, 209, 207, 207, 207, 207, 207, - 207, 207, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 186, 187, 186, 186, 186, 188, 189, 190, 30, 191, + 191, 16, 16, 192, 192, 195, 194, 194, 194, 196, + 196, 198, 64, 121, 101, 101, 126, 126, 199, 199, + 199, 197, 197, 200, 200, 201, 201, 203, 203, 82, + 72, 72, 86, 86, 116, 116, 146, 146, 204, 204, + 204, 204, 204, 208, 208, 209, 207, 207, 207, 207, + 207, 207, 207, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, - 211, 212, 212, 212, 213, 213, 213, 233, 233, 234, - 234, 235, 235, 215, 215, 232, 232, 232, 232, 232, - 232, 232, 232, 217, 217, 237, 237, 238, 238, 239, - 239, 241, 241, 241, 242, 242, 242, 242, 242, 243, - 243, 159, 159, 236, 236, 236, 236, 236, 248, 248, - 247, 247, 249, 249, 249, 249, 250, 218, 218, 218, - 246, 246, 246, 251, 251, 252, 252, 219, 220, 220, - 221, 222, 223, 223, 214, 214, 214, 214, 214, 257, - 253, 224, 258, 258, 259, 259, 260, 260, 261, 261, - 261, 261, 254, 254, 205, 205, 256, 256, 262, 262, - 255, 255, 81, 81, 263, 263, 264, 225, 265, 265, - 265, 266, 266, 266, 266, 266, 267, 193, 226, 227, - 228, 229, 269, 230, 270, 230, 268, 268, 272, 271, - 216, 273, 273, 273, 273, 273, 274, 274, 274, 274, - 274, 274, 274, 275, 275, 275, 275, 276, 276, 276, + 211, 211, 212, 212, 212, 213, 213, 213, 233, 233, + 234, 234, 235, 235, 215, 215, 232, 232, 232, 232, + 232, 232, 232, 232, 217, 217, 237, 237, 238, 238, + 239, 239, 241, 241, 241, 242, 242, 242, 242, 242, + 243, 243, 159, 159, 236, 236, 236, 236, 236, 248, + 248, 247, 247, 249, 249, 249, 249, 250, 218, 218, + 218, 246, 246, 246, 251, 251, 252, 252, 219, 220, + 220, 221, 222, 223, 223, 214, 214, 214, 214, 214, + 257, 253, 224, 258, 258, 259, 259, 260, 260, 261, + 261, 261, 261, 254, 254, 205, 205, 256, 256, 262, + 262, 255, 255, 81, 81, 263, 263, 264, 225, 265, + 265, 265, 266, 266, 266, 266, 266, 267, 193, 226, + 227, 228, 229, 269, 230, 270, 230, 268, 268, 272, + 271, 216, 273, 273, 273, 273, 273, 274, 274, 274, + 274, 274, 274, 274, 275, 275, 275, 275, 276, 276, 276, 276, 276, 277, 277, 277, 278, 278, 278, 278, 278, 279, 279, 279, 280, 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, 285, 286, 286, 286, 288, @@ -9336,19 +9401,20 @@ void case_980() 378, 374, 374, 382, 381, 381, 377, 377, 380, 380, 384, 383, 383, 371, 371, 385, 371, 371, 371, 330, 330, 330, 330, 330, 330, 386, 387, 387, 388, 388, - 388, 389, 389, 390, 390, 391, 391, 392, 392, 331, - 331, 331, 331, 393, 393, 395, 395, 394, 396, 394, - 394, 332, 333, 397, 336, 334, 334, 399, 400, 337, - 402, 403, 335, 335, 335, 401, 401, 398, 398, 302, - 302, 302, 302, 404, 404, 406, 406, 408, 407, 409, - 407, 405, 405, 405, 405, 405, 413, 411, 414, 415, - 411, 410, 410, 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, 412, 437, 412, 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, + 388, 389, 389, 389, 390, 390, 391, 391, 391, 392, + 392, 331, 331, 331, 331, 393, 393, 395, 395, 394, + 396, 394, 394, 332, 333, 397, 336, 334, 334, 399, + 400, 337, 402, 403, 335, 335, 335, 401, 401, 398, + 398, 302, 302, 302, 302, 404, 404, 406, 406, 408, + 407, 409, 407, 405, 405, 405, 405, 405, 413, 411, + 414, 415, 411, 410, 410, 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, 412, 437, + 412, 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, }; static readonly short [] yyLen = { 2, 2, 0, 3, 1, 2, 4, 3, 1, 0, 1, @@ -9383,30 +9449,30 @@ void case_980() 2, 2, 0, 5, 0, 2, 2, 2, 1, 1, 1, 0, 5, 0, 5, 1, 1, 2, 0, 0, 0, 12, 0, 2, 2, 0, 1, 2, 1, 3, - 2, 0, 5, 1, 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, + 2, 0, 5, 3, 1, 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, 2, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 3, 4, 4, 4, 3, 3, - 4, 3, 4, 4, 4, 0, 1, 3, 4, 0, - 1, 1, 3, 2, 3, 1, 2, 3, 2, 1, - 1, 0, 1, 1, 3, 3, 3, 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, + 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, 4, 0, 1, 3, 4, + 0, 1, 1, 3, 2, 3, 1, 2, 3, 2, + 1, 1, 0, 1, 1, 3, 3, 3, 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, 1, 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 5, 4, 3, @@ -9436,1446 +9502,1408 @@ void case_980() 1, 0, 1, 0, 5, 1, 0, 1, 0, 1, 1, 1, 3, 4, 5, 0, 9, 5, 4, 1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4, - 3, 3, 2, 3, 2, 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, 2, 2, 1, 0, 3, 0, 0, - 6, 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, + 3, 3, 3, 2, 3, 2, 4, 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, 2, 2, 1, 0, 3, + 0, 0, 6, 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, 950, 0, 0, 954, 0, - 0, 15, 17, 378, 384, 391, 379, 381, 0, 380, - 0, 387, 389, 376, 0, 383, 385, 377, 388, 390, - 386, 341, 971, 0, 382, 961, 0, 10, 1, 0, + 0, 0, 11, 14, 0, 952, 0, 0, 956, 0, + 0, 15, 17, 379, 385, 392, 380, 382, 0, 381, + 0, 388, 390, 377, 0, 384, 386, 378, 389, 391, + 387, 342, 973, 0, 383, 963, 0, 10, 1, 0, 0, 0, 12, 0, 782, 0, 0, 0, 0, 0, - 0, 0, 0, 419, 0, 0, 0, 0, 0, 0, - 0, 417, 0, 0, 0, 478, 0, 418, 0, 517, - 0, 874, 0, 0, 0, 629, 0, 0, 0, 0, + 0, 0, 0, 420, 0, 0, 0, 0, 0, 0, + 0, 418, 0, 0, 0, 479, 0, 419, 0, 518, + 0, 876, 0, 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 680, 0, 731, 0, 0, 0, 0, - 0, 0, 0, 0, 416, 0, 618, 0, 781, 0, - 714, 0, 0, 0, 0, 393, 394, 0, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 414, 415, 625, 547, 0, 0, + 0, 0, 0, 0, 417, 0, 618, 0, 781, 0, + 714, 0, 0, 0, 0, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 415, 416, 625, 548, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 624, 627, 628, 698, 700, 0, 696, 699, 715, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 716, 0, 0, 0, 783, 784, 803, 804, 805, 806, 840, 841, 842, 843, 844, 845, 0, 0, 0, 20, - 0, 0, 331, 0, 333, 958, 16, 951, 0, 0, + 0, 0, 332, 0, 334, 960, 16, 953, 0, 0, 241, 240, 237, 242, 243, 236, 255, 254, 247, 248, 244, 246, 245, 249, 238, 239, 250, 251, 257, 256, - 252, 253, 0, 0, 974, 0, 963, 0, 962, 3, + 252, 253, 0, 0, 976, 0, 965, 0, 964, 3, 51, 0, 0, 0, 40, 37, 39, 42, 43, 44, - 45, 46, 49, 13, 0, 0, 0, 846, 420, 421, - 872, 0, 0, 0, 0, 0, 0, 395, 0, 848, - 847, 0, 539, 533, 538, 730, 780, 701, 728, 727, - 729, 702, 703, 704, 705, 706, 707, 708, 709, 710, - 711, 712, 713, 0, 0, 0, 812, 0, 0, 0, - 746, 745, 0, 0, 0, 0, 0, 0, 0, 0, - 853, 0, 0, 859, 0, 392, 0, 0, 0, 855, - 0, 0, 0, 873, 0, 0, 0, 744, 740, 0, - 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, - 0, 0, 0, 0, 0, 621, 0, 546, 0, 0, - 544, 548, 549, 543, 553, 552, 550, 551, 614, 528, - 0, 413, 412, 0, 0, 0, 0, 0, 732, 0, - 330, 0, 738, 739, 0, 481, 482, 0, 0, 0, + 45, 46, 49, 13, 0, 0, 0, 846, 421, 422, + 874, 0, 0, 0, 0, 0, 0, 0, 848, 847, + 0, 540, 534, 539, 730, 780, 701, 728, 727, 729, + 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, + 712, 713, 0, 0, 0, 812, 0, 0, 0, 746, + 745, 0, 0, 0, 0, 0, 0, 0, 0, 854, + 0, 0, 0, 0, 393, 0, 0, 0, 856, 861, + 0, 0, 0, 875, 0, 0, 0, 744, 740, 0, + 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, + 0, 0, 0, 0, 0, 621, 0, 547, 0, 0, + 545, 549, 550, 544, 554, 553, 551, 552, 614, 529, + 0, 414, 413, 0, 0, 0, 0, 0, 732, 0, + 331, 0, 738, 739, 0, 482, 483, 0, 0, 0, 736, 737, 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, 953, 697, 747, 735, - 0, 778, 779, 906, 921, 0, 0, 907, 909, 0, - 933, 892, 890, 914, 0, 0, 912, 915, 916, 917, - 918, 893, 891, 0, 0, 0, 335, 0, 18, 0, - 0, 0, 970, 0, 342, 0, 0, 0, 972, 0, - 0, 38, 651, 657, 649, 0, 646, 656, 650, 648, - 647, 654, 652, 653, 659, 655, 658, 660, 0, 0, - 644, 41, 50, 480, 0, 476, 477, 0, 0, 474, - 0, 749, 0, 0, 0, 810, 0, 777, 775, 776, - 0, 0, 0, 633, 0, 851, 849, 634, 0, 0, - 502, 0, 0, 0, 493, 0, 497, 507, 509, 0, - 489, 0, 0, 0, 0, 0, 484, 0, 487, 0, - 491, 362, 852, 0, 0, 854, 863, 0, 0, 0, - 864, 0, 0, 875, 0, 0, 743, 0, 372, 368, - 369, 0, 0, 367, 370, 371, 0, 0, 0, 554, - 0, 0, 535, 0, 616, 695, 0, 0, 0, 689, - 691, 692, 693, 424, 425, 0, 338, 339, 0, 179, - 178, 180, 0, 0, 0, 0, 364, 0, 601, 0, - 0, 857, 0, 0, 429, 0, 432, 0, 430, 0, - 470, 0, 0, 0, 0, 0, 459, 462, 0, 0, - 454, 461, 460, 0, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 600, 599, 555, 557, 556, 562, 563, + 0, 0, 0, 0, 0, 955, 697, 747, 735, 0, + 778, 779, 908, 923, 0, 0, 909, 911, 0, 935, + 894, 892, 916, 0, 0, 914, 917, 918, 919, 920, + 895, 893, 0, 0, 0, 336, 0, 18, 0, 0, + 0, 972, 0, 343, 0, 0, 0, 974, 0, 0, + 38, 651, 657, 649, 0, 646, 656, 650, 648, 647, + 654, 652, 653, 659, 655, 658, 660, 0, 0, 644, + 41, 50, 481, 0, 477, 478, 0, 0, 475, 0, + 749, 0, 0, 0, 810, 0, 777, 775, 776, 0, + 0, 0, 633, 0, 851, 849, 634, 0, 0, 503, + 0, 0, 0, 494, 0, 498, 508, 510, 0, 490, + 0, 0, 0, 0, 0, 485, 0, 488, 0, 492, + 363, 853, 852, 0, 0, 855, 865, 0, 0, 0, + 866, 0, 0, 877, 0, 0, 743, 0, 373, 369, + 370, 0, 0, 368, 371, 372, 0, 0, 0, 555, + 0, 0, 536, 0, 616, 695, 0, 0, 0, 689, + 691, 692, 693, 425, 426, 0, 339, 340, 0, 179, + 178, 180, 0, 0, 0, 0, 365, 0, 601, 0, + 0, 859, 0, 0, 0, 430, 0, 433, 0, 431, + 0, 471, 0, 0, 0, 0, 0, 460, 463, 0, + 0, 455, 462, 461, 590, 591, 592, 593, 594, 595, + 596, 597, 598, 600, 599, 556, 558, 557, 562, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 586, 0, 0, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 905, 904, - 0, 913, 0, 903, 0, 0, 332, 968, 969, 356, - 0, 0, 0, 353, 0, 0, 176, 0, 0, 978, - 964, 966, 59, 57, 58, 0, 0, 52, 0, 0, + 0, 0, 0, 0, 0, 586, 0, 0, 507, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 907, 906, + 0, 915, 0, 905, 0, 0, 333, 970, 971, 357, + 0, 0, 0, 354, 0, 0, 176, 0, 0, 980, + 966, 968, 59, 57, 58, 0, 0, 52, 0, 0, 60, 62, 26, 24, 0, 0, 0, 641, 0, 645, - 428, 0, 479, 0, 530, 0, 541, 165, 187, 0, - 0, 0, 155, 0, 0, 0, 166, 534, 0, 878, + 429, 0, 480, 0, 531, 0, 542, 165, 187, 0, + 0, 0, 155, 0, 0, 0, 166, 535, 0, 880, 0, 832, 813, 0, 823, 0, 834, 0, 850, 787, - 0, 877, 0, 0, 492, 0, 508, 510, 0, 0, - 446, 0, 0, 442, 0, 0, 471, 0, 512, 486, - 0, 0, 140, 513, 138, 139, 515, 0, 529, 790, - 0, 868, 0, 861, 0, 865, 521, 0, 0, 0, - 357, 0, 519, 0, 0, 531, 885, 0, 881, 808, - 0, 896, 0, 894, 0, 0, 631, 632, 0, 0, + 0, 879, 0, 0, 493, 0, 509, 511, 0, 0, + 447, 0, 0, 443, 0, 0, 472, 0, 513, 487, + 0, 0, 140, 514, 138, 139, 516, 0, 530, 790, + 0, 870, 0, 863, 0, 867, 522, 0, 0, 0, + 358, 0, 520, 0, 0, 532, 887, 0, 883, 808, + 0, 898, 0, 896, 0, 0, 631, 632, 0, 0, 0, 694, 682, 683, 681, 690, 609, 615, 608, 0, - 0, 337, 604, 0, 0, 0, 545, 856, 733, 433, - 427, 431, 426, 532, 469, 468, 467, 464, 463, 0, - 458, 422, 423, 434, 435, 0, 589, 0, 756, 0, - 0, 613, 612, 922, 898, 0, 923, 0, 908, 910, - 919, 0, 934, 0, 902, 948, 19, 334, 679, 678, - 0, 677, 0, 352, 980, 177, 975, 0, 0, 53, - 0, 0, 0, 0, 0, 0, 359, 0, 635, 0, - 0, 79, 78, 0, 475, 0, 0, 0, 0, 0, - 170, 540, 0, 0, 0, 0, 0, 824, 816, 814, - 0, 835, 0, 0, 876, 499, 498, 449, 0, 0, - 959, 960, 438, 444, 0, 447, 0, 473, 0, 0, - 0, 0, 0, 788, 871, 0, 862, 0, 527, 522, - 0, 0, 518, 0, 884, 0, 807, 897, 895, 0, - 536, 0, 617, 611, 340, 603, 602, 619, 466, 0, - 457, 456, 455, 588, 140, 0, 772, 754, 0, 0, - 0, 761, 0, 900, 0, 927, 0, 0, 942, 943, - 936, 0, 355, 354, 979, 0, 0, 61, 55, 0, - 63, 25, 22, 0, 0, 309, 0, 213, 0, 102, - 0, 76, 766, 113, 114, 0, 0, 0, 769, 185, - 186, 0, 0, 0, 0, 158, 167, 159, 161, 811, - 0, 0, 0, 0, 0, 833, 0, 0, 448, 450, - 451, 445, 439, 443, 0, 504, 0, 472, 483, 437, - 516, 514, 0, 867, 0, 0, 0, 523, 0, 887, - 0, 0, 630, 622, 0, 465, 0, 0, 752, 751, - 748, 762, 899, 0, 0, 0, 0, 920, 0, 949, - 967, 0, 0, 0, 68, 69, 72, 73, 0, 325, - 315, 314, 0, 636, 209, 97, 0, 750, 770, 171, - 0, 183, 0, 0, 0, 809, 889, 0, 0, 0, - 0, 815, 0, 836, 786, 488, 485, 795, 0, 802, - 0, 0, 793, 0, 798, 869, 526, 525, 886, 882, - 0, 620, 0, 0, 901, 924, 0, 911, 0, 0, - 938, 0, 74, 66, 0, 0, 0, 310, 0, 0, - 0, 0, 0, 172, 0, 162, 160, 879, 825, 819, - 817, 0, 0, 789, 794, 0, 799, 0, 0, 623, - 0, 764, 0, 928, 945, 946, 939, 54, 0, 70, - 71, 0, 0, 0, 0, 0, 0, 0, 771, 169, - 0, 182, 0, 0, 837, 801, 800, 0, 684, 686, - 870, 883, 773, 0, 0, 0, 75, 0, 0, 326, - 0, 0, 324, 311, 0, 319, 375, 0, 373, 0, - 637, 0, 666, 210, 98, 173, 880, 821, 818, 0, - 0, 830, 0, 925, 0, 940, 0, 0, 0, 308, - 0, 0, 663, 0, 0, 0, 667, 0, 0, 0, - 0, 0, 929, 28, 23, 327, 0, 0, 320, 374, - 669, 0, 0, 0, 99, 820, 685, 0, 0, 0, - 0, 312, 674, 0, 675, 672, 0, 670, 95, 0, - 93, 0, 0, 82, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 94, 141, 0, 0, 226, 218, 219, - 220, 221, 222, 223, 224, 225, 0, 0, 216, 0, - 0, 926, 0, 328, 323, 0, 0, 0, 638, 83, - 0, 269, 264, 268, 0, 211, 217, 0, 932, 930, - 673, 671, 0, 0, 0, 0, 0, 0, 0, 278, - 0, 0, 227, 0, 0, 235, 0, 153, 142, 152, - 0, 100, 0, 0, 263, 0, 0, 262, 0, 146, - 0, 0, 346, 0, 344, 0, 0, 188, 0, 0, - 0, 0, 0, 639, 212, 0, 103, 0, 343, 0, - 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, - 151, 143, 0, 0, 192, 0, 347, 0, 230, 229, - 228, 0, 101, 0, 282, 0, 260, 119, 0, 258, - 0, 0, 0, 121, 0, 348, 0, 0, 189, 0, - 0, 0, 345, 233, 112, 110, 0, 0, 286, 0, - 0, 0, 0, 0, 147, 0, 266, 0, 0, 0, - 0, 125, 0, 0, 0, 0, 349, 350, 0, 0, - 0, 0, 0, 107, 301, 0, 283, 0, 0, 295, - 0, 0, 0, 290, 0, 137, 0, 0, 0, 0, - 132, 0, 0, 279, 0, 122, 0, 116, 126, 144, - 150, 200, 0, 190, 0, 0, 0, 0, 111, 0, - 104, 108, 0, 0, 0, 297, 0, 298, 287, 0, - 0, 281, 291, 261, 0, 0, 118, 133, 259, 0, - 277, 0, 267, 271, 128, 0, 0, 0, 197, 199, - 193, 234, 109, 302, 304, 284, 0, 0, 296, 293, - 136, 134, 148, 276, 0, 0, 0, 145, 201, 203, - 191, 0, 0, 0, 295, 0, 272, 274, 129, 0, - 0, 194, 306, 307, 303, 305, 294, 149, 0, 0, - 207, 206, 205, 202, 204, 0, 0, 0, 195, 273, - 275, + 0, 338, 604, 0, 0, 0, 546, 858, 857, 733, + 434, 428, 432, 427, 533, 470, 469, 468, 465, 464, + 0, 459, 423, 424, 435, 436, 0, 589, 0, 756, + 0, 0, 613, 612, 924, 900, 0, 925, 0, 910, + 912, 921, 0, 936, 0, 904, 950, 19, 335, 679, + 678, 0, 677, 0, 353, 982, 177, 977, 0, 0, + 53, 0, 0, 0, 0, 0, 0, 360, 0, 635, + 0, 0, 79, 78, 0, 476, 0, 0, 0, 0, + 0, 170, 541, 0, 0, 0, 0, 0, 824, 816, + 814, 0, 835, 0, 0, 878, 500, 499, 450, 0, + 0, 961, 962, 439, 445, 0, 448, 0, 474, 0, + 0, 0, 0, 0, 788, 873, 0, 864, 0, 528, + 523, 0, 0, 519, 0, 886, 0, 807, 899, 897, + 0, 537, 0, 617, 611, 341, 603, 602, 619, 467, + 0, 458, 457, 456, 588, 140, 0, 772, 754, 0, + 0, 0, 761, 0, 902, 0, 929, 0, 0, 944, + 945, 938, 0, 356, 355, 981, 0, 0, 61, 55, + 0, 63, 25, 22, 0, 0, 309, 0, 213, 0, + 102, 0, 76, 766, 113, 114, 0, 0, 0, 769, + 185, 186, 0, 0, 0, 0, 158, 167, 159, 161, + 811, 0, 0, 0, 0, 0, 833, 0, 0, 449, + 451, 452, 446, 440, 444, 0, 505, 0, 473, 484, + 438, 517, 515, 0, 869, 0, 0, 0, 524, 0, + 889, 0, 0, 630, 622, 0, 466, 0, 0, 752, + 751, 748, 762, 901, 0, 0, 0, 0, 922, 0, + 951, 969, 0, 0, 0, 68, 69, 72, 73, 0, + 326, 315, 314, 0, 636, 209, 97, 0, 750, 770, + 171, 0, 183, 0, 0, 0, 809, 891, 0, 0, + 0, 0, 815, 0, 836, 786, 489, 486, 795, 0, + 802, 0, 0, 793, 0, 798, 871, 527, 526, 888, + 884, 0, 620, 0, 0, 903, 926, 0, 913, 0, + 0, 940, 0, 74, 66, 0, 0, 0, 310, 0, + 0, 0, 0, 0, 172, 0, 162, 160, 881, 825, + 819, 817, 0, 0, 789, 794, 0, 799, 0, 0, + 623, 0, 764, 0, 930, 947, 948, 941, 54, 0, + 70, 71, 0, 0, 0, 0, 0, 0, 0, 771, + 169, 0, 182, 0, 0, 837, 801, 800, 0, 684, + 686, 872, 885, 773, 0, 0, 0, 75, 0, 0, + 327, 0, 0, 325, 311, 0, 319, 376, 0, 374, + 0, 637, 0, 666, 210, 98, 173, 882, 821, 818, + 0, 0, 830, 0, 927, 0, 942, 0, 0, 0, + 308, 0, 0, 663, 0, 0, 0, 667, 0, 0, + 0, 0, 0, 931, 28, 23, 328, 324, 0, 0, + 320, 375, 669, 0, 0, 0, 99, 820, 685, 0, + 0, 0, 0, 312, 674, 0, 675, 672, 0, 670, + 95, 0, 93, 0, 0, 82, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 94, 141, 0, 0, 226, + 218, 219, 220, 221, 222, 223, 224, 225, 0, 0, + 216, 0, 0, 928, 0, 329, 323, 0, 0, 0, + 638, 83, 0, 269, 264, 268, 0, 211, 217, 0, + 934, 932, 673, 671, 0, 0, 0, 0, 0, 0, + 0, 278, 0, 0, 227, 0, 0, 235, 0, 153, + 142, 152, 0, 100, 0, 0, 263, 0, 0, 262, + 0, 146, 0, 0, 347, 0, 345, 0, 0, 188, + 0, 0, 0, 0, 0, 639, 212, 0, 103, 0, + 344, 0, 0, 0, 0, 117, 0, 0, 0, 0, + 0, 0, 151, 143, 0, 0, 192, 0, 348, 0, + 230, 229, 228, 0, 101, 0, 282, 0, 260, 119, + 0, 258, 0, 0, 0, 121, 0, 349, 0, 0, + 189, 0, 0, 0, 346, 233, 112, 110, 0, 0, + 286, 0, 0, 0, 0, 0, 147, 0, 266, 0, + 0, 0, 0, 125, 0, 0, 0, 0, 350, 351, + 0, 0, 0, 0, 0, 107, 301, 0, 283, 0, + 0, 295, 0, 0, 0, 290, 0, 137, 0, 0, + 0, 0, 132, 0, 0, 279, 0, 122, 0, 116, + 126, 144, 150, 200, 0, 190, 0, 0, 0, 0, + 111, 0, 104, 108, 0, 0, 0, 297, 0, 298, + 287, 0, 0, 281, 291, 261, 0, 0, 118, 133, + 259, 0, 277, 0, 267, 271, 128, 0, 0, 0, + 197, 199, 193, 234, 109, 302, 304, 284, 0, 0, + 296, 293, 136, 134, 148, 276, 0, 0, 0, 145, + 201, 203, 191, 0, 0, 0, 295, 0, 272, 274, + 129, 0, 0, 194, 306, 307, 303, 305, 294, 149, + 0, 0, 207, 206, 205, 202, 204, 0, 0, 0, + 195, 273, 275, }; protected static readonly short [] yyDgoto = { 7, 8, 49, 9, 50, 10, 11, 51, 232, 700, 662, - 12, 13, 52, 22, 23, 324, 235, 685, 855, 1049, - 1169, 1513, 852, 236, 237, 238, 239, 240, 241, 242, - 243, 678, 450, 679, 680, 957, 681, 682, 961, 853, - 1044, 1045, 1046, 267, 598, 1139, 110, 864, 1242, 1243, - 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, - 1254, 469, 689, 1325, 971, 1146, 1111, 1181, 1209, 1270, - 1336, 1177, 1387, 1364, 1412, 1413, 1414, 973, 1410, 974, - 746, 1302, 1375, 1349, 1400, 521, 1393, 1369, 1429, 937, - 1398, 1401, 1402, 1497, 1430, 1431, 1427, 1255, 1309, 1281, - 1326, 702, 1377, 1476, 1346, 1433, 1506, 470, 268, 703, - 704, 705, 706, 707, 665, 575, 1151, 666, 667, 870, - 1328, 1354, 1444, 1405, 1478, 1329, 1380, 1502, 1526, 1445, - 1446, 1524, 1510, 1511, 969, 1110, 1208, 1267, 1311, 1268, - 1269, 1303, 1361, 1332, 1304, 327, 223, 1409, 1306, 1394, - 1391, 1256, 1283, 1322, 1473, 1435, 1161, 1474, 599, 1519, - 1520, 1321, 1390, 1366, 1422, 1417, 1388, 1454, 1459, 1420, - 1423, 1424, 1505, 1460, 1418, 1419, 1515, 1503, 1504, 966, - 1053, 1174, 1144, 1201, 1175, 1176, 1217, 1107, 1198, 1230, - 540, 193, 112, 353, 195, 569, 445, 224, 1341, 663, - 664, 841, 857, 328, 410, 539, 305, 1178, 1179, 45, - 114, 306, 116, 117, 118, 119, 120, 121, 122, 123, + 12, 13, 52, 22, 23, 324, 235, 685, 856, 1050, + 1170, 1515, 853, 236, 237, 238, 239, 240, 241, 242, + 243, 678, 449, 679, 680, 958, 681, 682, 962, 854, + 1045, 1046, 1047, 266, 599, 1140, 110, 865, 1244, 1245, + 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, + 1256, 468, 689, 1327, 972, 1147, 1112, 1182, 1210, 1272, + 1338, 1178, 1389, 1366, 1414, 1415, 1416, 974, 1412, 975, + 746, 1304, 1377, 1351, 1402, 520, 1395, 1371, 1431, 938, + 1400, 1403, 1404, 1499, 1432, 1433, 1429, 1257, 1311, 1283, + 1328, 702, 1379, 1478, 1348, 1435, 1508, 469, 267, 703, + 704, 705, 706, 707, 665, 575, 1152, 666, 667, 871, + 1330, 1356, 1446, 1407, 1480, 1331, 1382, 1504, 1528, 1447, + 1448, 1526, 1512, 1513, 970, 1111, 1209, 1269, 1313, 1270, + 1271, 1305, 1363, 1334, 1306, 327, 223, 1411, 1308, 1396, + 1393, 1258, 1285, 1324, 1475, 1437, 1162, 1476, 600, 1521, + 1522, 1323, 1392, 1368, 1424, 1419, 1390, 1456, 1461, 1422, + 1425, 1426, 1507, 1462, 1420, 1421, 1517, 1505, 1506, 967, + 1054, 1175, 1145, 1202, 1176, 1177, 1219, 1108, 1199, 1232, + 540, 193, 112, 353, 195, 569, 444, 224, 1343, 663, + 664, 842, 858, 328, 409, 539, 304, 1179, 1180, 45, + 114, 305, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 252, 814, 742, 1009, 517, 732, 893, - 733, 734, 1002, 137, 198, 738, 601, 602, 603, 808, - 479, 480, 298, 1007, 740, 411, 300, 504, 505, 506, - 507, 510, 748, 313, 764, 765, 910, 264, 485, 779, - 265, 484, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 824, 152, 578, 579, - 580, 788, 789, 790, 153, 566, 781, 354, 1025, 554, - 1091, 154, 499, 967, 1109, 1206, 1307, 471, 1182, 1183, - 1237, 1238, 842, 558, 339, 785, 1193, 559, 560, 269, - 270, 271, 157, 158, 159, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 171, 284, 584, - 172, 173, 320, 821, 638, 940, 1031, 867, 696, 977, - 938, 941, 1069, 942, 978, 979, 285, 174, 175, 176, - 1081, 1013, 1082, 1083, 1084, 1126, 1085, 177, 178, 179, - 180, 713, 492, 714, 1072, 995, 1073, 1189, 1154, 1190, - 715, 994, 716, 1192, 1122, 181, 182, 183, 184, 185, - 186, 307, 530, 531, 1015, 1128, 316, 993, 877, 1153, - 1022, 916, 1129, 187, 423, 188, 424, 943, 1034, 425, - 426, 654, 645, 646, 947, 427, 428, 429, 430, 431, - 948, 640, 945, 1133, 1212, 1272, 1036, 1165, 1229, 833, - 648, 834, 1100, 1039, 1101, 1166, 952, 17, 19, 46, - 47, 227, 668, 849, 446, 669, 670, + 134, 135, 136, 252, 815, 742, 1010, 516, 732, 894, + 733, 734, 1003, 137, 198, 738, 602, 603, 604, 809, + 478, 479, 297, 1008, 740, 410, 299, 503, 504, 505, + 506, 509, 748, 313, 764, 765, 911, 263, 484, 779, + 264, 483, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 825, 152, 578, 579, + 580, 788, 789, 790, 153, 566, 781, 354, 1026, 554, + 1092, 154, 498, 968, 1110, 1207, 1309, 470, 1183, 1184, + 1239, 1240, 843, 558, 339, 785, 1194, 559, 560, 268, + 269, 270, 157, 158, 159, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 171, 283, 585, + 172, 173, 320, 822, 638, 941, 1032, 868, 696, 978, + 939, 942, 1070, 943, 979, 980, 284, 174, 175, 176, + 1082, 1014, 1083, 1084, 1085, 1127, 1086, 177, 178, 179, + 180, 713, 491, 714, 1073, 996, 1074, 1190, 1155, 1191, + 715, 995, 716, 1193, 1123, 181, 182, 183, 184, 185, + 186, 306, 530, 531, 1016, 1129, 316, 994, 878, 1154, + 1023, 917, 1130, 187, 422, 188, 423, 944, 1035, 424, + 425, 654, 645, 646, 948, 426, 427, 428, 429, 430, + 949, 640, 946, 1134, 1213, 1274, 1037, 1166, 1231, 834, + 648, 835, 1101, 1040, 1102, 1167, 953, 17, 19, 46, + 47, 227, 668, 850, 445, 669, 670, }; - protected static readonly short [] yySindex = { -94, - 0, -192, -119, -209, -237,12563, 0, 53, 0, 0, - -237, -209, 0, 0, -84, 0, 6810, -237, 0, -191, - 45, 0, 0, 0, 0, 0, 0, 0, 72, 0, - 382, 0, 0, 0, 5309, 0, 0, 0, 0, 0, - 0, 0, 0, 765, 0, 0, 768, 0, 0, 53, - 440, -237, 0, 408, 0, 276, 485, 248,12045, -132, - 235, 467, 6967, 0, 235, 235, 235, -135, 235, 235, - 599, 0, 8656, 235, 235, 0, 8813, 0, 474, 0, - 248, 0, 235, 495, 235, 0,12607,12607, 538, 235, - 235, 5,11828, 0,11148, 0,11828,11828,11828,11828, -11828,11828,11828,11828, 0, 331, 0, 8221, 0, 148, - 0, 516, 462, 580, -222, 0, 0, 573, 0, 0, + protected static readonly short [] yySindex = { -167, + 0, -194, 51, 72, 108,12563, 0, 231, 0, 0, + 108, 72, 0, 0, -63, 0, 6715, 108, 0, -179, + -254, 0, 0, 0, 0, 0, 0, 0, 244, 0, + 327, 0, 0, 0, 3845, 0, 0, 0, 0, 0, + 0, 0, 0, 439, 0, 0, 575, 0, 0, 231, + 215, 108, 0, 319, 0, 264, 358, 279,12045, -163, + 9, 399, 6872, 0, 9, 9, 9, -137, 9, 9, + 706, 0, 8561, 9, 9, 0, 8718, 0, 482, 0, + 279, 0, 9, 419, 9, 0, 1465, 1465, 501, 9, + 9, -216,11828, 0,11148, 0,11828,11828,11828,11828, +11828,11828,11828,11828, 0, 133, 0, 7831, 0, 131, + 0, 437, 505, 318, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1161, 759, - 86, 344, 574, 781, 674, 635, 682, 672, 463, 714, - 0, 0, 0, 0, 0, 0, 3610, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1044, 775, + 84, 280, 559, 260, 523, 568, 580, 593, -288, 609, + 0, 0, 0, 0, 0, 0, 3546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 23, 743, -31, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -150, 187, 440, 0, - 414, 603, 0, 697, 0, 0, 0, 0, 8221, 8221, + 0, 168, 614, 250, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 317, 332, 215, 0, + 451, 191, 0, 587, 0, 0, 0, 0, 7831, 7831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 749, 720, 0, 725, 0, -149, 0, 0, - 0, 440,13118, 763, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 894, 739,11284, 0, 0, 0, - 0,11148, 235, 235, 885, 396, 580, 0, 23, 0, - 0, 8221, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 665, 599, 0, 629, 0, 69, 0, 0, + 0, 215,13031, 713, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 794, 641,11284, 0, 0, 0, + 0,11148, 9, 9, 785, 331, 318, 168, 0, 0, + 7831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 212, 138,12045, 0, 8221,11148, 790, - 0, 0, 799,11148,11148, 4877, 43, 59, 818, 8516, - 0,11828, 331, 0, 816, 0, 830, 8221,11148, 0, - 834, 611, 235, 0,11148, 474,10604, 0, 0, 495, -11148, 495, 236, 514, 956, 23, 0, 743, -222, 961, - 23,11148,11148,11148, 467, 0, 930, 0, 7124, -271, + 0, 0, -176, -267,12045, 0, 7831,11148, 716, 0, + 0, 734,11148,11148, 9503, -251, -118, 772, 8126, 0, +11828, 133, 889, 800, 0, 818, 7831,11148, 0, 0, + 830, 591, 9, 0,11148, 482,10604, 0, 0, 419, +11148, 419, -279, 539, 854, 168, 0, 614, 429, 919, + 168,11148,11148,11148, 399, 0, 840, 0, 7029, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4334, 0, 0,12518, 236, 909, 907,11148, 0, 871, - 0, 262, 0, 0, 509, 0, 0, 884, 8970,10468, - 0, 0,11828,11148,11148,11148,11148,11148,11148,11148, -11148,11148,11148,11148,11828,11828,11828, 8221, 8221,11828, + 4270, 0, 0,12518, -279, 843, 857,11148, 0, 809, + 0, -294, 0, 0, 356, 0, 0, 810, 8875,10468, + 0, 0,11148,11148,11148,11148,11148,11148,11148,11148, +11148,11148,11148,11828,11828,11828, 7831, 7831,11828,11828, 11828,11828,11828,11828,11828,11828,11828,11828,11828,11828, -11828,11828,11828,11828,11828,11148, 0, 0, 0, 0, - 743, 0, 0, 0, 0,12607,12607, 0, 0, 23, - 0, 0, 0, 0, 428, 954, 0, 0, 0, 0, - 0, 0, 0, 440, 763, 900, 0, 902, 0, 871, - 749, 749, 0, 82, 0, 557, 749, 953, 0, -163, -13118, 0, 0, 0, 0, -172, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -205,13148, - 0, 0, 0, 0, 871, 0, 0, 951, 441, 0, - 957, 0, 958, 202, 474, 0, 235, 0, 0, 0, - 23,10604, -170, 0, 955, 0, 0, 0, -58, 83, - 0, 337, 0, 966, 0, 965, 0, 0, 0, 566, - 0, 8340, 595,11148, 818,10468, 0, 7595, 0, 495, - 0, 0, 0, 968, 122, 0, 0, 248, 474, 475, - 0, 4016, 970, 0, 123, 23, 0, 182, 0, 0, - 0,11148, 1049, 0, 0, 0,11148, 1050, 971, 0, - 974, 976, 0,12518, 0, 0, -174, -287, 7124, 0, - 0, 0, 0, 0, 0, 474, 0, 0, -253, 0, - 0, 0, 495, 236, 23, 8673, 0, 977, 0, 978, -11828, 0, 979, 7124, 0, 343, 0, 461, 0, 871, - 0, 46,11148,11148, 982, 1098, 0, 0, 191, -141, - 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, +11828,11828,11828,11828,11148, 0, 0, 0, 0, 614, + 0, 0, 0, 0, 1465, 1465, 0, 0, 168, 0, + 0, 0, 0, 374, 875, 0, 0, 0, 0, 0, + 0, 0, 215, 713, 821, 0, 841, 0, 809, 665, + 665, 0, -86, 0, 551, 665, 873, 0, -184,13031, + 0, 0, 0, 0, -174, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 198,13061, 0, + 0, 0, 0, 809, 0, 0, 872, 534, 0, 888, + 0, 890, 144, 482, 0, 9, 0, 0, 0, 168, +10604, -156, 0, 885, 0, 0, 0, -40, 53, 0, + 438, 0, 897, 0, 892, 0, 0, 0, 596, 0, + 8245, 615,11148, 772,10468, 0, 7500, 0, 419, 0, + 0, 0, 0, 896, 92, 0, 0, 279, 482, -159, + 0, 4111, 900, 0, 135, 168, 0, 136, 0, 0, + 0,11148, 975, 0, 0, 0,11148, 979, 901, 0, + 904, 906, 0,12518, 0, 0, -186, 44, 7029, 0, + 0, 0, 0, 0, 0, 482, 0, 0, -268, 0, + 0, 0, 419, -279, 168, 8421, 0, 907, 0, 908, +11828, 0, 1029, 920, 7029, 0, -300, 0, 240, 0, + 809, 0, 81,11148,11148, 924, 1041, 0, 0, 123, + -80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 775, 775, 84, 84, 280, 280, 280, 280, 559, 559, + 260, 523, 568, 580, 593, 0, -161, -149, 0, 9032, + 1005, 168, 1006, 168, 9032, 9032, 921,11148, 0, 0, + 875, 0, 168, 0, 422, 809, 0, 0, 0, 0, + 481, 215, 31, 0, 8421, 551, 0, 931, 930, 0, + 0, 0, 0, 0, 0, -279, 933, 0, 934, 936, + 0, 0, 0, 0, 938, 8578, 894, 0, 267, 0, + 0, 321, 0,11284, 0, 932, 0, 0, 0, 454, + -47, 942, 0, 941, 943, 944, 0, 0,11148, 0, + 168, 0, 0, 704, 0, 945, 0, 427, 0, 0, + 6872, 0, 6872, 8404, 0, 9503, 0, 0,10740, 151, + 0, 114, -34, 0, 887, 899, 0, 91, 0, 0, + 948, 949, 0, 0, 0, 0, 0, 950, 0, 0, + 958, 0, 4429, 0, 482, 0, 0, 419, 617, 905, + 0, 175, 0, 955, 956, 0, 0, 6872, 0, 0, + 6872, 0,11148, 0,11148, 7831, 0, 0, 482, 959, + 482, 0, 0, 0, 0, 0, 0, 0, 0, 9032, + 7831, 0, 0, 168,12518, 987, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 759, 759, 86, 86, 344, 344, 344, 344, 574, 574, - 781, 674, 635, 682, 672, 0, -164, -72, 0, 9127, - 1063, 23, 1065, 23, 9127, 9127, 980,11148, 0, 0, - 954, 0, 23, 0, 620, 871, 0, 0, 0, 0, - 578, 440, 265, 0, 8673, 557, 0, 988, 989, 0, - 0, 0, 0, 0, 0, 236, 992, 0, 993, 995, - 0, 0, 0, 0, 997, 8830, 962, 0, 374, 0, - 0, 641, 0,11284, 0, 990, 0, 0, 0, 586, - 155, 1000, 0, 999, 1001, 1002, 0, 0,11148, 0, - 23, 0, 0, 685, 0, 1005, 0, 481, 0, 0, - 6967, 0, 6967, 8499, 0, 4877, 0, 0,10740, 297, - 0, -268, -90, 0, 945, 959, 0, 55, 0, 0, - 1012, 1011, 0, 0, 0, 0, 0, 1013, 0, 0, - 1022, 0, 4493, 0, 474, 0, 0, 495, 517, 969, - 0, 100, 0, 1020, 1021, 0, 0, 6967, 0, 0, - 6967, 0,11148, 0,11148, 8221, 0, 0, 474, 1023, - 474, 0, 0, 0, 0, 0, 0, 0, 0, 9127, - 8221, 0, 0, 23,12518, 1053, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0,10332, - 0, 0, 0, 0, 0, 7752, 0, 9127, 0, 7909, - 1024, 0, 0, 0, 0, 1103, 0, 1105, 0, 0, - 0, 893, 0, 1027, 0, 0, 0, 0, 0, 0, - 984, 0, 82, 0, 0, 0, 0, 557, 557, 0, - 900, 1033, 1035, 991, 1040, 962, 0, 1037, 0, 1157, - 1158, 0, 0,11148, 0,10876, 1041, 586, 8673, 8221, - 0, 0, 345, 1173, 1174, 188, 1051, 0, 0, 0, -11148, 0,11148, 1151, 0, 0, 0, 0, 17,11012, - 0, 0, 0, 0, 8045, 0, 1177, 0, 743,11148, - 1067, 8499, 1068, 0, 0, 23, 0, 196, 0, 0, - 871, 969, 0, 23, 0, -68, 0, 0, 0, 1066, - 0, 1094, 0, 0, 0, 0, 0, 0, 0, 779, - 0, 0, 0, 0, 0, 8516, 0, 0, 23, 544, - 1024, 0, 9127, 0, 9127, 0, 1099, 9127, 0, 0, - 0, 506, 0, 0, 0, 1075, 900, 0, 0,11420, - 0, 0, 0, 1078, 7612, 0, 962, 0, 962, 0, - 962, 0, 0, 0, 0, 23, 1076, 1041, 0, 0, - 0, -169, -162, 1079, 1081, 0, 0, 0, 0, 0, - 1080, 8499, 1024, -72,11148, 0, 1085, 6967, 0, 0, - 0, 0, 0, 0, 1088, 0, 818, 0, 0, 0, - 0, 0, -183, 0, 1087, 871, 969, 0, 969, 0, - 1024, 1091, 0, 0, 474, 0, 1043, 1083, 0, 0, - 0, 0, 0, 9127, 1113, 9127, 9127, 0,11148, 0, - 0, 995, 313, 793, 0, 0, 0, 0, -209, 0, - 0, 0, 1101, 0, 0, 0, 1086, 0, 0, 0, - 548, 0, 1089, 1213, 1215, 0, 0, 1024, 1104, 1024, - 1106, 0, 1096, 0, 0, 0, 0, 0,11148, 0, - 1107, -213, 0, -213, 0, 0, 0, 0, 0, 0, - 474, 0,11148, 8204, 0, 0, 1130, 0, 899, 1108, - 0, 1109, 0, 0,11420, -237, 202, 0, 1110, 1110, - 1110,10876, 1111, 0,11148, 0, 0, 0, 0, 0, - 0, 6967, -124, 0, 0, 7124, 0, 826, 6967, 0, - 1114, 0, 9127, 0, 0, 0, 0, 0,11148, 0, - 0, 440, 1115, 440, 8221, 1144, 1144, 1144, 0, 0, -11148, 0, 6967, 9284, 0, 0, 0, 7124, 0, 0, - 0, 0, 0, 1138, 9127,11148, 0, 440, 1124, 0, - 1077, 908, 0, 0, 1119, 0, 0, 31, 0, 1082, - 0, 1144, 0, 0, 0, 0, 0, 0, 0, 1122, - 1005, 0, 7124, 0, 1156, 0, 1129, 1144, 0, 0, - 1139, 440, 0, 8221, -20, 1141, 0, 1142, 1143, 6967, - 1145, 9127, 0, 0, 0, 0, 1131, 1129, 0, 0, - 0,12124, 159, 440, 0, 0, 0, 1155, 9127, 1146, -11148, 0, 0, 1150, 0, 0, 1140, 0, 0,13148, - 0, 1147, 159, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 619,13148, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1171, 440, 0, 159, - 23, 0, 1155, 0, 0, 1169,12124,12290, 0, 0, - 174, 0, 0, 0,12322, 0, 0, 1175, 0, 0, - 0, 0, 8221, 8221, 397, 8516, 415, 495, 1207, 0, - 236,10238, 0, 1240, 0, 0, 1129, 0, 0, 0, - 1129, 0, 1132, 1134, 0, 8221, -159, 0, 8221, 0, - 1135, 1176, 0, 236, 0, -51,10268, 0, 1179, 1136, - 51, 284, 5309, 0, 0, 1129, 0, 236, 0, 1182, - 1159, 1180, 1181, 0, 1185, 1134, 1188, 202, 1193, 1187, - 0, 0, 1190, 1208, 0, 871, 0, 875, 0, 0, - 0, 1205, 0, -25, 0, 1198, 0, 0, 1211, 0, - 1210, 1212, 1214, 0, 1209, 0, 202, 202, 0, 202, - 1216, 1217, 0, 0, 0, 0, 1219, 211, 0, 1220, - 202, 1331, 1221, 202, 0, 174, 0, 8499, 1170, 1223, - 1209, 0, 1224, 1228, 215, 1231, 0, 0, 202,10876, - 1189, 1230, 1219, 0, 0,13148, 0, 440, 440, 0, - 1191, 1238, 1220, 0, 1243, 0,11148, 1199, 1244, 1221, - 0, 1247, 202, 0, 34, 0, 1235, 0, 0, 0, - 0, 0,13148, 0, 215, 215, 1254, 1253, 0, -25, - 0, 0, 118, 1258,13148, 0,13148, 0, 0, 8499, - 1246, 0, 0, 0, 1259, 1211, 0, 0, 0, 1256, - 0, 278, 0, 0, 0, 1144, 914, 1262, 0, 0, - 0, 0, 0, 0, 0, 0, 1276, 1368, 0, 0, - 0, 0, 0, 0, 1264, 1267, 8499, 0, 0, 0, - 0, 215, 565, 565, 0, 1144, 0, 0, 0, -32, - -32, 0, 0, 0, 0, 0, 0, 0,10468,10468, - 0, 0, 0, 0, 0, 1265, 1268, 1269, 0, 0, - 0, +10332, 0, 0, 0, 0, 0, 7657, 0, 9032, 0, + 7814, 964, 0, 0, 0, 0, 1038, 0, 1039, 0, + 0, 0, 566, 0, 966, 0, 0, 0, 0, 0, + 0, 926, 0, -86, 0, 0, 0, 0, 551, 551, + 0, 821, 976, 974, 937, 981, 894, 0, 977, 0, + 1093, 1095, 0, 0,11148, 0,10876, 980, 454, 8421, + 7831, 0, 0, -233, 1100, 1102, 137, 984, 0, 0, + 0,11148, 0,11148, 1080, 0, 0, 0, 0, 41, +11012, 0, 0, 0, 0, 7950, 0, 1105, 0, 614, +11148, 999, 8404, 1001, 0, 0, 168, 0, 196, 0, + 0, 809, 905, 0, 168, 0, -62, 0, 0, 0, + 995, 0, 1027, 0, 0, 0, 0, 0, 0, 0, + 729, 0, 0, 0, 0, 0, 8126, 0, 0, 168, + 13, 964, 0, 9032, 0, 9032, 0, 1020, 9032, 0, + 0, 0, 584, 0, 0, 0, 1004, 821, 0, 0, +11420, 0, 0, 0, 1007, 4594, 0, 894, 0, 894, + 0, 894, 0, 0, 0, 0, 168, 1000, 980, 0, + 0, 0, -166, -164, 1003, 1008, 0, 0, 0, 0, + 0, 1010, 8404, 964, -149,11148, 0, 1009, 6872, 0, + 0, 0, 0, 0, 0, 1014, 0, 772, 0, 0, + 0, 0, 0, -172, 0, 1015, 809, 905, 0, 905, + 0, 964, 1016, 0, 0, 482, 0, 952, 998, 0, + 0, 0, 0, 0, 9032, 1042, 9032, 9032, 0,11148, + 0, 0, 936, 208, 746, 0, 0, 0, 0, 72, + 0, 0, 0, 1023, 0, 0, 0, 1013, 0, 0, + 0, 428, 0, 1021, 1135, 1140, 0, 0, 964, 1025, + 964, 1037, 0, 1035, 0, 0, 0, 0, 0,11148, + 0, 1046, -153, 0, -153, 0, 0, 0, 0, 0, + 0, 482, 0,11148, 8109, 0, 0, 1068, 0, 760, + 1045, 0, 1048, 0, 0,11420, 108, 144, 0, 1049, + 1049, 1049,10876, 1050, 0,11148, 0, 0, 0, 0, + 0, 0, 6872, -139, 0, 0, 7029, 0, 784, 6872, + 0, 1056, 0, 9032, 0, 0, 0, 0, 0,11148, + 0, 0, 215, 1055, 215, 7831, 1077, 1077, 1077, 0, + 0,11148, 0, 6872, 9189, 0, 0, 0, 7029, 0, + 0, 0, 0, 0, 1082, 9032,11148, 0, 215, 1060, + 0, 1017, 789, 0, 0, 1057, 0, 0, 36, 0, + 1018, 0, 1077, 0, 0, 0, 0, 0, 0, 0, + 1061, 945, 0, 7029, 0, 1089, 0, 1063, 1077, 1184, + 0, 1073, 215, 0, 7831, -105, 1075, 0, 1090, 1092, + 6872, 1076, 9032, 0, 0, 0, 0, 0, 1079, 1063, + 0, 0, 0,12124, 120, 215, 0, 0, 0, 1106, + 9032, 1085,11148, 0, 0, 1094, 0, 0, 1097, 0, + 0,13061, 0, 1098, 120, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 583,13061, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1099, 215, + 0, 120, 168, 0, 1106, 0, 0, 1091,12124,12290, + 0, 0, 20, 0, 0, 0,12322, 0, 0, 1101, + 0, 0, 0, 0, 7831, 7831, 265, 8126, 278, 419, + 1127, 0, -279, 946, 0, 1163, 0, 0, 1063, 0, + 0, 0, 1063, 0, 1052, 1054, 0, 7831, -151, 0, + 7831, 0, 1059, 1103, 0, -279, 0, -45,10251, 0, + 1104, 1062, 73, 506, 3845, 0, 0, 1063, 0, -279, + 0, 1111, 1065, 1110, 1108, 0, 1114, 1054, 1115, 144, + 1107, 1117, 0, 0, 1116, 1128, 0, 809, 0, 795, + 0, 0, 0, 1123, 0, -52, 0, 1121, 0, 0, + 1129, 0, 1125, 1131, 1136, 0, 1133, 0, 144, 144, + 0, 144, 1124, 1138, 0, 0, 0, 0, 1141, 128, + 0, 1142, 144, 1253, 1143, 144, 0, 20, 0, 8404, + 1109, 1144, 1133, 0, 1147, 1149, 130, 1154, 0, 0, + 144,10876, 1112, 1152, 1141, 0, 0,13061, 0, 215, + 215, 0, 1126, 1153, 1142, 0, 1173, 0,11148, 1130, + 1170, 1143, 0, 1175, 144, 0, -96, 0, 1168, 0, + 0, 0, 0, 0,13061, 0, 130, 130, 1145, 1178, + 0, -52, 0, 0, 256, 1157,13061, 0,13061, 0, + 0, 8404, 1171, 0, 0, 0, 1181, 1129, 0, 0, + 0, 1182, 0, 294, 0, 0, 0, 1077, 847, 1185, + 0, 0, 0, 0, 0, 0, 0, 0, 1241, 1295, + 0, 0, 0, 0, 0, 0, 1189, 1193, 8404, 0, + 0, 0, 0, 130, 526, 526, 0, 1077, 0, 0, + 0, 55, 55, 0, 0, 0, 0, 0, 0, 0, +10468,10468, 0, 0, 0, 0, 0, 1197, 1194, 1195, + 0, 0, 0, }; - protected static readonly short [] yyRindex = { 1441, - 0, 0, 7281, 1441, 0, 0, 0, 1642, 0, 0, - 3199, 1301, 0, 0, 0, 0, 0, 3199, 0, 0, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + protected static readonly short [] yyRindex = { 1410, + 0, 0, 7186, 1410, 0, 0, 0, 1568, 0, 0, + 1513, 1341, 0, 0, 0, 0, 0, 1513, 0, 0, + 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1569, 0, 0, 1569, 0, 0, 1568, + 3215, 1788, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1203, 0, 0, 0, 0, 0, 0, 0, 0, + 8735, 0, 1196, 0, 0, 0, 1196, 0, 0, 0, + 0, 0, 0, 197, 0, 0, 0, 0, 0, 0, + 0, 0, 153, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4587, 0, 0, 0, 0, + 0, 0, 286, 4680, 1796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1644, 0, 0, 1644, 0, 0, 1642, - 3242, 2018, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1279, 0, 0, 0, 0, 0, 0, 0, 0, - 8987, 0, 1271, 0, 0, 0, 1271, 0, 0, 0, - 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, - 0, 0, 194, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4716, 0, 0, 0, 0, - 0, 0, 306, 4875, 4086, 0, 0, 4651, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4836, 4904, + 5144, 5348, 5688, 5892, 6028, 6164, 6300, 6436, 1187, 2889, + 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 5031, 5099, - 1443, 5579, 5919, 679, 6191, 6327, 1837, 6531, 1072, 2873, - 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3258, 0, + 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 224, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3322, 0, - 721, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1569, 237, 0, 0, 0, 0, 0, 0, + 0, 3338, 320, 3381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1644, 146, 0, 0, 0, 0, 0, 0, - 0, 3365, 511, 3408, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3697, 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, 1205, 0, 0, 0, 0, 0, + 0, 3633, 1202, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2421, + 0, 2931, 420, 2551, 0, 0, 0, 2681, 2551, 0, + 0, 0, 0, 0, 1203, 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1280, 0, 0, 0, 0, - 0, 0, 3697, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2405, - 0, 2915, 216, 2535, 0, 0, 0, 2665, 2535, 0, - 0, 0, 0, 0, 1279, 0, 0, 0, -60, 0, + 0, 0, 0, 1199, 2785, 0, 0, 1196, 0, 3633, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1277, 2769, 0, 0, 1271, 0, 3697, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 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, 1605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3913, 0, 0, 0, 0, 0, + 0, 0, 3424, 3467, 0, 0, 0, 0, 2275, 1569, + 1569, 0, -10, 0, 7517, 1569, 1595, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1604, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 912, 0, 0, 0, 0, - 0, 0, 0, 3451, 3531, 0, 0, 0, 0, 2259, - 1644, 1644, 0, -189, 0, 7769, 1644, 1650, 0, 0, - 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 407,11977, - 0, 0, 0, 0, 3697, 0, 0, 0, 0, 0, - 0, 0, 0,12366, 0, 0, 0, 0, 0, 0, - 0, 710, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 571, 901, 0, 0, 1283, 0, 0, 0, 0, - 0, 20, 0, 0, 4174, 1281, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1781, + 0, 0, 0, 0, 0, 0, 0, 453,11977, 0, + 0, 0, 0, 3633, 0, 0, 0, 0, 0, 0, + 0, 0,12366, 0, 0, 0, 0, 0, 0, 0, + 711, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 604, 693, 0, 0, 1228, 0, 0, 0, 0, 0, + 165, 0, 0, 4110, 1225, 0, 0, 0, 670, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1277, 0, 0, 6650, 0, 115, 0, - 0, 0, 0, 0, 0, 9441, 0, 0, 0, 0, - 0, 0, -166, 756, 0, 0, 0, 1284, 0, 0, - 0, 0, 0, 0, 0, 3697, 0, 3697, 0, 4333, - 0, 0, 0, 0, -140, 0, 0, 0, 0, 218, - 0, 0, 0, 5203, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1199, 0, 0, 6555, 0, 176, 0, + 0, 0, 0, 0, 0, 9346, 0, 0, 0, 0, + 0, 0, 5, 802, 0, 0, 0, 1227, 0, 0, + 0, 0, 1202, 0, 0, 0, 3633, 0, 3633, 0, + 4269, 0, 0, 0, 0, -191, 0, 0, 0, 0, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5271, 5375, 5443, 5511, 5647, 5715, 5783, 5851, 5987, 6055, - 6123, 6259, 6395, 6463, 6587, 0, 0, 670, 0, 0, + 5008, 5076, 5212, 5280, 5416, 5484, 5552, 5620, 5756, 5824, + 5960, 6096, 6232, 6368, 6492, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 912, 0, 0, 0, 0, 2259, 0, 0, 0, 0, - 1234, 9645, 0, 0, 0, 9144, 0, 0, 814, 0, - 0, 0, 0, 0, 0, 700, 469, 0, 0, 1285, - 0, 0, 0, 0, 1290, 0, 0, 0, 0, 0, - 0,11556, 0, 0, 0, 823, 0, 0, 0, 9301, -12442, 0, 0, 828, 833, 839, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 733, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1292, 0, 0, 0, 3763, - 0, 0, 143, 0, 181, 3856, 0, 0, 0, 0, - 0, 1286, 0, 0, 0, 0, 0, 1293, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 254, 727, 0, - 0, 0, 0, 0, 1294, 0, 0, 0, 0, 0, + 3913, 0, 0, 0, 0, 2275, 0, 0, 0, 0, + 1183, 9694, 0, 0, 0, 8892, 0, 0, 755, 0, + 0, 0, 0, 0, 0, 683, 698, 0, 0, 1230, + 0, 0, 0, 0, 1236, 0, 0, 0, 0, 0, + 0,11556, 0, 0, 0, 758, 0, 0, 0, 9049, +12442, 0, 0, 759, 766, 796, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 722, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1238, 0, 0, 0, 3699, + 0, 0, 177, 0, 98, 3792, 0, 0, 0, 0, + 0, 1232, 0, 0, 0, 0, 0, 1239, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -51, 676, 0, + 0, 0, 0, 0, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9441, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9346, 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, - 570, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -179, 0, 477, 0, 0, 0, 0, 0, 0, - 0, 0, -189, 0, 0, 0, 0, 9301, 7926, 0, - 1295, 0, 737, 0, 0, 0, 0, 1297, 0, 1249, - 1250, 0, 0, 0, 0, 0, 1296,12631, 0, 0, - 0, 0,12474, 0, 0, 0, 841, 0, 0, 0, - 0, 0, 0, 2133, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4015, 0, - 4492, 1303, 0, 0, 0, 1302, 0, 0, 0, 0, - 252, 0, 0, 0, 0, 841, 0, 0, 0, 0, + 0, 567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -181, 0, 472, 0, 0, 0, 0, 0, + 0, 0, 0, -10, 0, 0, 0, 0, 9049, 7674, + 0, 1240, 0, 700, 0, 0, 0, 0, 1244, 0, + 1201, 1206, 0, 0, 0, 0, 0, 1245, 9206, 0, + 0, 0, 0,12474, 0, 0, 0, 798, 0, 0, + 0, 0, 0, 0, 2149, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3951, + 0, 4428, 1246, 0, 0, 0, 1243, 0, 0, 0, + 0, 333, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 684, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 844, + 0, 657, 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, 1299, 0, 0, - 0, 0, 0, 847, 850, 0, 0, 0, 0, 0, - 0, 0, 1305, 665, 1304, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4174, 0, 0, 0, - 0, 0, 1313, 0, 0, 252, 0, 0, 919, 0, - 1305, 0, 0, 0, 9441, 0, 634, 639, 0, 0, + 807, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1247, 0, + 0, 0, 0, 0, 814, 820, 0, 0, 0, 0, + 0, 0, 0, 1248, 608, 1250, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4110, 0, 0, + 0, 0, 0, 1249, 0, 0, 333, 0, 0, 846, + 0, 1248, 0, 0, 0, 9346, 0, 643, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1285, 9491, 0, 0, 0, 0, 0,12682, 0, + 0, 0, 1230, 9540, 0, 0, 0, 0, 0,12605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 711, 0, 719, 0, 0, 0, 0, 1310, 0, 738, - 1307, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1317, 0, 7438, 0, 0, 0, 0, 0, 0, - 9441, 0, 0, 0, 0, 0, 0, 0, -167, 552, - 0, 0, 0, 0, 0,12725,12366, 0, 447, 447, - 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 630, 0, 737, 0, 0, 0, 0, 1255, 0, + 736, 1252, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1261, 0, 7343, 0, 0, 0, 0, 0, + 0, 9346, 0, 0, 0, 0, 0, 0, 0, -154, + 484, 0, 0, 0, 0, 0,12681,12366, 0, 218, + 218, 218, 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,12811, 0, -293, 0, 1306, 1306, 1306, 0, 0, - 0, 0, 0, 1315, 0, 0, 0, -146, 0, 0, - 0, 0, 0, 0, 0, 0, 0,12854, 0, 0, - 0, 9948, 0, 0, 1320, 0, 0, 465, 0, 0, - 0, 583, 0, 0, 0, 0, 0, 0, 0, 0, - 1318, 0, 1321, 0, 0, 0, 3156, 1316, 542, 0, - 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3073, 0, 0, - 0, 0, 9750,10034, 0, 0, 0, 569, 0, 0, - 0, 0, 0, 0, 0, 0, 446, 0, 0,12148, - 0, 0, 9849, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0,12216, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0,10128, 0, 9750, - 0, 0, 569, 0, 0, 0, 0, 407, 0, 0, - 0, 0, 0, 0, 407, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4648, 423, 0, -10170, 0, 0, 0, 5005, 0, 3073, 0, 0, 0, - 3073, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 237, 0, 1324, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3073, 0, 669, 0, 640, - 0, 0, 0, 0, 0, 0, 0,12366, 864, 0, - 0, 0, 0, 0, 0, 1289, 0, 131, 0, 0, - 0, 0, 0, 0, 0, 865, 0, 0, 0, 0, - 0, 0, 0, 0, 1325, 0,12366,12366, 0,12398, - 0, 0, 0, 0, 0, 0, 1328,13078, 0, 1329, -12366,11692, 1330,12366, 0, 0, 0, 0, 0, 0, - 1332, 0, 0, 0,13048, 0, 0, 0,12366, 0, - 0, 0, 1333, 0, 0, 320, 0,12972,13010, 0, - 0, 0, 1334, 0, 0, 0, 0, 0, 0, 1335, - 0, 0,12366, 0, 621, 0, 868, 0, 0, 0, - 0, 0, 931, 0,12896,12934, 0, 0, 0, 0, - 0, 0, 0, 0, 1378, 0, 1433, 0, 0, 0, - 869, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, + 0, 0,12724, 0, -285, 0, 1263, 1263, 1263, 0, + 0, 0, 0, 0, 1259, 0, 0, 0, -182, 0, + 0, 0, 0, 0, 0, 0, 0, 0,12767, 0, + 0, 0, 9997, 0, 0, 1264, 0, 0, 369, 0, + 0, 0, 533, 0, 0, 0, 0, 0, 0, 0, + 0, 1262, 0, 1267, 0, 0, 0, 3172, 1260, 537, + 0, 0, -269, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3089, + 0, 0, 0, 0, 9799,10083, 0, 0, 0, 642, + 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, + 0,12148, 0, 0, 9898, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0,12216, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,10177, + 0, 9799, 0, 0, 642, 0, 0, 0, 0, 453, + 0, 0, 0, 0, 0, 0, 453, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096, + 457, 0,10219, 0, 0, 0, 4810, 0, 3089, 0, + 0, 0, 3089, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 271, 0, 1272, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3089, 0, 543, + 0, 494, 0, 0, 0, 0, 0, 0, 0,12366, + 819, 0, 0, 0, 0, 0, 0, 1235, 0, 516, + 0, 0, 0, 0, 0, 0, 0, 824, 0, 0, + 0, 0, 0, 0, 0, 0, 1265, 0,12366,12366, + 0,12398, 0, 0, 0, 0, 0, 0, 1268,12991, + 0, 1269,12366,11692, 1270,12366, 0, 0, 0, 0, + 0, 0, 1271, 0, 0, 0,12961, 0, 0, 0, +12366, 0, 0, 0, 1273, 0, 0, 378, 0,12885, +12923, 0, 0, 0, 1278, 0, 0, 0, 0, 0, + 0, 1279, 0, 0,12366, 0, 664, 0, 825, 0, + 0, 0, 0, 0, 861, 0,12809,12847, 0, 0, + 0, 0, 0, 0, 0, 0, 1325, 0, 1393, 0, + 0, 0, 829, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0,13048,11864,12768, 0, 623, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1281, 1281, + 0, 0, 0,12961, 9534,11864, 0, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, + 1225, 1225, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, }; protected static readonly short [] yyGindex = { 0, - 0, 1657, 0, 0, 0, -1, -16, -181, -41, -42, - 0, 1688, 1707, 708, 0, 3, 0, 0, 0, 0, - 0, -875, -691, -219, -474, 0, 0, 0, 0, 0, - -210, 0, 0, 0, 762, 0, 870, 0, 0, 0, - 0, 618, 622, -17, -217, 0, -46, 0, 454, 0, - 473,-1129, -820, -656, -570, -542, -477, -471, -470, 0, --1024,-1169, 0, 13, 0, 204, 0,-1094, 0, 0, - 0, -70, 280, 0, 0, 0, 318,-1068, 0, -273, - -292, 1046, 0, 0, 0, -897, 260, 0, 0, -512, - 0, 0, 332, 0, 0, 304, 0, 0, 339, 0, - -481, -816, 0, 0, 0, 0, 0, 434, -13, 0, - 0, 866, 867, 872, 1044, -529, 0, 0, -317, 873, - 432, 0, -880, 0, 0, 0, 0, 0, 0, 0, - 0, 238, 0, 0, 0, 0, 0, 0, 0, 0, - 486, 0, 0, 0, 0, -311, 422, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 500, 0, -515, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 334, 0, 0, 340, 348, 257, 0, 0, 0, - 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, - -54, 0, 401, -180, 0, 0, 409, 0, 466, 0, - 926, 0, 1239, -295, -266, -63, 1100, 0, 568, 0, - -33, 11, 0, 0, 10, 0, 0, 0, 0, 0, + 0, 1607, 0, 0, 0, 2, -16, -180, -48, -43, + 0, 1647, 1655, 101, 0, 4, 0, 0, 0, 0, + 0,-1020, -693, -215, -482, 0, 0, 0, 0, 0, + -224, 0, 0, 0, 703, 0, 811, 0, 0, 0, + 0, 560, 563, -17, -226, 0, -46, 0, 393, 0, + 430, -573, -569, -553, -471, -469, -462, -444, -435, 0, +-1042,-1171, 0, 1, 0, 129, 0,-1095, 0, 0, + 0, -44, 220, 0, 0, 0, 258,-1073, 0, -273, + -293, 992, 0, 0, 0, -899, 212, 0, 0, -501, + 0, 0, 281, 0, 0, 249, 0, 0, 287, 0, + -579, -976, 0, 0, 0, 0, 0, 382, -13, 0, + 0, 815, 816, 822, 988, -528, 0, 0, -321, 823, + 377, 0,-1327, 0, 0, 0, 0, 0, 0, 0, + 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, + 432, 0, 0, 0, 0, -335, 362, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 441, 0, -514, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 201, 0, + 0, 288, 0, 0, 283, 285, 210, 0, 0, 0, + 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, + -39, 0, 552, -173, 0, 0, 364, 0, 421, 0, + 882, 0, 1204, -286, -265, -56, 947, 0, 524, 0, + -30, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -260, 0, 1242, 0, -335, 0, -767, 0, 0, - 0, 878, 0, -298, -130, 1055, 0, 964, 0, 1184, - 1406, 1112, 0, 0, 778, 1717, 0, 0, 0, 0, - 1074, 0, 0, 0, 0, 0, -425, 1466, 0, 0, - 0, 0, 0, 1133, 534, 905, 776, 906, 1402, 1403, - 1405, 1409, 1401, 0, 1404, 0, -489, 0, 0, 1019, - 1266, -718, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -290, 0, 0, 0, 0, -450, 0, 626, - 0, 539, 0, 629, 0, 0, 0, 698, -526, -3, - -314, -2, 0, 1672, 0, 62, 0, 63, 85, 101, - 110, 111, 114, 136, 142, 164, 170, 0, -672, 0, - 8, 0, 0, 836, 0, 761, 0, 0, 0, 0, - 740, -258, 815, -858, 0, 857, -463, 0, 0, 0, - 0, 0, 0, 764, 0, 0, 766, 0, 0, 0, + 0, -256, 0, 367, 0, -333, 0, -773, 0, 0, + 0, 832, 0, -296, -126, 1012, 0, 917, 0, 1155, + 1368, 1053, 0, 0, 731, 1678, 0, 0, 0, 0, + 1028, 0, 0, 0, 0, 0, -506, 1416, 0, 0, + 0, 0, 0, 1190, 855, 845, 748, 852, 1356, 1358, + 1355, 1357, 1359, 0, 1360, 0, -611, 0, 0, 968, + 1207, -714, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -298, 0, 0, 0, 0, -458, 0, 585, + 0, 487, 0, 573, 0, 0, 0, 646, -534, -5, + -313, -3, 0, 1618, 0, 68, 0, 70, 74, 99, + 125, 142, 149, 156, 157, 163, 171, 0, -674, 0, + -7, 0, 0, 782, 0, 707, 0, 0, 0, 0, + 685, -322, 762, -863, 0, 803, -461, 0, 0, 0, + 0, 0, 0, 708, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, - 0, 14, 0, 1319, 0, 0, 0, 932, 0, 0, - 0, 0, 0, 0, -176, 0, 0, 0, 0, 0, - 1422, 1200, 0, 0, 0, 1427, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, - 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, - 0, -7, 1008, 0, 0, 0, 1010, + 0, 0, 634, 0, 0, 0, 0, 0, 0, 0, + 0, -27, 0, 1274, 0, 0, 0, 876, 0, 0, + 0, 0, 0, 0, -168, 0, 0, 0, 0, 0, + 1374, 1150, 0, 0, 0, 1376, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 517, 0, 0, 0, 0, + 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 64, 957, 0, 0, 0, 962, }; protected static readonly short [] yyTable = { 109, - 741, 189, 18, 111, 522, 747, 519, 434, 234, 233, - 437, 433, 452, 155, 156, 495, 326, 331, 43, 690, - 319, 293, 192, 473, 562, 257, 407, 115, 712, 477, - 538, 515, 786, 549, 600, 503, 576, 356, 1027, 229, - 325, 330, 577, 1149, 251, 337, 794, 957, 884, 364, - 885, 372, 1184, 1185, 1079, 304, 903, 799, 363, 304, - 371, 544, 923, 14, 190, 312, 259, 314, 258, 115, - 1278, 686, 1078, 115, 316, 687, 941, 340, 160, 161, - 783, 782, 1032, 683, 1079, 717, 1060, 1285, 944, 365, - 311, 817, 673, 1062, 1259, 915, 1343, 20, 917, 891, - 564, 162, 258, 1216, 47, 414, 258, 258, 258, 258, - 258, 258, 258, 258, 815, 629, 47, 163, 674, 1173, - 791, 797, 1001, 260, 47, 409, 164, 165, 441, 442, - 166, 1156, 289, 1010, 361, 845, 688, 16, 1259, 109, - 290, 784, 437, 111, 639, 351, 435, 233, 2, 6, - 675, 477, 167, 155, 156, 829, 830, 565, 168, 941, - 892, 1, 792, 318, 941, 894, 941, 115, 349, 941, - 941, 944, 941, 941, 437, 448, 944, 1173, 944, 585, - 169, 944, 944, 819, 944, 944, 170, 1020, 415, 435, - 451, 483, 291, 416, 941, 417, 365, 720, 418, 419, - 478, 420, 421, 365, 1351, 365, 944, 365, 1080, 1032, - 818, 886, 482, 735, 452, 443, 350, 493, 160, 161, - 761, 797, 739, 1521, 473, 15, 191, 291, 47, 476, - 1385, 629, 816, 629, 481, 1221, 576, 524, 1080, 351, - 449, 162, 577, 261, 562, 684, 1453, 292, 1061, 941, - 1157, 365, 257, 352, 676, 1063, 537, 163, 1344, 657, - 541, 944, 257, 2, 577, 546, 164, 165, 42, 562, - 166, 494, 898, 1477, 545, 797, 498, 500, 422, 543, - 568, 335, 292, 895, 548, 1487, 1203, 1488, 629, 1471, - 1143, 525, 167, 491, 691, 258, 115, 533, 168, 535, - 924, 805, 534, 498, 957, 258, 1092, 687, 820, 48, - 898, 258, 992, 721, 511, 551, 552, 619, 620, 1352, - 169, 1215, 478, 478, 536, 1075, 170, 115, 934, 3, - 4, 5, 6, 54, 94, 561, 563, 660, 722, 982, - 304, 1449, 1232, 1522, 412, 642, 644, 388, 846, 115, - 1102, 476, 597, 577, 1222, 1386, 605, 606, 607, 608, - 609, 610, 611, 612, 613, 614, 615, 291, 687, 641, - 643, 583, 1130, 647, 761, 1357, 199, 750, 767, 20, - 1484, 1498, 258, 389, 999, 291, 351, 440, 637, 1011, - 900, 435, 233, 437, 258, 258, 258, 413, 1317, 258, - 258, 351, 661, 1260, 1204, 801, 6, 803, 1472, 804, - 871, 1518, 508, 357, 1239, 806, 509, 996, 876, 694, - 194, 642, 292, 336, 899, 512, 642, 513, 900, 249, - 642, 1334, 1485, 658, 659, 1335, 957, 770, 655, 671, - 292, 701, 414, 990, 710, 642, 718, 1260, 440, 1155, - 231, 473, 677, 1033, 723, 1035, 1162, 698, 1038, 746, - 1363, 358, 291, 390, 391, 503, 1415, 486, 1358, 478, - 1442, 708, 642, 196, 930, 838, 477, 576, 250, 1067, - 1187, 514, 688, 577, 351, 760, 1018, 194, 194, 769, - 473, 642, 341, 751, 768, 437, 737, 351, 597, 711, - 745, 351, 115, 336, 351, 488, 351, 746, 194, 745, - 441, 351, 351, 489, 752, 754, 351, 911, 351, 351, - 351, 351, 359, 231, 772, 415, 351, 231, 793, 774, - 416, 1373, 417, 1494, 759, 418, 419, 1226, 420, 421, - 94, 1495, 699, 688, 1095, 363, 1097, 1098, 957, 1308, - 980, 487, 787, 771, 957, 561, 563, 577, 291, 991, - 1403, 1404, 812, 1406, 1479, 1480, 490, 1261, 746, 115, - 231, 441, 336, 975, 1425, 807, 807, 1432, 336, 231, - 561, 563, 642, 231, 336, 452, 734, 336, 336, 453, - 258, 1087, 1448, 1088, 115, 826, 735, 828, 932, 194, - 194, 336, 1496, 341, 896, 249, 836, 341, 336, 336, - 115, 1261, 115, 1016, 94, 432, 1470, 115, 249, 813, - 336, 1512, 823, 336, 336, 358, 350, 823, 823, 741, - 832, 786, 1006, 336, 642, 741, 745, 336, 843, 349, - 522, 734, 452, 1164, 245, 859, 453, 478, 246, 351, - 94, 341, 1315, 1262, 250, 349, 363, 363, 363, 1359, - 363, 363, 194, 363, 878, 363, 318, 250, 329, 860, - 1318, 358, 745, 349, 329, 1195, 476, 890, 640, 586, - 844, 1263, 906, 649, 741, 984, 200, 350, 194, 587, - 712, 498, 257, 1103, 641, 541, 861, 1262, 247, 858, - 194, 1316, 640, 350, 1071, 920, 745, 363, 194, 363, - 351, 737, 363, 231, 739, 912, 47, 724, 641, 1319, - 925, 350, 1228, 329, 352, 1263, 351, 350, 197, 640, - 657, 115, 935, 115, 1068, 258, 882, 392, 393, 1273, - 352, 907, 1048, 528, 351, 641, 1264, 926, 1241, 1258, - 351, 194, 1265, 1266, 194, 918, 351, 919, 352, 197, - 755, 414, 1068, 478, 352, 921, 415, 787, 1241, 478, - 800, 416, 823, 417, 883, 1040, 418, 419, 115, 420, - 421, 115, 642, 244, 668, 661, 350, 642, 194, 194, - 1264, 642, 597, 1258, 436, 1241, 1265, 1266, 597, 983, - 823, 661, 745, 662, 350, 1123, 642, 937, 231, 351, - 693, 562, 668, 661, 694, 935, 194, 194, 361, 975, - 935, 668, 935, 352, 931, 935, 935, 351, 935, 935, - 701, 662, 1339, 642, 362, 838, 194, 263, 64, 64, - 94, 1152, 64, 562, 415, 1353, 972, 318, 494, 416, - 194, 417, 642, 677, 418, 419, 650, 420, 421, 1014, - 248, 1017, 570, 404, 1371, 997, 527, 1019, 964, 571, - 361, 839, 1000, 361, 351, 405, 690, 1186, 562, 528, - 318, 572, 1008, 840, 745, 1436, 438, 1048, 802, 908, - 937, 570, 1028, 868, 1052, 937, 529, 937, 571, 318, - 937, 937, 318, 937, 937, 935, 604, 931, 332, 321, - 572, 1029, 931, 478, 931, 321, 1113, 931, 931, 1030, - 931, 931, 322, 621, 622, 823, 588, 823, 1114, 1057, - 823, 94, 762, 360, 575, 727, 589, 757, 500, 728, - 1214, 336, 1047, 336, 500, 757, 862, 1489, 452, 665, - 249, 373, 365, 863, 194, 394, 395, 1275, 665, 677, - 1168, 473, 336, 336, 736, 296, 1305, 297, 509, 396, - 397, 366, 367, 1305, 745, 438, 194, 498, 439, 1054, - 937, 1055, 336, 1056, 1509, 1159, 1160, 270, 270, 664, - 336, 368, 438, 336, 1282, 837, 270, 931, 664, 250, - 522, 774, 369, 1527, 1528, 774, 763, 774, 115, 774, - 763, 787, 763, 280, 763, 280, 823, 575, 823, 823, - 280, 1099, 575, 401, 575, 575, 575, 575, 575, 575, - 575, 575, 575, 575, 575, 341, 753, 753, 753, 341, - 753, 336, 341, 753, 341, 753, 575, 1106, 575, 341, - 575, 758, 575, 575, 575, 758, 879, 400, 478, 758, - 880, 494, 575, 575, 701, 194, 402, 575, 575, 336, - 336, 403, 336, 336, 56, 1131, 745, 787, 575, 575, - 168, 822, 168, 341, 168, 822, 194, 1047, 181, 1142, - 181, 575, 181, 336, 494, 329, 336, 494, 329, 435, - 233, 1172, 1171, 406, 826, 44, 65, 575, 826, 757, - 65, 297, 336, 757, 440, 823, 113, 975, 336, 225, - 437, 1167, 561, 563, 336, 435, 233, 605, 336, 605, - 472, 231, 115, 494, 444, 225, 115, 226, 225, 115, - 228, 336, 447, 1350, 385, 386, 387, 823, 1099, 474, - 1026, 1236, 816, 194, 561, 563, 475, 1350, 113, 1172, - 1171, 335, 113, 115, 1104, 496, 1105, 947, 115, 625, - 626, 627, 628, 336, 497, 1381, 194, 1382, 398, 399, - 1172, 1240, 1257, 977, 518, 977, 329, 329, 362, 561, - 563, 194, 1159, 1160, 823, 194, 765, 156, 765, 156, - 1172, 1240, 163, 115, 163, 523, 1236, 329, 164, 526, - 164, 823, 888, 494, 888, 67, 187, 67, 187, 157, - 115, 157, 1313, 1314, 1289, 338, 1257, 1172, 1240, 341, - 342, 343, 344, 345, 346, 347, 348, 120, 285, 120, - 285, 127, 292, 127, 292, 1342, 949, 950, 1345, 542, - 947, 194, 1135, 1136, 547, 947, 113, 947, 947, 947, - 947, 947, 947, 947, 947, 947, 947, 1310, 501, 194, - 194, 414, 555, 414, 501, 1200, 231, 1499, 1500, 947, - 581, 947, 582, 947, 351, 947, 947, 947, 351, 444, - 524, 524, 414, 414, 642, 642, 623, 624, 329, 329, - 34, 590, 262, 629, 630, 701, 286, 287, 288, 653, - 294, 295, 414, 1147, 1148, 308, 309, 355, 1360, 656, - 414, 672, 315, 414, 317, 692, 321, 585, 695, 697, - 719, 333, 334, 725, 701, 701, 194, 701, 726, 749, - 947, 766, 773, 775, 776, 777, 1416, 778, 701, 796, - 795, 701, 810, 811, 798, 370, 825, 194, 827, 847, - 831, 329, 848, 1443, 438, 194, 701, 850, 851, 854, - 866, 872, 873, 196, 874, 875, 1455, 1457, 881, 42, - 745, 897, 1310, 901, 816, 113, 902, 329, 904, 909, - 701, 913, 494, 914, 922, 928, 944, 939, 946, 329, - 951, 953, 959, 1443, 1443, 960, 963, 329, 962, 1465, - 585, 965, 968, 970, 976, 585, 113, 585, 585, 585, - 585, 585, 585, 585, 585, 585, 585, 585, 988, 989, - 998, 992, 1005, 512, 338, 1012, 1024, 1023, 113, 585, - 33, 585, 745, 585, 1041, 585, 585, 585, 1050, 1037, - 329, 1058, 1064, 329, 1065, 1066, 1074, 1076, 1086, 1096, - 1443, 585, 1090, 1094, 550, 1093, 1112, 1108, 1116, 1115, - 1117, 1121, 478, 478, 1124, 1118, 1134, 1120, 1138, 745, - 1150, 1137, 1180, 1163, 1145, 1194, 1170, 329, 329, 1514, - 1514, 1197, 1202, 1210, 1199, 315, 1523, 1523, 370, 1205, - 585, 597, 597, 1213, 1214, 550, 1218, 1223, 1224, 1225, - 1271, 1231, 1227, 1277, 1279, 329, 329, 616, 617, 618, - 1276, 1274, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 1286, 516, - 1291, 374, 1312, 1320, 1333, 194, 1348, 1355, 1365, 1337, - 1367, 1338, 1347, 1356, 532, 1370, 1368, 34, 1372, 1376, - 1378, 34, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 34, 1374, 1379, 1384, 1358, 34, 1389, 1392, - 1395, 34, 1399, 1396, 34, 1397, 1426, 1437, 1407, 1408, - 1485, 113, 1411, 1421, 1428, 1440, 34, 34, 1438, 1441, - 1447, 34, 34, 505, 194, 1451, 1450, 34, 1461, 34, - 34, 34, 34, 1462, 1464, 1475, 1466, 34, 1469, 1467, - 1481, 34, 194, 34, 1482, 1486, 1490, 1493, 1491, 1501, - 1484, 329, 1529, 34, 1507, 34, 34, 1508, 34, 1530, - 1531, 9, 34, 973, 550, 537, 858, 495, 606, 965, - 496, 676, 452, 329, 29, 607, 21, 453, 113, 494, - 29, 336, 34, 313, 30, 520, 208, 96, 34, 34, - 30, 767, 664, 866, 768, 329, 759, 194, 194, 827, - 791, 760, 828, 113, 792, 194, 829, 317, 687, 831, - 343, 664, 642, 194, 194, 642, 194, 33, 564, 53, - 123, 33, 1330, 105, 288, 130, 230, 124, 106, 289, - 131, 21, 33, 797, 1330, 1280, 194, 33, 1042, 194, - 958, 33, 1140, 1288, 33, 1492, 1141, 1330, 709, 1483, - 1452, 856, 1439, 1468, 1434, 1327, 33, 33, 985, 986, - 981, 33, 33, 869, 987, 1340, 1330, 33, 1525, 33, - 33, 33, 33, 1287, 1362, 1284, 1463, 33, 1458, 1517, - 1516, 33, 1219, 33, 329, 1456, 1383, 1331, 954, 753, - 763, 1220, 1004, 33, 592, 33, 33, 809, 33, 933, - 860, 564, 33, 889, 1077, 329, 564, 299, 564, 564, - 564, 564, 564, 564, 564, 564, 564, 564, 564, 887, - 553, 631, 33, 632, 635, 865, 633, 1207, 636, 33, - 564, 634, 564, 927, 564, 1292, 564, 564, 564, 780, - 113, 1211, 113, 1158, 564, 564, 564, 564, 408, 1070, - 1119, 564, 564, 1132, 1059, 1089, 564, 564, 564, 564, - 564, 564, 564, 564, 1191, 1125, 651, 1021, 756, 1127, - 835, 652, 329, 1290, 1196, 564, 956, 955, 0, 505, - 0, 0, 0, 0, 505, 505, 0, 113, 0, 0, - 113, 564, 0, 0, 0, 329, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 505, 0, 0, - 329, 0, 0, 0, 329, 0, 0, 0, 0, 0, - 505, 505, 0, 0, 0, 505, 0, 0, 505, 0, - 505, 0, 505, 505, 505, 505, 0, 0, 0, 0, - 505, 0, 0, 0, 505, 0, 0, 0, 505, 0, - 0, 0, 0, 0, 0, 0, 505, 0, 0, 505, - 0, 505, 505, 0, 0, 0, 0, 505, 0, 505, - 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, - 0, 0, 0, 0, 0, 505, 505, 0, 329, 329, - 505, 505, 0, 505, 505, 505, 505, 505, 505, 505, - 0, 505, 505, 0, 505, 505, 505, 505, 505, 505, - 505, 505, 505, 505, 0, 505, 505, 505, 505, 505, - 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, - 505, 505, 505, 505, 505, 505, 505, 32, 0, 505, - 0, 505, 0, 505, 0, 0, 505, 550, 0, 0, - 0, 0, 505, 0, 0, 329, 860, 860, 0, 0, - 0, 0, 0, 0, 860, 860, 860, 860, 860, 0, - 860, 860, 0, 860, 860, 860, 860, 860, 860, 860, - 860, 0, 0, 0, 329, 860, 0, 860, 860, 860, - 860, 860, 860, 0, 0, 860, 0, 0, 0, 860, - 860, 0, 860, 860, 860, 0, 0, 0, 0, 0, - 0, 0, 581, 0, 860, 0, 860, 113, 860, 860, - 0, 0, 860, 0, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, 860, 0, 860, 0, 0, - 860, 860, 0, 0, 860, 860, 0, 0, 0, 0, - 0, 0, 785, 0, 0, 0, 0, 0, 0, 860, - 860, 860, 860, 860, 0, 0, 0, 860, 860, 0, - 0, 860, 0, 0, 0, 0, 860, 860, 860, 860, - 860, 0, 0, 0, 860, 0, 860, 0, 0, 0, - 0, 0, 860, 860, 0, 581, 0, 0, 0, 0, - 581, 0, 581, 581, 581, 581, 581, 581, 581, 581, - 581, 581, 581, 0, 0, 0, 0, 860, 860, 860, - 860, 0, 860, 0, 581, 0, 581, 0, 581, 860, - 581, 581, 581, 0, 0, 0, 0, 0, 0, 0, - 0, 113, 0, 0, 0, 113, 581, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 581, 581, 0, 0, - 0, 0, 0, 0, 329, 0, 0, 0, 0, 581, - 0, 0, 113, 0, 0, 0, 0, 113, 336, 0, - 0, 0, 0, 0, 0, 581, 0, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 32, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 113, 0, 32, 0, 0, 0, 32, 0, - 0, 32, 0, 329, 0, 0, 0, 0, 0, 113, - 0, 0, 0, 32, 32, 0, 0, 0, 32, 32, - 0, 329, 0, 0, 32, 0, 32, 32, 32, 32, + 741, 189, 233, 111, 518, 18, 43, 234, 433, 472, + 690, 155, 521, 156, 494, 747, 451, 436, 577, 432, + 476, 292, 538, 192, 786, 562, 115, 319, 257, 712, + 406, 514, 576, 830, 831, 549, 601, 1028, 502, 1150, + 325, 330, 326, 331, 251, 337, 885, 794, 886, 311, + 800, 258, 1185, 1186, 904, 303, 364, 959, 372, 310, + 335, 14, 544, 356, 629, 312, 924, 314, 115, 782, + 1280, 673, 115, 363, 943, 371, 190, 340, 1033, 485, + 20, 683, 316, 1079, 160, 797, 161, 1287, 1, 1061, + 162, 1063, 259, 916, 818, 1080, 918, 674, 318, 717, + 487, 946, 1174, 1217, 1345, 791, 820, 985, 488, 528, + 229, 350, 403, 351, 1080, 163, 1157, 1002, 507, 1481, + 1482, 197, 508, 587, 404, 408, 755, 801, 1011, 675, + 288, 1144, 47, 588, 351, 231, 846, 510, 289, 109, + 233, 164, 476, 111, 639, 434, 290, 792, 47, 436, + 1223, 155, 197, 156, 440, 441, 349, 943, 165, 1473, + 1174, 489, 943, 486, 943, 166, 115, 943, 943, 660, + 943, 943, 167, 168, 196, 816, 1514, 1216, 925, 169, + 629, 436, 629, 450, 946, 797, 586, 170, 434, 946, + 2, 946, 943, 1021, 946, 946, 761, 946, 946, 1234, + 477, 291, 336, 1387, 350, 1033, 290, 935, 872, 472, + 1353, 481, 260, 819, 735, 720, 482, 451, 577, 946, + 739, 895, 887, 15, 160, 290, 161, 351, 448, 475, + 162, 821, 576, 676, 480, 1158, 352, 629, 191, 797, + 577, 352, 492, 684, 6, 562, 1455, 943, 511, 1081, + 512, 1062, 249, 1064, 257, 163, 3, 4, 5, 6, + 366, 291, 524, 537, 257, 657, 1346, 541, 1081, 1224, + 493, 562, 546, 1479, 946, 497, 499, 490, 1474, 543, + 291, 164, 231, 47, 548, 1489, 442, 1490, 1336, 545, + 525, 1204, 1337, 817, 115, 47, 899, 533, 165, 535, + 691, 250, 534, 497, 513, 166, 568, 16, 722, 536, + 1523, 1093, 167, 168, 959, 551, 552, 1365, 993, 169, + 359, 231, 477, 477, 1076, 1354, 115, 170, 1388, 577, + 584, 721, 1034, 561, 1036, 563, 806, 1039, 1451, 896, + 583, 983, 619, 620, 847, 387, 899, 750, 115, 1103, + 761, 475, 598, 959, 54, 605, 606, 607, 608, 609, + 610, 611, 612, 613, 614, 615, 359, 366, 641, 643, + 642, 644, 647, 1375, 366, 1241, 366, 1131, 366, 249, + 1030, 388, 1500, 1417, 233, 1444, 94, 637, 1031, 434, + 767, 770, 991, 447, 661, 1310, 357, 1359, 1319, 698, + 436, 1012, 1405, 1406, 844, 1408, 1019, 47, 1000, 1205, + 877, 783, 1520, 802, 901, 804, 1427, 805, 746, 1434, + 997, 94, 366, 1096, 723, 1098, 1099, 261, 250, 2, + 1524, 285, 286, 287, 1450, 293, 294, 472, 655, 701, + 307, 308, 20, 710, 358, 718, 845, 315, 1156, 317, + 807, 321, 677, 564, 694, 1163, 333, 334, 1472, 577, + 900, 389, 390, 751, 901, 959, 746, 476, 477, 502, + 708, 959, 784, 576, 686, 349, 472, 931, 687, 1188, + 370, 892, 839, 711, 699, 760, 42, 48, 231, 769, + 1360, 1068, 352, 349, 813, 737, 231, 598, 231, 745, + 115, 6, 436, 658, 659, 359, 768, 771, 992, 671, + 565, 1088, 231, 1089, 752, 754, 642, 453, 1486, 687, + 1317, 642, 1165, 350, 772, 642, 342, 746, 793, 774, + 290, 891, 441, 1320, 577, 759, 1228, 290, 860, 688, + 642, 350, 893, 688, 442, 454, 351, 981, 199, 1496, + 349, 814, 787, 561, 1196, 563, 661, 1497, 290, 741, + 352, 734, 861, 437, 351, 741, 438, 642, 115, 1318, + 1487, 194, 413, 976, 453, 352, 808, 808, 352, 561, + 687, 563, 1321, 231, 661, 291, 642, 413, 1104, 862, + 933, 642, 912, 441, 115, 827, 642, 829, 350, 735, + 642, 1230, 454, 352, 688, 442, 837, 352, 897, 352, + 352, 352, 352, 1017, 741, 642, 734, 352, 1498, 1275, + 315, 351, 824, 370, 786, 411, 863, 824, 824, 649, + 833, 200, 245, 864, 1007, 352, 246, 342, 194, 194, + 642, 342, 642, 337, 115, 94, 115, 477, 330, 249, + 521, 115, 1261, 351, 330, 414, 1262, 397, 398, 194, + 415, 642, 416, 515, 879, 417, 418, 803, 419, 420, + 414, 1069, 1263, 391, 392, 415, 475, 416, 412, 532, + 417, 418, 883, 419, 420, 342, 247, 859, 249, 337, + 365, 497, 642, 712, 244, 257, 1261, 1072, 250, 1069, + 1262, 337, 541, 330, 337, 337, 745, 662, 907, 366, + 367, 737, 414, 745, 739, 913, 1263, 415, 337, 416, + 884, 350, 417, 418, 640, 419, 420, 937, 641, 368, + 115, 921, 115, 248, 1049, 662, 1341, 250, 657, 939, + 369, 908, 1243, 1260, 351, 421, 926, 927, 640, 1355, + 194, 194, 641, 745, 1264, 919, 1265, 920, 352, 570, + 431, 869, 1243, 1266, 477, 922, 571, 787, 1373, 262, + 477, 352, 824, 589, 840, 640, 337, 115, 572, 641, + 115, 1267, 337, 590, 1041, 361, 841, 1260, 337, 1243, + 1268, 337, 337, 598, 437, 661, 1114, 838, 1264, 598, + 1265, 824, 650, 745, 318, 337, 1124, 1266, 1115, 225, + 937, 226, 194, 562, 318, 937, 668, 937, 724, 976, + 937, 937, 939, 937, 937, 1267, 984, 939, 350, 939, + 701, 435, 939, 939, 1268, 939, 939, 337, 194, 413, + 745, 350, 1153, 839, 668, 562, 527, 973, 94, 493, + 194, 351, 709, 668, 360, 677, 570, 965, 194, 528, + 1015, 361, 1018, 571, 351, 352, 998, 280, 1020, 280, + 690, 332, 94, 1001, 280, 572, 529, 362, 1187, 1049, + 562, 1361, 352, 1009, 337, 745, 352, 337, 337, 352, + 318, 352, 94, 1029, 753, 361, 352, 933, 1438, 665, + 937, 1215, 194, 693, 321, 194, 399, 694, 665, 342, + 321, 437, 939, 342, 477, 337, 342, 322, 342, 950, + 951, 1053, 414, 342, 318, 364, 824, 415, 824, 416, + 1058, 824, 417, 418, 757, 419, 420, 664, 194, 194, + 393, 394, 757, 1048, 1307, 225, 664, 228, 472, 1160, + 1161, 1307, 44, 451, 395, 396, 400, 342, 1284, 1277, + 1491, 677, 1169, 113, 401, 727, 194, 194, 1055, 728, + 1056, 501, 1057, 361, 337, 745, 337, 501, 497, 753, + 933, 753, 296, 753, 736, 933, 194, 933, 508, 909, + 933, 933, 402, 933, 933, 337, 337, 1511, 405, 168, + 194, 168, 318, 168, 439, 113, 1529, 1530, 115, 113, + 774, 521, 787, 443, 774, 337, 774, 824, 774, 824, + 824, 763, 1100, 337, 758, 763, 337, 763, 758, 763, + 270, 270, 758, 329, 329, 225, 364, 364, 364, 270, + 364, 364, 753, 364, 330, 364, 446, 330, 753, 473, + 753, 1107, 337, 337, 329, 337, 337, 56, 474, 477, + 502, 335, 493, 415, 701, 415, 502, 64, 64, 65, + 933, 64, 295, 65, 296, 880, 1132, 745, 787, 881, + 471, 231, 822, 762, 415, 415, 822, 364, 1048, 364, + 1143, 495, 364, 826, 233, 493, 1172, 826, 493, 434, + 1027, 1173, 817, 113, 415, 194, 181, 757, 181, 496, + 181, 757, 415, 1136, 1137, 415, 824, 1105, 976, 1106, + 233, 561, 1168, 563, 979, 434, 979, 194, 156, 436, + 156, 765, 115, 765, 493, 163, 115, 163, 517, 115, + 625, 626, 627, 628, 522, 329, 329, 542, 824, 1100, + 1160, 1161, 1352, 561, 1172, 563, 1201, 231, 337, 1173, + 384, 385, 386, 115, 337, 164, 1352, 164, 115, 890, + 337, 890, 362, 605, 337, 605, 1242, 1259, 67, 1238, + 67, 1173, 555, 187, 1383, 187, 1384, 337, 561, 157, + 563, 157, 120, 523, 120, 824, 1242, 285, 127, 285, + 127, 1173, 292, 115, 292, 526, 452, 329, 351, 443, + 1501, 1502, 547, 824, 581, 493, 194, 525, 525, 337, + 115, 1259, 351, 1242, 642, 642, 1291, 591, 1173, 453, + 653, 113, 582, 329, 1238, 623, 624, 194, 355, 1148, + 1149, 672, 454, 621, 622, 329, 692, 456, 629, 630, + 1315, 1316, 457, 329, 458, 459, 460, 461, 656, 695, + 719, 697, 462, 113, 725, 726, 463, 749, 773, 1312, + 1325, 766, 775, 1344, 776, 777, 1347, 778, 464, 796, + 795, 465, 338, 466, 798, 113, 341, 342, 343, 344, + 345, 346, 347, 348, 811, 799, 812, 329, 826, 828, + 329, 832, 848, 849, 194, 437, 701, 467, 851, 852, + 855, 42, 867, 873, 874, 196, 875, 876, 882, 902, + 1362, 898, 817, 903, 905, 910, 914, 194, 915, 929, + 923, 945, 947, 329, 329, 701, 701, 940, 701, 952, + 34, 1418, 194, 954, 961, 960, 194, 964, 969, 701, + 971, 966, 701, 977, 963, 989, 359, 990, 1445, 999, + 1006, 329, 329, 1326, 993, 511, 1024, 701, 1013, 1025, + 1038, 1457, 1459, 1042, 1094, 1059, 1065, 1051, 1095, 359, + 1075, 1066, 745, 1077, 1312, 1067, 1087, 1091, 1097, 1109, + 1117, 701, 359, 1113, 493, 1118, 1119, 359, 1445, 1445, + 232, 1116, 359, 194, 359, 359, 359, 359, 1121, 33, + 1122, 1467, 359, 1125, 1135, 1181, 359, 1139, 1138, 1151, + 359, 194, 194, 1146, 373, 1164, 1171, 1198, 359, 1195, + 1203, 359, 1211, 359, 1200, 1206, 1214, 113, 1215, 1218, + 1220, 1225, 585, 1229, 745, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 1445, 1226, 359, 1227, 1233, + 1276, 1273, 1293, 1322, 1278, 1281, 1288, 1335, 1314, 1339, + 1279, 1340, 1357, 1350, 477, 477, 1349, 1367, 329, 1358, + 1369, 745, 1360, 1370, 1372, 1374, 1380, 1376, 194, 1378, + 338, 1516, 1516, 1386, 1381, 1397, 1409, 1394, 1525, 1525, + 329, 1391, 1398, 598, 598, 113, 1401, 1399, 1428, 194, + 1410, 1483, 31, 359, 1413, 1423, 1430, 194, 1442, 1440, + 1443, 550, 329, 1449, 1488, 585, 1439, 1453, 1464, 1452, + 585, 113, 585, 585, 585, 585, 585, 585, 585, 585, + 585, 585, 585, 1463, 1466, 1469, 1471, 1468, 1477, 1484, + 1493, 1492, 1503, 1495, 585, 1487, 585, 1486, 585, 1509, + 585, 585, 585, 1510, 1531, 1532, 1533, 9, 975, 538, + 606, 860, 496, 616, 617, 618, 585, 861, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 967, 497, 453, 34, 607, 29, + 676, 34, 21, 454, 506, 495, 29, 337, 521, 30, + 313, 329, 34, 30, 868, 585, 791, 34, 208, 759, + 767, 34, 768, 96, 34, 827, 760, 828, 792, 664, + 829, 317, 329, 831, 687, 664, 34, 34, 344, 642, + 123, 34, 34, 105, 288, 130, 124, 34, 106, 34, + 34, 34, 34, 289, 131, 642, 230, 34, 53, 21, + 1043, 34, 959, 34, 1290, 1141, 33, 113, 1142, 113, + 33, 1485, 1454, 34, 1282, 34, 34, 857, 34, 1494, + 1470, 33, 34, 1441, 1436, 1329, 33, 870, 986, 987, + 33, 982, 1342, 33, 1527, 988, 1364, 194, 1286, 329, + 550, 1289, 34, 1460, 1458, 33, 33, 1519, 34, 34, + 33, 33, 1465, 1221, 113, 1518, 33, 113, 33, 33, + 33, 33, 329, 1385, 1333, 955, 33, 1005, 1222, 24, + 33, 25, 33, 934, 26, 763, 593, 329, 1078, 27, + 890, 329, 33, 28, 33, 33, 866, 33, 298, 810, + 553, 33, 30, 888, 631, 633, 194, 632, 634, 32, + 780, 635, 928, 636, 33, 1294, 1212, 1208, 34, 31, + 797, 33, 1159, 31, 407, 194, 1071, 1120, 33, 1133, + 36, 1060, 37, 1090, 31, 1128, 38, 32, 1192, 31, + 1126, 1292, 1022, 31, 39, 40, 31, 651, 41, 652, + 836, 322, 1197, 756, 0, 0, 957, 0, 31, 31, + 956, 0, 0, 31, 31, 0, 329, 329, 0, 31, + 0, 31, 31, 31, 31, 0, 0, 290, 0, 31, + 194, 194, 0, 31, 0, 31, 0, 0, 194, 0, + 0, 0, 0, 0, 0, 31, 194, 194, 31, 194, + 31, 0, 0, 0, 31, 1332, 0, 0, 0, 0, + 506, 0, 0, 0, 0, 506, 506, 1332, 0, 194, + 0, 0, 194, 0, 31, 0, 0, 0, 0, 0, + 1332, 31, 323, 329, 0, 0, 0, 0, 506, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1332, + 0, 506, 506, 0, 0, 0, 506, 0, 0, 506, + 0, 506, 329, 506, 506, 506, 506, 0, 0, 0, + 0, 506, 0, 0, 0, 506, 0, 0, 0, 506, + 0, 0, 0, 0, 0, 0, 0, 506, 0, 0, + 506, 0, 506, 506, 0, 113, 0, 0, 506, 0, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 0, 0, 0, 0, 0, 506, 506, 0, 0, + 0, 506, 506, 0, 506, 506, 506, 506, 506, 506, + 506, 862, 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, 0, + 506, 0, 506, 0, 506, 0, 0, 506, 0, 0, + 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 32, 0, + 0, 393, 0, 0, 0, 0, 0, 393, 0, 32, + 0, 0, 0, 0, 32, 0, 0, 0, 32, 113, + 0, 32, 0, 113, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 32, 32, 550, 0, 0, 32, 32, + 0, 0, 329, 393, 32, 0, 32, 32, 32, 32, + 113, 0, 0, 0, 32, 113, 0, 0, 32, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 32, 0, 32, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 329, 329, 0, 32, - 0, 0, 0, 0, 329, 32, 32, 0, 785, 785, - 0, 0, 329, 329, 0, 329, 785, 785, 785, 785, - 785, 0, 785, 785, 742, 785, 785, 785, 785, 785, - 785, 785, 0, 0, 0, 329, 0, 785, 329, 785, - 785, 785, 785, 785, 785, 0, 0, 785, 0, 0, - 0, 785, 785, 0, 785, 785, 785, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 785, 0, 785, 0, - 785, 785, 0, 0, 785, 0, 785, 785, 785, 785, - 785, 785, 785, 785, 785, 785, 785, 785, 0, 785, - 0, 0, 785, 785, 0, 0, 785, 785, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 785, 32, + 0, 329, 0, 0, 0, 32, 32, 113, 330, 0, + 0, 0, 0, 393, 330, 0, 393, 393, 393, 393, + 329, 393, 0, 393, 393, 0, 393, 393, 393, 393, + 393, 0, 393, 393, 393, 393, 0, 393, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, 393, 0, + 0, 0, 0, 330, 0, 393, 0, 0, 393, 0, + 0, 0, 0, 0, 393, 329, 329, 0, 0, 0, + 0, 0, 0, 329, 0, 0, 0, 862, 862, 0, + 0, 329, 329, 0, 329, 862, 862, 862, 862, 862, + 0, 862, 862, 0, 862, 862, 862, 862, 862, 862, + 862, 862, 0, 0, 329, 0, 862, 329, 862, 862, + 862, 862, 862, 862, 337, 0, 862, 0, 0, 0, + 862, 862, 0, 862, 862, 862, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 862, 0, 862, 0, 862, + 862, 0, 0, 862, 0, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 0, 862, 0, + 0, 862, 862, 0, 0, 862, 862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 785, 785, 785, 785, 785, 0, 0, 0, 785, - 785, 0, 0, 785, 0, 0, 0, 0, 785, 785, - 785, 785, 785, 0, 336, 0, 785, 0, 785, 336, - 336, 0, 0, 0, 785, 785, 0, 0, 0, 0, - 0, 0, 0, 0, 329, 0, 0, 0, 0, 0, - 0, 0, 336, 0, 0, 0, 0, 0, 0, 785, - 785, 785, 785, 0, 785, 336, 336, 0, 0, 0, - 336, 785, 0, 336, 0, 336, 0, 336, 336, 336, - 336, 0, 0, 0, 0, 336, 0, 0, 0, 336, - 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, - 0, 336, 0, 0, 336, 0, 336, 336, 0, 0, - 0, 0, 336, 0, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 0, 0, 0, 0, - 336, 336, 0, 0, 0, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 0, 336, 336, 0, 0, - 336, 336, 336, 336, 336, 0, 0, 336, 336, 0, - 0, 0, 336, 336, 336, 336, 336, 336, 336, 336, - 742, 0, 0, 0, 366, 742, 742, 0, 0, 0, - 0, 336, 0, 0, 336, 0, 336, 0, 336, 0, - 0, 336, 0, 0, 0, 0, 0, 336, 742, 0, + 862, 862, 862, 862, 862, 0, 0, 0, 862, 862, + 0, 0, 862, 0, 0, 0, 0, 862, 862, 862, + 862, 862, 0, 0, 0, 862, 0, 862, 0, 0, + 0, 0, 0, 862, 862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 742, 742, 0, 0, 0, 742, 0, 0, 742, - 0, 742, 0, 742, 742, 742, 742, 0, 0, 0, - 0, 742, 0, 0, 0, 742, 0, 0, 0, 742, - 0, 0, 0, 0, 0, 0, 0, 742, 0, 0, - 742, 0, 742, 742, 0, 0, 0, 0, 742, 0, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 0, 0, 0, 0, 0, 742, 742, 336, 0, - 0, 742, 742, 742, 742, 742, 742, 0, 742, 742, - 742, 0, 742, 742, 0, 0, 742, 742, 742, 742, - 329, 0, 0, 742, 742, 329, 329, 0, 742, 742, - 742, 742, 742, 742, 742, 742, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 742, 329, 0, - 742, 0, 742, 0, 742, 0, 0, 742, 0, 0, - 0, 329, 329, 742, 0, 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, 0, 0, 0, 0, 0, 329, 329, 0, 0, - 0, 329, 329, 329, 329, 329, 329, 0, 329, 329, - 329, 0, 329, 329, 361, 0, 329, 329, 329, 329, - 366, 0, 0, 329, 329, 366, 366, 0, 329, 329, - 329, 329, 329, 329, 329, 329, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 329, 366, 0, - 329, 0, 329, 0, 329, 0, 0, 329, 0, 0, - 0, 366, 366, 329, 0, 0, 366, 0, 0, 366, - 0, 366, 0, 366, 366, 366, 366, 0, 0, 0, - 0, 366, 0, 0, 0, 366, 0, 0, 0, 366, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 0, - 366, 0, 366, 366, 0, 0, 0, 0, 366, 0, - 366, 366, 366, 366, 366, 366, 366, 366, 366, 366, - 366, 0, 0, 0, 336, 0, 366, 366, 0, 0, - 336, 366, 366, 0, 366, 366, 366, 0, 366, 366, - 366, 0, 366, 366, 0, 0, 366, 366, 366, 366, - 0, 0, 0, 366, 366, 0, 0, 0, 366, 366, - 366, 366, 366, 366, 366, 366, 336, 0, 0, 0, - 0, 0, 27, 0, 0, 0, 0, 366, 0, 0, - 366, 0, 366, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, - 0, 0, 336, 0, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 0, 0, 587, 0, - 0, 336, 0, 0, 0, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 0, 336, 336, 0, 0, - 336, 336, 336, 336, 336, 27, 0, 336, 336, 0, - 0, 0, 336, 336, 336, 336, 336, 336, 336, 336, - 361, 0, 0, 0, 0, 0, 361, 0, 0, 0, - 0, 336, 0, 0, 336, 0, 336, 0, 336, 0, - 0, 336, 0, 0, 0, 0, 0, 336, 31, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 862, 862, + 862, 862, 0, 862, 785, 785, 0, 0, 0, 0, + 862, 0, 785, 785, 785, 785, 785, 0, 785, 785, + 742, 785, 785, 785, 785, 785, 785, 785, 0, 0, + 0, 0, 0, 785, 0, 785, 785, 785, 785, 785, + 785, 0, 0, 785, 0, 0, 0, 785, 785, 0, + 785, 785, 785, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 785, 0, 785, 0, 785, 785, 0, 0, + 785, 0, 785, 785, 785, 785, 785, 785, 785, 785, + 785, 785, 785, 785, 0, 785, 0, 0, 785, 785, + 0, 0, 785, 785, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 785, 785, 785, + 785, 785, 0, 0, 0, 785, 785, 0, 0, 785, + 0, 0, 0, 0, 785, 785, 785, 785, 785, 0, + 337, 0, 785, 0, 785, 337, 337, 0, 0, 0, + 785, 785, 0, 0, 0, 0, 0, 0, 0, 0, + 330, 0, 0, 0, 0, 0, 0, 0, 337, 0, + 0, 0, 0, 0, 0, 785, 785, 785, 785, 0, + 785, 337, 337, 0, 0, 0, 337, 785, 0, 337, + 0, 337, 0, 337, 337, 337, 337, 0, 0, 0, + 0, 337, 0, 0, 0, 337, 0, 0, 0, 337, + 0, 0, 0, 0, 0, 0, 0, 337, 0, 0, + 337, 0, 337, 337, 0, 0, 0, 0, 337, 0, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 0, 0, 0, 0, 337, 337, 0, 0, + 0, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 0, 337, 337, 0, 0, 337, 337, 337, 337, + 337, 0, 0, 337, 337, 0, 0, 0, 337, 337, + 337, 337, 337, 337, 337, 337, 742, 0, 0, 0, + 367, 742, 742, 0, 0, 0, 0, 337, 0, 0, + 337, 0, 337, 0, 337, 0, 0, 337, 0, 0, + 0, 0, 0, 337, 742, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 742, 742, 0, + 0, 0, 742, 0, 0, 742, 0, 742, 0, 742, + 742, 742, 742, 0, 0, 0, 0, 742, 0, 0, + 0, 742, 0, 0, 0, 742, 0, 0, 0, 0, + 0, 0, 0, 742, 0, 0, 742, 0, 742, 742, + 0, 0, 0, 0, 742, 0, 742, 742, 742, 742, + 742, 742, 742, 742, 742, 742, 742, 0, 0, 0, + 0, 0, 742, 742, 337, 0, 0, 742, 742, 742, + 742, 742, 742, 0, 742, 742, 742, 0, 742, 742, + 0, 0, 742, 742, 742, 742, 330, 0, 0, 742, + 742, 330, 330, 0, 742, 742, 742, 742, 742, 742, + 742, 742, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 742, 330, 0, 742, 0, 742, 0, + 742, 0, 0, 742, 0, 0, 0, 330, 330, 742, + 0, 0, 330, 0, 0, 330, 0, 330, 0, 330, + 330, 330, 330, 0, 0, 0, 0, 330, 0, 0, + 0, 330, 0, 0, 0, 330, 0, 0, 0, 0, + 0, 0, 0, 330, 0, 0, 330, 0, 330, 330, + 0, 0, 0, 0, 330, 0, 330, 330, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 0, 0, 0, + 0, 0, 330, 330, 0, 0, 0, 330, 330, 330, + 330, 330, 330, 0, 330, 330, 330, 0, 330, 330, + 362, 0, 330, 330, 330, 330, 367, 0, 0, 330, + 330, 367, 367, 0, 330, 330, 330, 330, 330, 330, + 330, 330, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 330, 367, 0, 330, 0, 330, 0, + 330, 0, 0, 330, 0, 0, 0, 367, 367, 330, + 0, 0, 367, 0, 0, 367, 0, 367, 0, 367, + 367, 367, 367, 0, 0, 0, 0, 367, 0, 0, + 0, 367, 0, 0, 0, 367, 0, 0, 0, 0, + 0, 0, 0, 367, 0, 0, 367, 0, 367, 367, + 0, 0, 0, 0, 367, 0, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 0, 0, 0, + 337, 0, 367, 367, 0, 0, 337, 367, 367, 0, + 367, 367, 367, 0, 367, 367, 367, 0, 367, 367, + 0, 0, 367, 367, 367, 367, 0, 0, 0, 367, + 367, 0, 0, 0, 367, 367, 367, 367, 367, 367, + 367, 367, 337, 0, 0, 0, 0, 0, 27, 0, + 0, 0, 0, 367, 0, 0, 367, 0, 367, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 587, 361, 0, 0, 0, 587, 0, 587, 587, - 587, 587, 587, 587, 587, 587, 587, 587, 587, 0, + 0, 0, 0, 337, 0, 0, 0, 0, 337, 0, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 0, 0, 587, 0, 0, 337, 0, 0, + 0, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 0, 337, 337, 0, 0, 337, 337, 337, 337, + 337, 27, 0, 337, 337, 0, 0, 0, 337, 337, + 337, 337, 337, 337, 337, 337, 362, 0, 0, 0, + 0, 0, 362, 0, 0, 0, 0, 337, 0, 0, + 337, 0, 337, 0, 337, 0, 0, 337, 0, 0, + 0, 0, 0, 337, 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 587, 362, 0, + 0, 0, 587, 0, 587, 587, 587, 587, 587, 587, + 587, 587, 587, 587, 587, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 587, 957, 587, 0, + 587, 0, 587, 587, 587, 0, 0, 0, 0, 362, + 0, 0, 0, 0, 362, 0, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 0, 0, 0, + 0, 0, 0, 362, 0, 0, 0, 362, 362, 0, + 362, 362, 362, 0, 362, 362, 362, 0, 362, 362, + 0, 0, 362, 362, 362, 362, 0, 587, 0, 362, + 362, 0, 0, 0, 362, 362, 362, 362, 362, 362, + 362, 362, 0, 0, 0, 0, 0, 47, 0, 0, + 0, 0, 0, 362, 27, 27, 362, 0, 362, 27, + 0, 0, 0, 27, 0, 27, 0, 0, 27, 362, + 27, 27, 0, 27, 0, 27, 0, 27, 0, 27, + 27, 27, 27, 0, 0, 27, 27, 0, 0, 0, + 7, 27, 0, 27, 27, 27, 0, 0, 27, 27, + 27, 0, 27, 0, 0, 27, 0, 27, 27, 27, + 27, 0, 0, 0, 27, 27, 27, 0, 0, 27, + 27, 27, 0, 0, 0, 0, 0, 0, 27, 27, + 0, 27, 27, 958, 27, 27, 27, 0, 27, 0, + 27, 0, 27, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 0, 0, 0, 0, 27, 0, + 27, 0, 27, 0, 0, 27, 27, 27, 0, 0, + 0, 0, 0, 0, 0, 27, 48, 27, 27, 0, + 0, 5, 27, 27, 0, 47, 0, 0, 27, 0, + 27, 27, 27, 27, 0, 0, 47, 0, 27, 0, + 0, 47, 27, 0, 27, 47, 0, 0, 47, 0, + 0, 0, 0, 0, 27, 0, 27, 27, 0, 27, + 47, 47, 0, 27, 957, 47, 47, 0, 47, 0, + 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, + 0, 47, 0, 27, 47, 47, 0, 47, 47, 27, + 27, 47, 0, 0, 0, 0, 0, 47, 0, 0, + 47, 0, 47, 47, 47, 0, 47, 0, 47, 47, + 0, 0, 0, 0, 47, 0, 47, 47, 47, 47, + 0, 0, 0, 0, 47, 0, 47, 0, 47, 0, + 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 47, 0, 0, 47, 47, 47, 0, 0, 47, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 0, 0, 47, 0, 0, 0, 47, 47, + 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 47, 0, 0, 7, 47, 47, + 0, 48, 0, 0, 47, 0, 47, 47, 47, 47, + 0, 0, 48, 0, 47, 0, 0, 48, 47, 0, + 47, 48, 0, 0, 48, 0, 0, 0, 0, 0, + 47, 0, 0, 47, 0, 47, 48, 48, 0, 47, + 958, 48, 48, 0, 47, 0, 0, 48, 0, 48, + 48, 48, 48, 0, 0, 47, 0, 48, 0, 47, + 47, 48, 0, 48, 47, 0, 0, 47, 0, 0, + 0, 0, 0, 48, 0, 0, 48, 0, 48, 47, + 47, 0, 48, 48, 47, 47, 0, 48, 0, 0, + 47, 0, 47, 47, 47, 47, 0, 0, 48, 0, + 47, 0, 48, 48, 47, 0, 47, 48, 0, 0, + 48, 0, 0, 0, 0, 0, 47, 0, 0, 47, + 0, 47, 48, 48, 0, 47, 0, 48, 48, 0, + 0, 0, 0, 48, 0, 48, 48, 48, 48, 0, + 0, 0, 0, 48, 0, 47, 0, 48, 0, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, + 0, 55, 48, 0, 48, 0, 0, 0, 48, 56, + 24, 57, 25, 0, 0, 26, 58, 0, 59, 60, + 27, 61, 62, 63, 28, 0, 0, 0, 48, 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, 337, 87, + 88, 0, 0, 0, 337, 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, + 337, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 587, 5, 587, 0, 587, 0, 587, 587, 587, 0, - 0, 0, 0, 361, 0, 0, 0, 0, 361, 0, - 361, 361, 361, 361, 361, 361, 361, 361, 361, 361, - 361, 0, 0, 0, 0, 0, 0, 361, 0, 0, - 0, 361, 361, 0, 361, 361, 361, 0, 361, 361, - 361, 0, 361, 361, 0, 0, 361, 361, 361, 361, - 0, 587, 0, 361, 361, 0, 0, 0, 361, 361, - 361, 361, 361, 361, 361, 361, 0, 0, 0, 0, - 0, 955, 0, 0, 0, 0, 0, 361, 27, 27, - 361, 0, 361, 27, 0, 0, 0, 27, 0, 27, - 0, 0, 27, 361, 27, 27, 0, 27, 0, 27, - 0, 27, 0, 27, 27, 27, 27, 0, 0, 27, - 27, 0, 0, 0, 47, 27, 0, 27, 27, 27, - 0, 0, 27, 27, 27, 0, 27, 0, 0, 27, - 0, 27, 27, 27, 27, 0, 0, 0, 27, 27, - 27, 0, 0, 27, 27, 27, 0, 0, 0, 0, - 0, 0, 27, 27, 0, 27, 27, 7, 27, 27, - 27, 0, 27, 0, 27, 0, 27, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, - 0, 0, 27, 0, 27, 0, 27, 0, 0, 27, - 27, 27, 0, 0, 0, 0, 0, 0, 0, 27, - 956, 27, 27, 0, 0, 31, 27, 27, 0, 31, - 0, 0, 27, 0, 27, 27, 27, 27, 0, 0, - 31, 0, 27, 0, 0, 31, 27, 0, 27, 31, - 0, 0, 31, 0, 0, 0, 0, 0, 27, 0, - 27, 27, 0, 27, 31, 31, 0, 27, 5, 31, - 31, 0, 47, 0, 0, 31, 0, 31, 31, 31, - 31, 0, 0, 47, 0, 31, 0, 27, 47, 31, - 0, 31, 47, 27, 27, 47, 0, 0, 0, 0, - 48, 31, 0, 0, 31, 0, 31, 47, 47, 0, - 31, 0, 47, 47, 0, 0, 0, 0, 47, 0, - 47, 47, 47, 47, 0, 0, 0, 0, 47, 0, - 31, 0, 47, 0, 47, 0, 0, 31, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 47, 955, 47, - 0, 0, 47, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 0, 47, 0, - 0, 0, 47, 47, 0, 47, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, 47, 0, - 0, 47, 47, 47, 0, 47, 0, 0, 47, 0, - 47, 47, 47, 47, 0, 0, 47, 0, 47, 0, - 0, 47, 47, 0, 47, 47, 0, 0, 47, 0, - 0, 0, 0, 0, 47, 0, 0, 47, 0, 47, - 47, 47, 0, 47, 7, 47, 47, 0, 48, 0, - 0, 47, 0, 47, 47, 47, 47, 0, 0, 48, - 0, 47, 0, 47, 48, 47, 0, 47, 48, 0, - 0, 48, 0, 0, 0, 0, 0, 47, 0, 0, - 47, 0, 47, 48, 48, 0, 47, 956, 48, 48, - 0, 47, 0, 0, 48, 0, 48, 48, 48, 48, - 0, 0, 47, 0, 48, 0, 47, 47, 48, 0, - 48, 47, 0, 0, 47, 0, 0, 0, 0, 0, - 48, 0, 0, 48, 0, 48, 47, 47, 0, 48, - 0, 47, 47, 0, 0, 0, 0, 47, 0, 47, - 47, 47, 47, 0, 0, 0, 0, 47, 0, 48, - 0, 47, 0, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 47, 48, 47, 0, - 0, 48, 47, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 0, 0, 48, 0, 0, - 0, 48, 47, 0, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, - 0, 48, 48, 0, 0, 0, 0, 48, 0, 48, - 48, 48, 48, 0, 0, 0, 0, 48, 0, 0, - 0, 48, 0, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 48, 0, 55, 48, 0, 48, 0, - 0, 0, 48, 56, 24, 57, 25, 0, 0, 26, - 58, 0, 59, 60, 27, 61, 62, 63, 28, 0, - 0, 0, 48, 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, 336, 87, 88, 0, 0, 0, 336, 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, 336, 102, 0, 0, 0, 0, - 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 336, 0, - 0, 0, 0, 0, 336, 0, 105, 106, 107, 108, - 0, 0, 0, 0, 0, 336, 0, 0, 196, 0, - 336, 0, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 0, 0, 0, 0, 0, 336, - 336, 0, 0, 0, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 0, 336, 336, 0, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 0, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 0, 507, 0, 0, 336, 0, 336, 507, 0, 336, - 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, - 336, 0, 0, 336, 0, 336, 336, 0, 0, 0, - 336, 336, 0, 0, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 507, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 336, 336, 0, 0, 0, 0, - 0, 0, 336, 0, 0, 336, 0, 0, 0, 0, - 0, 336, 0, 0, 507, 0, 0, 0, 0, 507, - 0, 507, 507, 507, 507, 507, 507, 507, 507, 507, - 507, 507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 507, 507, 507, 507, 507, 507, 507, 507, - 507, 507, 0, 507, 507, 0, 507, 507, 507, 507, - 507, 507, 507, 507, 507, 507, 0, 507, 507, 507, - 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, - 507, 507, 507, 507, 507, 507, 507, 507, 507, 0, - 503, 757, 0, 0, 0, 507, 503, 0, 0, 0, - 24, 0, 25, 0, 507, 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, 503, 0, 0, 33, 0, 0, 0, 34, + 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, + 337, 0, 105, 106, 107, 108, 0, 0, 0, 0, + 0, 337, 0, 0, 196, 0, 337, 0, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 0, 0, 0, 0, 0, 337, 337, 0, 0, 0, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 0, + 337, 337, 0, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 0, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 0, 508, 0, 0, + 337, 0, 337, 508, 0, 337, 0, 0, 0, 0, + 0, 337, 0, 0, 0, 0, 337, 0, 0, 337, + 0, 337, 337, 0, 0, 0, 337, 337, 0, 0, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 508, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 36, 0, 37, 0, 0, 0, 38, 0, 0, - 0, 392, 0, 0, 0, 39, 40, 392, 0, 41, - 0, 0, 758, 503, 0, 0, 0, 0, 503, 0, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 0, 0, 0, 0, 0, 0, 0, 291, 0, - 0, 503, 503, 392, 503, 503, 503, 503, 503, 503, - 503, 0, 503, 503, 0, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 0, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 0, 511, - 0, 0, 0, 323, 503, 511, 0, 503, 0, 0, - 0, 0, 0, 503, 0, 0, 0, 0, 329, 0, - 0, 0, 0, 392, 329, 0, 392, 392, 392, 392, - 0, 392, 0, 392, 392, 0, 392, 392, 392, 392, - 392, 511, 392, 392, 392, 392, 0, 392, 392, 392, - 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, - 392, 392, 392, 392, 392, 392, 392, 392, 392, 0, - 0, 0, 0, 329, 0, 392, 0, 0, 392, 0, - 0, 0, 511, 0, 392, 0, 0, 511, 0, 511, - 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, + 337, 337, 0, 0, 0, 0, 0, 0, 337, 0, + 0, 337, 0, 0, 0, 0, 0, 337, 0, 201, + 508, 0, 0, 0, 0, 508, 0, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 949, 508, + 508, 202, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 0, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 0, 504, 0, 0, 0, + 0, 508, 504, 0, 0, 0, 0, 0, 0, 0, + 508, 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, 504, 0, + 0, 949, 0, 0, 0, 0, 949, 0, 949, 949, + 949, 949, 949, 949, 949, 949, 949, 949, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 511, 0, 511, 511, 511, 511, 511, 511, 511, - 0, 511, 511, 0, 511, 511, 511, 511, 511, 511, - 511, 511, 511, 511, 0, 511, 511, 511, 511, 511, - 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, - 511, 511, 511, 511, 511, 511, 511, 0, 336, 567, - 0, 0, 0, 511, 336, 0, 511, 0, 24, 0, - 25, 0, 511, 26, 0, 0, 0, 0, 27, 0, + 949, 0, 949, 0, 949, 0, 949, 949, 949, 504, + 0, 0, 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, 504, 504, 0, + 504, 504, 504, 504, 504, 504, 504, 0, 504, 504, + 0, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 949, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 0, 512, 757, 0, 0, 0, + 504, 512, 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, 512, 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, 758, 512, 0, + 0, 0, 0, 512, 0, 512, 512, 512, 512, 512, + 512, 512, 512, 512, 512, 512, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 512, 0, 512, + 512, 512, 512, 512, 512, 512, 0, 512, 512, 0, + 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, + 0, 512, 512, 512, 512, 512, 512, 512, 512, 512, + 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, + 512, 512, 512, 0, 337, 567, 0, 0, 323, 512, + 337, 0, 512, 0, 24, 0, 25, 0, 512, 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, 337, 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, 322, 337, 0, 0, + 0, 0, 337, 0, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 337, 0, 337, 337, + 337, 337, 337, 337, 337, 0, 337, 337, 0, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 0, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 0, 437, 906, 0, 0, 355, 337, 437, + 0, 337, 0, 24, 0, 25, 0, 337, 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, 437, 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, 322, 437, 0, 0, 0, + 0, 437, 0, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 437, 0, 437, 437, 437, + 437, 437, 437, 437, 0, 437, 437, 0, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 0, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 437, 0, 337, 0, 0, 0, 355, 437, 337, 1052, + 437, 0, 745, 0, 0, 0, 437, 0, 24, 0, + 25, 0, 0, 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, - 336, 0, 0, 33, 0, 0, 0, 34, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, + 0, 30, 0, 0, 337, 0, 0, 0, 32, 0, + 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, + 745, 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, - 322, 336, 0, 0, 0, 0, 336, 0, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 0, + 322, 0, 0, 0, 0, 543, 0, 0, 0, 0, + 0, 543, 0, 337, 0, 0, 0, 0, 0, 337, + 0, 0, 0, 0, 337, 337, 337, 337, 337, 337, + 337, 745, 337, 0, 337, 337, 0, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 543, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 0, 0, 0, 0, 337, 0, 337, 0, 0, 337, + 0, 355, 0, 0, 0, 337, 0, 0, 543, 0, + 0, 0, 0, 543, 0, 543, 543, 543, 543, 543, + 543, 543, 543, 543, 543, 543, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 543, 0, 543, + 0, 543, 0, 543, 543, 543, 0, 543, 543, 0, + 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, + 358, 0, 0, 543, 543, 543, 543, 543, 543, 543, + 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, + 543, 555, 543, 358, 0, 0, 0, 555, 0, 0, + 0, 0, 0, 0, 0, 0, 358, 0, 543, 0, + 0, 358, 0, 0, 231, 0, 358, 0, 358, 358, + 358, 358, 0, 0, 0, 0, 358, 0, 0, 0, + 358, 0, 0, 555, 358, 0, 0, 0, 0, 0, + 0, 0, 358, 0, 0, 358, 0, 358, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, + 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, + 0, 358, 0, 0, 555, 0, 0, 0, 0, 555, + 0, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 559, 0, 555, 0, 555, 0, 555, 0, 555, + 555, 555, 0, 555, 555, 0, 0, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 0, 358, 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, 559, 559, 559, 559, 559, 559, 559, + 0, 0, 0, 560, 555, 0, 0, 0, 0, 560, + 0, 559, 0, 559, 0, 559, 0, 559, 559, 559, + 0, 559, 559, 0, 0, 559, 559, 559, 559, 0, + 0, 0, 559, 559, 0, 0, 0, 559, 559, 559, + 559, 559, 559, 559, 559, 560, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 336, 0, 336, 336, 336, 336, 336, 336, 336, 0, - 336, 336, 0, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 0, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 0, 436, 905, 0, - 0, 355, 336, 436, 0, 336, 0, 24, 0, 25, - 0, 336, 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, 436, - 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, 322, - 436, 0, 0, 0, 0, 436, 0, 436, 436, 436, - 436, 436, 436, 436, 436, 436, 436, 436, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, - 0, 436, 436, 436, 436, 436, 436, 436, 0, 436, - 436, 0, 436, 436, 436, 436, 436, 436, 436, 436, - 436, 436, 0, 436, 436, 436, 436, 436, 436, 436, - 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, - 436, 436, 436, 436, 436, 0, 395, 0, 358, 0, - 355, 436, 395, 0, 436, 0, 0, 0, 0, 0, - 436, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 358, 0, 0, 0, 395, 358, - 0, 0, 232, 0, 358, 0, 358, 358, 358, 358, - 0, 0, 0, 0, 358, 0, 0, 0, 358, 0, - 0, 336, 358, 0, 0, 0, 0, 336, 0, 0, - 358, 745, 0, 358, 0, 358, 0, 0, 0, 395, - 0, 0, 0, 0, 395, 0, 395, 395, 395, 395, - 395, 395, 395, 395, 395, 395, 395, 0, 0, 358, - 0, 0, 0, 336, 0, 0, 0, 0, 395, 0, - 395, 395, 395, 395, 395, 395, 395, 0, 395, 745, - 0, 395, 395, 395, 395, 395, 395, 395, 395, 395, - 395, 0, 395, 395, 395, 395, 395, 395, 395, 395, - 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, - 395, 395, 395, 395, 0, 358, 0, 0, 0, 0, - 395, 0, 336, 395, 0, 0, 0, 0, 336, 395, - 0, 0, 0, 336, 336, 336, 336, 336, 336, 336, - 745, 336, 0, 336, 336, 0, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 0, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 0, - 542, 0, 501, 336, 0, 336, 542, 0, 336, 0, - 56, 24, 0, 25, 336, 0, 26, 253, 0, 0, - 0, 27, 61, 62, 0, 28, 0, 0, 0, 0, - 0, 64, 0, 0, 30, 0, 0, 0, 0, 0, - 0, 32, 542, 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, 542, 0, 0, 0, 0, 542, 0, - 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, - 542, 0, 0, 0, 0, 89, 90, 91, 255, 0, - 0, 0, 542, 0, 542, 0, 542, 95, 542, 542, - 542, 0, 542, 542, 0, 542, 542, 542, 542, 542, - 542, 542, 542, 542, 542, 357, 0, 0, 542, 542, - 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, - 542, 542, 542, 542, 542, 542, 554, 542, 357, 0, - 0, 0, 554, 105, 502, 0, 0, 0, 0, 0, - 0, 357, 0, 542, 0, 0, 357, 0, 0, 231, - 0, 357, 0, 357, 357, 357, 357, 0, 0, 0, - 0, 357, 0, 0, 0, 357, 0, 0, 554, 357, - 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, - 357, 0, 357, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 558, 0, 0, 0, 0, 0, - 558, 0, 0, 0, 0, 0, 357, 0, 0, 554, - 0, 0, 0, 0, 554, 0, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 558, 0, 554, 0, - 554, 0, 554, 0, 554, 554, 554, 0, 554, 554, - 0, 0, 554, 554, 554, 554, 554, 554, 554, 554, - 554, 0, 357, 0, 554, 554, 554, 554, 554, 554, - 554, 554, 0, 0, 0, 0, 0, 558, 0, 0, - 0, 0, 558, 554, 558, 558, 558, 558, 558, 558, - 558, 558, 558, 558, 558, 0, 0, 0, 561, 554, - 0, 0, 0, 0, 561, 0, 558, 0, 558, 0, - 558, 0, 558, 558, 558, 0, 558, 558, 0, 0, - 558, 558, 558, 558, 0, 0, 0, 558, 558, 0, - 0, 0, 558, 558, 558, 558, 558, 558, 558, 558, - 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 558, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 559, 558, 0, 0, - 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, - 0, 561, 0, 0, 0, 0, 561, 0, 561, 561, - 561, 561, 561, 561, 561, 561, 561, 561, 561, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 559, 0, - 561, 0, 561, 0, 561, 0, 561, 561, 561, 0, - 561, 561, 0, 0, 561, 561, 561, 561, 0, 0, - 0, 561, 561, 201, 0, 0, 561, 561, 561, 561, - 561, 561, 561, 561, 0, 0, 0, 0, 0, 559, - 0, 0, 0, 0, 559, 561, 559, 559, 559, 559, - 559, 559, 559, 559, 559, 559, 559, 0, 0, 0, - 560, 561, 0, 0, 0, 202, 560, 0, 559, 0, - 559, 0, 559, 0, 559, 559, 559, 0, 559, 559, - 0, 0, 559, 559, 559, 559, 0, 0, 0, 559, - 559, 0, 0, 0, 559, 559, 559, 559, 559, 559, - 559, 559, 560, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 559, 0, 203, 204, 205, 206, 0, - 207, 208, 209, 210, 211, 212, 213, 214, 565, 559, - 215, 216, 217, 218, 219, 220, 221, 222, 0, 0, - 0, 0, 0, 560, 0, 0, 0, 0, 560, 0, - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, - 560, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 560, 0, 560, 0, 560, 0, 560, 560, - 560, 0, 560, 560, 0, 0, 560, 560, 560, 560, - 0, 0, 0, 560, 560, 0, 566, 0, 560, 560, - 560, 560, 560, 560, 560, 560, 0, 0, 0, 0, - 0, 565, 0, 0, 0, 0, 565, 560, 565, 565, - 565, 565, 565, 565, 565, 565, 565, 565, 565, 0, - 0, 0, 0, 560, 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, 565, 565, 565, 565, - 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, 0, 0, 0, 566, - 566, 0, 568, 0, 566, 566, 566, 566, 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, 0, 0, 567, 0, 567, 0, - 567, 0, 567, 567, 567, 0, 0, 0, 0, 0, - 567, 567, 567, 567, 0, 0, 0, 567, 567, 0, - 569, 0, 0, 0, 567, 567, 567, 567, 567, 567, - 0, 0, 0, 0, 0, 568, 0, 0, 0, 0, - 568, 567, 568, 568, 568, 568, 568, 568, 568, 568, - 568, 568, 568, 0, 0, 0, 0, 567, 0, 0, - 0, 0, 0, 0, 568, 0, 568, 0, 568, 0, - 568, 568, 568, 0, 0, 0, 0, 0, 568, 568, - 568, 568, 0, 0, 0, 568, 568, 0, 570, 0, - 0, 0, 568, 568, 568, 568, 568, 568, 0, 0, - 0, 0, 0, 569, 0, 0, 0, 0, 569, 568, + 0, 561, 559, 0, 0, 0, 0, 561, 0, 0, + 0, 0, 0, 0, 0, 0, 560, 0, 0, 0, + 0, 560, 0, 560, 560, 560, 560, 560, 560, 560, + 560, 560, 560, 560, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 561, 0, 560, 0, 560, 0, 560, + 0, 560, 560, 560, 0, 560, 560, 0, 0, 560, + 560, 560, 560, 0, 0, 0, 560, 560, 0, 564, + 0, 560, 560, 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, 561, 561, 0, 0, 561, 561, 561, + 561, 0, 0, 0, 561, 561, 0, 565, 0, 561, + 561, 561, 561, 561, 561, 561, 561, 0, 0, 0, + 0, 0, 564, 0, 0, 0, 0, 564, 561, 564, + 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, + 0, 0, 0, 0, 561, 0, 0, 0, 0, 0, + 0, 564, 0, 564, 0, 564, 0, 564, 564, 564, + 0, 0, 0, 0, 0, 564, 564, 564, 564, 0, + 0, 0, 564, 564, 0, 566, 0, 564, 564, 564, + 564, 564, 564, 564, 564, 0, 0, 0, 0, 0, + 565, 0, 0, 0, 0, 565, 564, 565, 565, 565, + 565, 565, 565, 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, 565, 565, 565, 565, 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, 0, 0, 0, 566, 566, + 0, 568, 0, 566, 566, 566, 566, 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, 0, 0, 567, 0, 567, 0, 567, + 0, 567, 567, 567, 0, 0, 0, 0, 0, 567, + 567, 567, 567, 0, 0, 0, 567, 567, 0, 569, + 0, 0, 0, 567, 567, 567, 567, 567, 567, 0, + 0, 0, 0, 0, 568, 0, 0, 0, 0, 568, + 567, 568, 568, 568, 568, 568, 568, 568, 568, 568, + 568, 568, 0, 0, 0, 0, 567, 0, 0, 0, + 0, 0, 0, 568, 0, 568, 0, 568, 0, 568, + 568, 568, 0, 0, 0, 0, 0, 568, 568, 568, + 568, 0, 0, 0, 568, 568, 0, 570, 0, 0, + 0, 568, 568, 568, 568, 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, - 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, 569, 569, 569, 569, - 0, 0, 0, 569, 569, 0, 571, 0, 0, 0, - 569, 569, 569, 569, 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, 570, 570, 570, 570, 0, 0, - 0, 570, 570, 0, 572, 0, 0, 0, 570, 570, - 570, 570, 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, 571, 571, 571, 571, 0, 0, 0, 571, - 571, 0, 573, 0, 0, 0, 571, 571, 571, 571, - 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, 572, 572, 0, 0, 0, 572, 572, 0, - 574, 0, 0, 0, 0, 0, 572, 572, 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, - 573, 573, 0, 0, 0, 573, 573, 0, 576, 0, - 0, 0, 0, 0, 573, 573, 573, 573, 0, 0, - 0, 0, 0, 574, 0, 0, 0, 0, 574, 573, + 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, 569, 569, 569, 569, 0, + 0, 0, 569, 569, 0, 571, 0, 0, 0, 569, + 569, 569, 569, 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, 570, 570, 570, 570, 0, 0, 0, + 570, 570, 0, 572, 0, 0, 0, 570, 570, 570, + 570, 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, 571, 571, 571, 571, 0, 0, 0, 571, 571, + 0, 573, 0, 0, 0, 571, 571, 571, 571, 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, 572, 572, 0, 0, 0, 572, 572, 0, 574, + 0, 0, 0, 0, 0, 572, 572, 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, 573, + 573, 0, 0, 0, 573, 573, 0, 575, 0, 0, + 0, 0, 0, 573, 573, 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, - 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, 574, 574, - 0, 0, 0, 574, 574, 0, 577, 0, 0, 0, - 0, 0, 574, 574, 574, 574, 0, 0, 0, 0, - 0, 576, 0, 0, 0, 0, 576, 574, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 0, - 0, 0, 0, 574, 0, 0, 0, 0, 0, 0, - 576, 0, 576, 0, 576, 0, 576, 576, 576, 0, - 0, 0, 0, 0, 0, 0, 576, 576, 0, 0, - 0, 576, 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, - 0, 0, 0, 0, 0, 577, 0, 0, 0, 577, - 577, 0, 579, 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, 0, 0, 0, 577, - 0, 0, 0, 0, 0, 0, 578, 0, 578, 0, - 578, 0, 578, 578, 578, 0, 0, 0, 0, 0, - 0, 0, 0, 578, 0, 0, 0, 578, 578, 0, - 580, 0, 0, 0, 0, 0, 0, 0, 578, 578, - 0, 0, 0, 0, 0, 579, 0, 0, 0, 0, - 579, 578, 579, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 0, 0, 0, 0, 578, 0, 0, - 0, 0, 0, 0, 579, 0, 579, 0, 579, 0, - 579, 579, 579, 0, 0, 0, 0, 0, 0, 0, - 0, 579, 0, 0, 0, 0, 579, 0, 582, 0, - 0, 0, 0, 0, 0, 0, 579, 579, 0, 0, - 0, 0, 0, 580, 0, 0, 0, 0, 580, 579, - 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, - 580, 0, 0, 0, 0, 579, 0, 0, 0, 0, - 0, 0, 580, 0, 580, 0, 580, 0, 580, 580, - 580, 0, 0, 0, 0, 0, 0, 0, 0, 580, - 0, 0, 0, 0, 580, 0, 583, 0, 0, 0, - 0, 0, 0, 0, 580, 580, 0, 0, 0, 0, - 0, 582, 0, 0, 0, 0, 582, 580, 582, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 0, - 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, - 582, 0, 582, 0, 582, 0, 582, 582, 582, 0, - 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 582, 582, 0, 0, 0, 0, 0, 583, - 0, 0, 0, 0, 583, 582, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 583, 0, 0, 0, - 0, 582, 0, 0, 0, 0, 0, 0, 583, 0, - 583, 0, 583, 0, 583, 583, 583, 0, 0, 0, - 0, 336, 0, 0, 0, 745, 0, 0, 0, 0, - 583, 0, 0, 0, 0, 584, 0, 0, 0, 0, - 584, 583, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 584, 583, 0, 0, 0, 336, 0, 0, - 0, 0, 0, 0, 584, 0, 584, 0, 584, 583, - 584, 584, 584, 745, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 584, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 584, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 584, - 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, - 0, 0, 336, 0, 0, 584, 0, 336, 336, 0, - 336, 0, 336, 0, 745, 336, 0, 336, 336, 0, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 0, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 0, 0, 55, 0, 336, 0, 336, - 0, 0, 336, 56, 24, 57, 25, 0, 336, 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, 573, 0, 0, 0, 0, 0, + 0, 574, 0, 574, 0, 574, 0, 574, 574, 574, + 0, 0, 0, 0, 0, 0, 0, 574, 574, 0, + 0, 0, 574, 574, 0, 576, 0, 0, 0, 0, + 0, 574, 574, 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, 575, 575, 0, 0, 0, + 575, 575, 0, 577, 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, 576, 576, 0, 0, 0, 576, 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, 0, 0, 0, + 0, 0, 577, 0, 0, 0, 577, 577, 0, 579, + 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, 0, 0, 0, 577, 0, 0, 0, + 0, 0, 0, 578, 0, 578, 0, 578, 0, 578, + 578, 578, 0, 0, 0, 0, 0, 0, 0, 0, + 578, 0, 0, 0, 578, 578, 0, 580, 0, 0, + 0, 0, 0, 0, 0, 578, 578, 0, 0, 0, + 0, 0, 579, 0, 0, 0, 0, 579, 578, 579, + 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, + 0, 0, 0, 0, 578, 0, 0, 0, 0, 0, + 0, 579, 0, 579, 0, 579, 0, 579, 579, 579, + 0, 0, 0, 0, 0, 0, 0, 0, 579, 0, + 0, 0, 0, 579, 0, 581, 0, 0, 0, 0, + 0, 0, 0, 579, 579, 0, 0, 0, 0, 0, + 580, 0, 0, 0, 0, 580, 579, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 580, 0, 0, + 0, 0, 579, 0, 0, 0, 0, 0, 0, 580, + 0, 580, 0, 580, 0, 580, 580, 580, 0, 0, + 0, 0, 0, 0, 0, 0, 580, 0, 0, 0, + 0, 580, 0, 582, 0, 0, 0, 0, 0, 0, + 0, 580, 580, 0, 0, 0, 0, 0, 581, 0, + 0, 0, 0, 581, 580, 581, 581, 581, 581, 581, + 581, 581, 581, 581, 581, 581, 0, 0, 0, 0, + 580, 0, 0, 0, 0, 0, 0, 581, 0, 581, + 0, 581, 0, 581, 581, 581, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 581, + 0, 583, 0, 0, 0, 0, 0, 0, 0, 581, + 581, 0, 0, 0, 0, 0, 582, 0, 0, 0, + 0, 582, 581, 582, 582, 582, 582, 582, 582, 582, + 582, 582, 582, 582, 0, 0, 0, 0, 581, 0, + 0, 0, 0, 0, 0, 582, 0, 582, 0, 582, + 0, 582, 582, 582, 0, 0, 0, 584, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 582, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 582, 582, 0, + 0, 0, 0, 0, 583, 0, 0, 0, 0, 583, + 582, 583, 583, 583, 583, 583, 583, 583, 583, 583, + 583, 583, 0, 0, 0, 0, 582, 0, 0, 0, + 0, 0, 0, 583, 0, 583, 0, 583, 0, 583, + 583, 583, 0, 0, 0, 0, 337, 0, 0, 0, + 745, 0, 0, 0, 0, 583, 0, 0, 0, 0, + 584, 0, 0, 0, 0, 584, 583, 584, 584, 584, + 584, 584, 584, 584, 584, 584, 584, 584, 583, 0, + 0, 0, 337, 0, 0, 0, 0, 0, 0, 584, + 0, 584, 0, 584, 583, 584, 584, 584, 745, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 266, 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, 584, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 584, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 584, 0, 0, 0, 0, 0, + 0, 337, 0, 0, 0, 0, 0, 337, 0, 0, + 584, 0, 337, 337, 0, 337, 0, 337, 0, 745, + 337, 0, 337, 337, 0, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 0, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 0, 0, + 55, 0, 337, 0, 337, 0, 0, 337, 56, 24, + 57, 25, 0, 337, 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, 0, 0, 0, 0, 0, 0, 556, - 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, 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, 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, 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, - 0, 0, 0, 0, 0, 0, 952, 0, 0, 0, - 105, 557, 107, 108, 952, 952, 952, 952, 0, 0, - 952, 952, 0, 952, 952, 952, 952, 952, 952, 952, - 0, 0, 0, 0, 0, 952, 0, 952, 952, 952, - 952, 952, 952, 0, 0, 952, 0, 0, 0, 952, - 952, 0, 952, 952, 952, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 952, 0, 952, 0, 952, 952, - 0, 0, 952, 0, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 0, 952, 0, 0, - 952, 952, 0, 0, 952, 952, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 952, - 952, 952, 952, 952, 0, 0, 0, 952, 0, 0, - 0, 952, 0, 0, 0, 0, 952, 952, 952, 952, - 952, 0, 0, 0, 952, 0, 952, 0, 0, 0, - 0, 0, 952, 952, 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, 796, 0, 0, 0, 952, 952, 952, - 952, 796, 796, 796, 796, 0, 0, 796, 796, 0, - 796, 796, 796, 796, 796, 796, 796, 0, 0, 0, - 0, 0, 796, 0, 796, 796, 796, 796, 796, 796, - 0, 0, 796, 0, 0, 0, 796, 796, 0, 796, - 796, 796, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 796, 0, 796, 0, 796, 796, 0, 0, 796, - 0, 796, 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 0, 796, 0, 0, 796, 796, 0, - 0, 796, 796, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 796, 796, 796, 796, - 796, 0, 0, 0, 796, 0, 0, 0, 796, 0, - 0, 0, 0, 796, 796, 796, 796, 796, 0, 0, - 0, 796, 0, 796, 0, 0, 0, 0, 0, 796, - 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 556, 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, 0, - 743, 0, 0, 0, 796, 796, 796, 796, 56, 24, - 0, 25, 0, 0, 26, 253, 0, 1051, 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, 322, 0, - 0, 0, 0, 89, 90, 91, 92, 302, 0, 0, - 0, 518, 744, 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, 954, 0, 0, 0, 105, 557, 107, 108, 954, + 954, 954, 954, 0, 0, 954, 954, 0, 954, 954, + 954, 954, 954, 954, 954, 0, 0, 0, 0, 0, + 954, 0, 954, 954, 954, 954, 954, 954, 0, 0, + 954, 0, 0, 0, 954, 954, 0, 954, 954, 954, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 954, + 0, 954, 0, 954, 954, 0, 0, 954, 0, 954, + 954, 954, 954, 954, 954, 954, 954, 954, 954, 954, + 954, 0, 954, 0, 0, 954, 954, 0, 0, 954, + 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 954, 954, 954, 954, 954, 0, + 0, 0, 954, 0, 0, 0, 954, 0, 0, 0, + 0, 954, 954, 954, 954, 954, 0, 0, 0, 954, + 0, 954, 0, 0, 0, 0, 0, 954, 954, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 931, 0, 0, - 0, 105, 303, 107, 108, 56, 24, 0, 25, 0, - 0, 26, 253, 0, 0, 0, 27, 61, 62, 355, - 28, 0, 0, 174, 0, 174, 64, 0, 174, 30, - 0, 0, 0, 174, 0, 0, 32, 174, 0, 0, - 0, 33, 0, 71, 72, 34, 174, 593, 0, 0, - 0, 0, 0, 174, 594, 0, 0, 36, 174, 37, - 74, 0, 174, 38, 0, 0, 76, 0, 78, 0, - 80, 39, 40, 254, 174, 41, 174, 0, 0, 0, - 174, 0, 595, 0, 0, 87, 88, 0, 174, 174, - 0, 0, 174, 0, 0, 174, 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, - 976, 0, 0, 103, 104, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 796, 0, + 0, 0, 954, 954, 954, 954, 796, 796, 796, 796, + 0, 0, 796, 796, 0, 796, 796, 796, 796, 796, + 796, 796, 0, 0, 0, 0, 0, 796, 0, 796, + 796, 796, 796, 796, 796, 0, 0, 796, 0, 0, + 0, 796, 796, 0, 796, 796, 796, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 796, 0, 796, 0, + 796, 796, 0, 0, 796, 0, 796, 796, 796, 796, + 796, 796, 796, 796, 796, 796, 796, 796, 0, 796, + 0, 0, 796, 796, 0, 0, 796, 796, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 935, 0, 0, 0, 105, 106, - 107, 108, 56, 24, 0, 25, 0, 0, 26, 253, - 0, 0, 0, 27, 61, 62, 174, 28, 0, 0, - 174, 0, 174, 64, 0, 174, 30, 0, 0, 0, - 174, 0, 0, 32, 174, 0, 0, 0, 33, 0, - 71, 72, 34, 174, 0, 0, 0, 0, 0, 0, - 174, 0, 0, 0, 36, 174, 37, 74, 936, 174, - 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, - 254, 174, 41, 174, 0, 0, 0, 174, 0, 86, - 0, 0, 87, 88, 0, 174, 174, 0, 0, 174, - 0, 0, 174, 0, 0, 0, 0, 89, 90, 91, - 92, 302, 0, 0, 0, 518, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 97, 98, 99, 100, 0, - 0, 0, 101, 0, 102, 976, 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, 303, 107, 108, 64, - 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, - 0, 0, 0, 174, 33, 0, 71, 72, 34, 0, + 0, 796, 796, 796, 796, 796, 0, 0, 0, 796, + 0, 0, 0, 796, 0, 0, 0, 0, 796, 796, + 796, 796, 796, 0, 0, 0, 796, 0, 796, 0, + 0, 0, 0, 0, 796, 796, 0, 0, 0, 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, 743, 0, 0, 0, 796, + 796, 796, 796, 56, 24, 0, 25, 0, 0, 26, + 253, 0, 0, 0, 27, 61, 62, 0, 28, 0, + 0, 174, 0, 174, 64, 0, 174, 30, 0, 0, + 0, 174, 0, 0, 32, 174, 0, 0, 0, 33, + 0, 71, 72, 34, 174, 0, 0, 0, 0, 0, + 0, 174, 0, 0, 0, 36, 174, 37, 74, 0, + 174, 38, 0, 0, 76, 0, 78, 0, 80, 39, + 40, 254, 174, 41, 174, 0, 0, 0, 174, 0, + 86, 0, 0, 87, 88, 0, 174, 174, 0, 0, + 174, 0, 0, 174, 0, 0, 0, 0, 89, 90, + 91, 92, 301, 0, 0, 0, 517, 744, 0, 0, + 95, 0, 0, 0, 0, 0, 97, 98, 99, 100, + 0, 0, 0, 101, 0, 102, 0, 0, 978, 0, + 0, 103, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 90, 91, 92, 302, 0, 0, - 0, 729, 1003, 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, 932, 0, 0, 0, 105, 302, 107, 108, + 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, + 0, 27, 61, 62, 174, 28, 0, 0, 174, 0, + 174, 64, 0, 174, 30, 0, 0, 0, 174, 0, + 0, 32, 174, 0, 0, 0, 33, 0, 71, 72, + 34, 174, 594, 0, 0, 0, 0, 0, 174, 595, + 0, 0, 36, 174, 37, 74, 0, 174, 38, 0, + 0, 76, 0, 78, 0, 80, 39, 40, 254, 174, + 41, 174, 0, 0, 0, 174, 0, 596, 0, 0, + 87, 88, 0, 174, 174, 0, 0, 174, 0, 0, + 174, 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, 978, 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, 743, - 0, 105, 730, 107, 108, 0, 0, 56, 24, 0, - 25, 0, 731, 26, 253, 0, 0, 0, 27, 61, - 62, 0, 28, 0, 0, 24, 0, 25, 64, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 936, + 0, 0, 0, 105, 106, 107, 108, 56, 24, 0, + 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, + 62, 174, 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, 936, 34, 38, 0, 0, 76, 0, + 33, 37, 74, 937, 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, 322, 0, 0, - 0, 0, 89, 90, 91, 92, 302, 0, 0, 0, - 518, 0, 0, 0, 95, 0, 0, 0, 0, 0, + 0, 0, 89, 90, 91, 92, 301, 0, 0, 0, + 517, 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, 303, 107, 108, 64, 0, 0, 30, 0, 0, + 105, 302, 107, 108, 64, 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 355, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 37, 74, 0, @@ -10883,7 +10911,7 @@ void case_980() 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, 302, 0, 0, 0, 729, 0, 0, 0, + 91, 92, 301, 0, 0, 0, 729, 1004, 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, @@ -10894,210 +10922,249 @@ void case_980() 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, + 32, 0, 0, 0, 36, 33, 37, 74, 937, 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, 520, 0, 0, 0, 0, 89, 90, 91, - 92, 302, 0, 0, 0, 518, 0, 0, 0, 95, + 0, 0, 519, 0, 0, 0, 0, 89, 90, 91, + 92, 301, 0, 0, 0, 517, 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, - 0, 301, 0, 0, 0, 105, 303, 107, 108, 56, - 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, - 27, 61, 62, 355, 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, 573, - 0, 0, 0, 0, 89, 90, 91, 92, 302, 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, 0, 310, 0, - 0, 0, 105, 303, 107, 108, 56, 24, 0, 25, - 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, - 355, 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, 758, 0, 0, 0, - 0, 89, 90, 91, 92, 302, 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, + 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, 302, 107, 108, 64, + 0, 0, 30, 0, 0, 0, 0, 0, 0, 32, + 0, 0, 0, 355, 33, 0, 71, 72, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 591, 0, 0, 0, 105, - 303, 107, 108, 56, 24, 0, 25, 0, 0, 26, - 253, 0, 0, 0, 27, 61, 62, 355, 28, 0, - 0, 490, 0, 490, 64, 0, 490, 30, 0, 0, - 0, 490, 0, 0, 32, 490, 0, 0, 0, 33, - 0, 71, 72, 34, 490, 0, 0, 0, 0, 0, - 0, 490, 0, 0, 0, 36, 490, 37, 74, 0, - 490, 38, 0, 0, 76, 0, 78, 0, 80, 39, - 40, 254, 490, 41, 490, 0, 0, 0, 490, 0, - 86, 0, 0, 87, 88, 0, 490, 490, 0, 0, - 490, 0, 0, 490, 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, + 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, 822, 0, 0, 0, 105, 106, 107, 108, - 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, - 0, 27, 61, 62, 490, 28, 0, 0, 175, 0, - 175, 64, 0, 175, 30, 0, 0, 0, 175, 0, - 0, 32, 175, 0, 0, 0, 33, 0, 71, 72, - 34, 175, 0, 0, 0, 0, 0, 0, 175, 0, - 0, 0, 36, 175, 37, 74, 0, 175, 38, 0, - 0, 76, 0, 78, 0, 80, 39, 40, 254, 175, - 41, 175, 0, 0, 0, 175, 0, 86, 0, 0, - 87, 88, 0, 175, 175, 0, 0, 175, 0, 0, - 175, 0, 0, 0, 0, 89, 90, 91, 92, 302, - 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, 89, 90, 91, 92, 301, 0, 0, + 0, 729, 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, 0, 0, 0, 1188, - 0, 0, 0, 105, 303, 107, 108, 56, 24, 0, - 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, - 62, 175, 28, 0, 0, 174, 0, 174, 64, 0, - 174, 30, 0, 0, 0, 174, 0, 0, 32, 174, - 0, 0, 0, 33, 0, 71, 72, 34, 174, 0, - 0, 0, 0, 0, 0, 174, 0, 0, 0, 36, - 174, 37, 74, 0, 174, 38, 0, 0, 76, 0, - 78, 0, 80, 39, 40, 254, 174, 41, 174, 0, - 0, 0, 174, 0, 86, 0, 0, 87, 88, 0, - 174, 174, 0, 0, 174, 0, 0, 174, 0, 0, - 0, 0, 89, 90, 91, 92, 302, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 743, + 0, 105, 730, 107, 108, 0, 0, 56, 24, 0, + 25, 0, 731, 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, 573, 0, 0, + 0, 0, 89, 90, 91, 92, 301, 0, 0, 0, + 517, 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, 0, 300, 0, 0, 0, + 105, 302, 107, 108, 56, 24, 0, 25, 0, 0, + 26, 253, 0, 0, 0, 27, 61, 62, 355, 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, 758, 0, 0, 0, 0, 89, + 90, 91, 92, 301, 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, 0, 309, 0, 0, 0, 105, 302, 107, + 108, 56, 24, 0, 25, 0, 0, 26, 253, 0, + 0, 0, 27, 61, 62, 355, 28, 0, 0, 491, + 0, 491, 64, 0, 491, 30, 0, 0, 0, 491, + 0, 0, 32, 491, 0, 0, 0, 33, 0, 71, + 72, 34, 491, 0, 0, 0, 0, 0, 0, 491, + 0, 0, 0, 36, 491, 37, 74, 0, 491, 38, + 0, 0, 76, 0, 78, 0, 80, 39, 40, 254, + 491, 41, 491, 0, 0, 0, 491, 0, 86, 0, + 0, 87, 88, 0, 491, 491, 0, 0, 491, 0, + 0, 491, 0, 0, 0, 0, 89, 90, 91, 92, + 301, 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, 0, + 592, 0, 0, 0, 105, 302, 107, 108, 56, 24, + 0, 25, 0, 0, 26, 253, 0, 0, 0, 27, + 61, 62, 491, 28, 0, 0, 175, 0, 175, 64, + 0, 175, 30, 0, 0, 0, 175, 0, 0, 32, + 175, 0, 0, 0, 33, 0, 71, 72, 34, 175, + 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, + 36, 175, 37, 74, 0, 175, 38, 0, 0, 76, + 0, 78, 0, 80, 39, 40, 254, 175, 41, 175, + 0, 0, 0, 175, 0, 86, 0, 0, 87, 88, + 0, 175, 175, 0, 0, 175, 0, 0, 175, 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, 0, 823, 0, 0, + 0, 105, 106, 107, 108, 56, 24, 0, 25, 0, + 0, 26, 253, 0, 0, 0, 27, 61, 62, 175, + 28, 0, 0, 174, 0, 174, 64, 0, 174, 30, + 0, 0, 0, 174, 0, 0, 32, 174, 0, 0, + 0, 33, 0, 71, 72, 34, 174, 0, 0, 0, + 0, 0, 0, 174, 0, 0, 0, 36, 174, 37, + 74, 0, 174, 38, 0, 0, 76, 0, 78, 0, + 80, 39, 40, 254, 174, 41, 174, 0, 0, 0, + 174, 0, 86, 0, 0, 87, 88, 0, 174, 174, + 0, 0, 174, 0, 0, 174, 0, 0, 0, 0, + 89, 90, 91, 92, 301, 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, 0, 1189, 0, 0, 0, 105, 302, + 107, 108, 56, 24, 0, 25, 0, 0, 26, 253, + 0, 0, 0, 27, 61, 62, 174, 28, 0, 0, + 184, 0, 184, 64, 0, 184, 30, 0, 0, 0, + 184, 0, 0, 32, 184, 0, 0, 0, 33, 0, + 71, 72, 34, 184, 0, 0, 0, 0, 0, 0, + 184, 0, 0, 0, 36, 184, 37, 74, 0, 184, + 38, 0, 0, 76, 0, 78, 0, 80, 39, 40, + 254, 184, 41, 184, 0, 0, 0, 184, 0, 86, + 0, 0, 87, 88, 0, 184, 184, 0, 0, 184, + 0, 0, 184, 0, 0, 0, 0, 89, 90, 91, + 92, 301, 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, + 0, 610, 0, 0, 0, 105, 302, 107, 108, 610, + 610, 0, 610, 0, 0, 610, 610, 0, 0, 0, + 610, 610, 610, 184, 610, 0, 0, 0, 0, 0, + 610, 0, 0, 610, 0, 0, 0, 0, 0, 0, + 610, 0, 0, 0, 0, 610, 0, 610, 610, 610, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 0, 610, 610, 0, 0, 610, 0, 0, + 610, 0, 610, 0, 610, 610, 610, 610, 0, 610, + 0, 0, 0, 0, 0, 0, 610, 0, 0, 610, + 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 610, 610, 610, 610, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, - 105, 303, 107, 108, 610, 610, 0, 610, 0, 0, - 610, 610, 0, 0, 0, 610, 610, 610, 174, 610, - 0, 0, 0, 0, 0, 610, 0, 0, 610, 0, - 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, - 610, 0, 610, 610, 610, 0, 0, 0, 0, 0, - 0, 0, 336, 0, 0, 0, 610, 0, 610, 610, - 0, 0, 610, 0, 0, 610, 0, 610, 0, 610, - 610, 610, 610, 0, 610, 0, 0, 0, 0, 0, - 0, 610, 0, 0, 610, 610, 0, 0, 336, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, - 610, 610, 610, 610, 0, 0, 0, 0, 0, 0, - 0, 610, 0, 0, 0, 0, 0, 610, 610, 610, - 610, 0, 0, 0, 610, 0, 610, 0, 0, 0, - 0, 0, 610, 610, 0, 0, 0, 0, 0, 0, + 0, 0, 610, 610, 610, 610, 0, 0, 0, 610, + 0, 610, 0, 0, 0, 0, 0, 610, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 610, 610, 610, - 610, 336, 336, 336, 336, 745, 0, 0, 336, 336, - 0, 0, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 0, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, - 336, 336, 336, 336, 0, 48, 0, 48, 0, 48, - 336, 48, 0, 336, 48, 0, 48, 48, 0, 48, - 0, 48, 0, 48, 0, 48, 48, 48, 48, 0, - 0, 48, 48, 0, 0, 0, 0, 48, 48, 48, - 48, 48, 0, 0, 48, 0, 48, 0, 48, 0, - 48, 48, 0, 48, 48, 48, 48, 0, 0, 48, - 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, 500, 0, + 0, 0, 610, 610, 610, 610, 56, 24, 0, 25, + 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, + 0, 28, 0, 0, 0, 0, 0, 64, 0, 0, + 30, 0, 0, 0, 27, 0, 0, 32, 0, 0, + 0, 337, 33, 0, 71, 72, 34, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 36, 0, + 37, 74, 0, 0, 38, 0, 0, 76, 0, 78, + 27, 80, 39, 40, 254, 27, 41, 337, 0, 0, + 27, 0, 27, 27, 27, 27, 0, 0, 27, 0, + 27, 0, 0, 0, 27, 0, 0, 0, 0, 0, + 0, 89, 90, 91, 255, 0, 27, 0, 0, 27, + 0, 27, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 0, 48, 48, - 47, 0, 0, 0, 47, 0, 47, 0, 0, 47, - 0, 47, 47, 0, 47, 0, 47, 0, 47, 0, - 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, - 0, 0, 47, 0, 47, 47, 47, 0, 0, 47, - 0, 47, 0, 47, 0, 0, 47, 0, 47, 47, - 47, 47, 48, 0, 0, 47, 47, 47, 0, 0, - 47, 47, 47, 0, 0, 0, 0, 0, 0, 47, - 47, 0, 47, 47, 0, 47, 47, 47, 0, 0, - 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 0, 47, 0, 47, 0, 47, 0, 80, 47, 0, - 47, 47, 0, 47, 0, 47, 47, 47, 0, 47, + 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, + 0, 27, 27, 0, 0, 0, 0, 0, 0, 0, + 337, 337, 337, 337, 745, 0, 0, 337, 337, 105, + 501, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 0, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, + 337, 337, 337, 0, 48, 0, 48, 0, 48, 337, + 48, 0, 337, 48, 0, 48, 48, 0, 48, 0, + 48, 0, 48, 0, 48, 48, 48, 48, 0, 0, + 48, 48, 0, 0, 0, 0, 48, 48, 48, 48, + 48, 0, 0, 48, 0, 48, 0, 48, 0, 48, + 48, 0, 48, 48, 48, 48, 0, 0, 48, 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, 0, 0, 48, 0, 48, 48, 47, + 0, 0, 0, 47, 0, 47, 0, 0, 47, 0, + 47, 47, 0, 47, 0, 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 0, 0, 47, 0, 47, 47, 47, 0, 0, 47, 0, 47, 0, 47, 0, 0, 47, 0, 47, 47, 47, - 47, 0, 0, 0, 47, 47, 47, 47, 0, 47, + 47, 48, 0, 0, 47, 47, 47, 0, 0, 47, 47, 47, 0, 0, 0, 0, 0, 0, 47, 47, 0, 47, 47, 0, 47, 47, 47, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, - 47, 0, 48, 0, 48, 0, 81, 48, 0, 48, - 48, 0, 48, 0, 48, 47, 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, 47, 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, 47, 0, 0, 0, 47, 0, - 47, 0, 0, 47, 0, 47, 47, 0, 47, 48, - 47, 0, 47, 0, 47, 47, 47, 47, 0, 0, - 47, 47, 0, 0, 48, 0, 47, 0, 47, 47, - 47, 0, 0, 47, 0, 47, 0, 47, 0, 0, - 47, 0, 47, 47, 47, 47, 0, 0, 0, 47, - 47, 47, 0, 0, 47, 47, 47, 0, 0, 0, - 0, 0, 0, 47, 47, 48, 47, 47, 0, 47, - 47, 47, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 47, 0, 47, 47, 0, 47, 0, 47, - 47, 214, 47, 0, 47, 0, 47, 0, 47, 47, + 47, 0, 47, 0, 47, 0, 80, 47, 0, 47, + 47, 0, 47, 0, 47, 47, 47, 0, 47, 47, 47, 47, 0, 0, 47, 47, 0, 0, 0, 0, 47, 0, 47, 47, 47, 0, 0, 47, 0, 47, - 336, 47, 0, 0, 47, 0, 47, 47, 47, 47, - 0, 0, 0, 47, 47, 47, 0, 0, 47, 47, - 47, 47, 0, 336, 0, 0, 0, 47, 47, 0, - 47, 47, 0, 47, 47, 47, 336, 0, 0, 47, - 0, 336, 0, 0, 336, 0, 336, 0, 336, 336, - 336, 336, 0, 0, 0, 0, 336, 0, 0, 47, - 336, 0, 0, 0, 336, 215, 0, 0, 453, 0, - 0, 0, 336, 0, 0, 336, 0, 336, 0, 0, + 0, 47, 0, 0, 47, 0, 47, 47, 47, 47, + 0, 0, 0, 47, 47, 47, 47, 0, 47, 47, + 47, 0, 0, 0, 0, 0, 0, 47, 47, 0, + 47, 47, 0, 47, 47, 47, 0, 0, 0, 47, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 48, 0, 47, + 0, 48, 0, 48, 0, 81, 48, 0, 48, 48, + 0, 48, 0, 48, 47, 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, 47, 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, 47, 0, 0, 0, 47, 0, 47, + 0, 0, 47, 0, 47, 47, 0, 47, 48, 47, + 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, + 47, 0, 0, 48, 0, 47, 0, 47, 47, 47, + 0, 0, 47, 0, 47, 0, 47, 0, 0, 47, + 0, 47, 47, 47, 47, 0, 0, 0, 47, 47, + 47, 0, 0, 47, 47, 47, 0, 0, 0, 0, + 0, 0, 47, 47, 48, 47, 47, 0, 47, 47, + 47, 0, 0, 0, 47, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 47, 0, 0, + 0, 47, 0, 47, 47, 0, 47, 0, 47, 47, + 214, 47, 0, 47, 0, 47, 0, 47, 47, 47, + 47, 0, 0, 47, 47, 0, 0, 0, 0, 47, + 0, 47, 47, 47, 0, 0, 47, 0, 47, 337, + 47, 0, 0, 47, 0, 47, 47, 47, 47, 0, + 0, 0, 47, 47, 47, 0, 0, 47, 47, 47, + 47, 0, 337, 0, 0, 0, 47, 47, 0, 47, + 47, 452, 47, 47, 47, 337, 0, 0, 47, 0, + 337, 0, 0, 337, 0, 337, 0, 337, 337, 337, + 337, 0, 0, 0, 453, 337, 0, 0, 47, 337, + 0, 0, 0, 337, 215, 0, 0, 454, 0, 0, + 0, 337, 456, 0, 337, 0, 337, 457, 0, 458, + 459, 460, 461, 0, 0, 0, 0, 462, 0, 0, + 0, 463, 0, 0, 0, 337, 0, 0, 0, 0, + 337, 0, 0, 464, 0, 0, 465, 337, 466, 265, + 0, 337, 0, 0, 47, 56, 24, 0, 25, 0, + 0, 26, 253, 0, 337, 0, 27, 61, 62, 0, + 28, 0, 467, 0, 0, 0, 64, 0, 0, 30, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 33, 0, 71, 72, 34, 337, 594, 0, 0, + 0, 0, 0, 0, 595, 0, 0, 36, 0, 37, + 74, 0, 0, 38, 0, 0, 76, 0, 78, 0, + 80, 39, 40, 254, 0, 41, 0, 0, 1340, 0, + 0, 0, 596, 0, 0, 87, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 454, 0, 0, 0, 0, 336, 0, 453, 0, - 0, 336, 0, 0, 455, 0, 0, 0, 336, 457, - 265, 0, 336, 0, 458, 47, 459, 460, 461, 462, - 0, 454, 0, 0, 463, 336, 0, 0, 464, 0, - 0, 0, 1323, 0, 455, 0, 0, 0, 0, 457, - 465, 0, 0, 466, 458, 467, 459, 460, 461, 462, - 0, 0, 0, 0, 463, 0, 0, 336, 464, 0, - 0, 0, 0, 0, 0, 56, 24, 0, 25, 468, - 465, 26, 253, 466, 0, 467, 27, 61, 62, 0, - 28, 0, 0, 0, 0, 0, 64, 0, 0, 30, - 0, 0, 0, 0, 0, 0, 32, 0, 0, 468, - 0, 33, 0, 71, 72, 34, 0, 593, 0, 0, - 0, 0, 0, 0, 594, 0, 0, 36, 0, 37, - 74, 0, 0, 38, 0, 1324, 76, 0, 78, 0, - 80, 39, 40, 254, 0, 41, 0, 0, 0, 0, - 0, 0, 595, 0, 0, 87, 88, 0, 0, 0, - 0, 0, 0, 0, 0, 1338, 0, 0, 0, 0, 89, 90, 91, 92, 93, 0, 0, 0, 0, 0, - 0, 0, 95, 929, 0, 596, 0, 0, 97, 98, + 0, 0, 95, 930, 0, 597, 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, 593, 0, 0, 0, 0, 0, 0, - 594, 0, 0, 36, 0, 37, 74, 0, 0, 38, + 72, 34, 0, 594, 0, 0, 0, 0, 0, 0, + 595, 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, 595, 0, + 0, 41, 0, 0, 0, 0, 0, 0, 596, 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, 596, 0, 0, 97, 98, 99, 100, 0, 0, + 0, 597, 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, @@ -11109,13 +11176,13 @@ void case_980() 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, 302, 0, 0, 0, + 0, 0, 89, 90, 91, 92, 301, 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, 303, 107, 108, 64, 0, 0, 30, 0, 0, + 105, 302, 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, @@ -11123,12 +11190,12 @@ void case_980() 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, 302, 0, 0, 0, 0, 888, 0, 0, + 91, 92, 301, 0, 0, 0, 0, 889, 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, 303, 107, 108, + 27, 61, 62, 0, 28, 0, 105, 302, 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, @@ -11136,13 +11203,13 @@ void case_980() 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, 302, 0, - 0, 0, 518, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 0, 0, 89, 90, 91, 92, 301, 0, + 0, 0, 517, 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, 303, 107, 108, 64, 0, 0, 30, + 28, 0, 105, 302, 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, @@ -11150,12 +11217,12 @@ void case_980() 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, 302, 0, 0, 0, 512, 0, + 89, 90, 91, 92, 301, 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, 303, + 0, 0, 27, 61, 62, 0, 28, 0, 105, 302, 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, @@ -11164,12 +11231,12 @@ void case_980() 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, - 302, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 301, 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, 303, 107, 108, 64, 0, + 62, 0, 28, 0, 105, 302, 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, @@ -11196,7 +11263,7 @@ void case_980() 0, 0, 0, 101, 0, 102, 0, 0, 0, 0, 0, 103, 104, 0, 0, 0, 0, 0, 0, 77, 77, 0, 77, 0, 0, 77, 77, 0, 0, 0, - 77, 77, 77, 0, 77, 0, 105, 1043, 107, 108, + 77, 77, 77, 0, 77, 0, 105, 1044, 107, 108, 77, 0, 0, 77, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 77, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -11225,14 +11292,14 @@ void case_980() 0, 56, 24, 0, 25, 0, 0, 26, 253, 0, 0, 0, 27, 61, 62, 0, 28, 0, 135, 135, 135, 135, 64, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 32, 0, 27, 0, 0, 33, 0, 71, + 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, 27, 0, + 27, 0, 27, 27, 27, 27, 0, 0, 0, 0, 27, 0, 0, 0, 27, 0, 89, 90, 91, 255, - 302, 0, 0, 0, 0, 0, 27, 0, 95, 27, + 301, 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, @@ -11252,12 +11319,12 @@ void case_980() 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, 643, 1233, 0, 0, 27, 0, + 25, 0, 0, 26, 643, 1235, 0, 0, 27, 0, 0, 0, 28, 89, 90, 91, 255, 0, 0, 0, 0, 30, 642, 0, 642, 95, 0, 642, 32, 642, - 642, 0, 642, 33, 642, 1234, 642, 34, 642, 642, + 642, 0, 642, 33, 642, 1236, 642, 34, 642, 642, 642, 0, 0, 0, 642, 642, 0, 0, 0, 36, - 642, 37, 642, 642, 0, 38, 1235, 642, 0, 0, + 642, 37, 642, 642, 0, 38, 1237, 642, 0, 0, 0, 642, 0, 39, 40, 0, 0, 41, 0, 0, 322, 105, 256, 642, 0, 642, 0, 0, 0, 642, 642, 0, 0, 0, 0, 0, 0, 642, 642, 0, @@ -11269,24 +11336,24 @@ void case_980() 0, 642, 0, 642, 0, 0, 0, 642, 642, 0, 0, 355, 0, 0, 0, 642, 642, 0, 0, 642, 0, 0, 642, 0, 24, 0, 25, 642, 0, 26, - 0, 0, 1293, 0, 27, 642, 686, 0, 28, 0, - 687, 1294, 1295, 0, 0, 0, 1296, 30, 0, 0, - 0, 0, 1297, 0, 32, 0, 24, 0, 25, 33, - 0, 26, 0, 34, 1293, 0, 27, 0, 686, 0, - 28, 0, 687, 1294, 1295, 36, 0, 37, 1296, 30, - 0, 38, 0, 0, 1297, 0, 32, 0, 0, 39, - 40, 33, 0, 41, 0, 34, 1298, 0, 0, 0, - 47, 1299, 47, 642, 0, 47, 0, 36, 0, 37, + 0, 0, 1295, 0, 27, 642, 686, 0, 28, 0, + 687, 1296, 1297, 0, 0, 0, 1298, 30, 0, 0, + 0, 0, 1299, 0, 32, 0, 24, 0, 25, 33, + 0, 26, 0, 34, 1295, 0, 27, 0, 686, 0, + 28, 0, 687, 1296, 1297, 36, 0, 37, 1298, 30, + 0, 38, 0, 0, 1299, 0, 32, 0, 0, 39, + 40, 33, 0, 41, 0, 34, 1300, 0, 0, 0, + 47, 1301, 47, 642, 0, 47, 0, 36, 0, 37, 47, 0, 0, 38, 47, 0, 0, 0, 0, 0, - 0, 39, 40, 47, 0, 41, 0, 0, 1298, 0, - 47, 0, 47, 1299, 47, 47, 1300, 47, 0, 47, + 0, 39, 40, 47, 0, 41, 0, 0, 1300, 0, + 47, 0, 47, 1301, 47, 47, 1302, 47, 0, 47, 0, 47, 47, 47, 0, 0, 47, 0, 47, 0, 0, 47, 0, 47, 0, 47, 0, 47, 0, 0, 47, 0, 47, 0, 0, 47, 47, 47, 0, 47, - 0, 47, 47, 47, 0, 47, 48, 1301, 48, 0, + 0, 47, 47, 47, 0, 47, 48, 1303, 48, 0, 47, 48, 0, 47, 0, 47, 48, 0, 0, 47, 48, 0, 47, 0, 0, 0, 0, 47, 47, 48, - 0, 47, 0, 0, 47, 0, 48, 154, 47, 1301, + 0, 47, 0, 0, 47, 0, 48, 154, 47, 1303, 47, 48, 0, 47, 0, 48, 0, 48, 47, 48, 0, 0, 47, 0, 48, 0, 0, 48, 0, 48, 0, 47, 0, 48, 0, 0, 48, 154, 47, 0, @@ -11299,922 +11366,875 @@ void case_980() 571, 0, 26, 36, 0, 37, 0, 27, 0, 38, 0, 28, 572, 0, 0, 29, 0, 39, 40, 0, 30, 41, 0, 0, 573, 31, 0, 32, 0, 48, - 0, 0, 33, 0, 0, 0, 34, 35, 0, 0, - 0, 24, 0, 25, 0, 0, 26, 0, 36, 0, - 37, 27, 0, 0, 38, 28, 0, 0, 0, 0, - 0, 47, 39, 40, 30, 184, 41, 184, 0, 0, - 184, 32, 0, 0, 0, 184, 33, 0, 0, 184, - 34, 0, 0, 0, 0, 0, 0, 0, 184, 0, - 0, 0, 36, 0, 37, 184, 0, 0, 38, 0, - 184, 0, 0, 0, 184, 574, 39, 40, 0, 0, - 41, 0, 33, 322, 0, 0, 184, 0, 184, 0, - 0, 0, 184, 33, 0, 0, 0, 0, 33, 0, - 184, 184, 33, 0, 184, 33, 0, 184, 0, 291, - 0, 0, 0, 0, 0, 0, 0, 33, 33, 0, - 42, 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, 323, 31, 31, 0, 27, 0, - 27, 31, 0, 31, 31, 31, 31, 0, 0, 0, - 0, 31, 0, 33, 0, 31, 0, 31, 184, 33, - 33, 27, 0, 0, 0, 0, 0, 31, 0, 0, - 31, 0, 31, 0, 27, 0, 31, 0, 0, 27, - 0, 47, 0, 0, 27, 0, 27, 27, 27, 27, - 0, 0, 47, 0, 27, 0, 31, 47, 27, 0, - 0, 47, 31, 31, 47, 0, 0, 0, 0, 0, - 27, 0, 0, 27, 0, 27, 47, 47, 0, 0, - 0, 47, 47, 0, 47, 0, 0, 47, 0, 47, - 47, 47, 47, 0, 0, 47, 0, 47, 0, 27, - 47, 47, 0, 47, 47, 27, 27, 47, 0, 0, - 0, 0, 0, 47, 0, 0, 47, 0, 47, 47, - 47, 0, 47, 0, 47, 47, 47, 0, 0, 0, - 47, 0, 47, 47, 47, 47, 0, 0, 0, 0, - 47, 0, 47, 0, 47, 0, 47, 0, 35, 47, - 0, 0, 0, 0, 0, 0, 47, 0, 0, 47, - 0, 47, 47, 0, 47, 47, 0, 47, 0, 0, - 0, 0, 47, 0, 47, 47, 47, 47, 0, 0, - 0, 0, 47, 0, 0, 47, 47, 47, 0, 0, - 0, 36, 0, 0, 0, 0, 0, 0, 47, 0, - 47, 47, 47, 47, 0, 47, 0, 0, 0, 0, - 47, 0, 47, 47, 47, 47, 0, 0, 0, 0, - 47, 0, 0, 0, 47, 47, 0, 47, 0, 47, - 47, 0, 0, 196, 0, 0, 47, 0, 47, 47, - 47, 47, 47, 47, 0, 0, 0, 0, 47, 0, - 47, 47, 47, 47, 0, 0, 47, 0, 47, 0, - 0, 0, 47, 47, 0, 47, 0, 47, 47, 0, - 0, 198, 0, 0, 47, 0, 47, 47, 47, 47, - 0, 47, 0, 0, 0, 0, 47, 0, 47, 47, - 47, 47, 0, 0, 0, 0, 47, 0, 0, 0, - 47, 47, 0, 47, 0, 0, 0, 0, 47, 299, - 47, 0, 47, 0, 47, 47, 0, 47, 0, 47, - 0, 0, 0, 0, 47, 0, 47, 47, 47, 47, - 0, 47, 0, 0, 47, 0, 0, 0, 47, 0, - 0, 47, 0, 0, 47, 0, 0, 300, 453, 47, - 47, 0, 0, 47, 47, 47, 47, 47, 47, 47, - 0, 0, 47, 0, 47, 0, 0, 0, 47, 0, - 0, 454, 0, 0, 0, 0, 0, 0, 453, 47, - 47, 47, 47, 47, 455, 47, 0, 0, 456, 457, - 0, 0, 0, 0, 458, 0, 459, 460, 461, 462, - 0, 454, 0, 0, 463, 0, 0, 0, 464, 47, - 0, 0, 0, 0, 455, 0, 0, 0, 0, 457, - 465, 0, 0, 466, 458, 467, 459, 460, 461, 462, - 0, 0, 0, 0, 463, 0, 0, 0, 464, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, - 465, 0, 0, 466, 0, 467, 0, 0, 0, 0, + 0, 0, 33, 0, 0, 33, 34, 35, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 36, 0, + 37, 33, 0, 0, 38, 33, 0, 0, 33, 0, + 0, 47, 39, 40, 0, 0, 41, 0, 0, 0, + 33, 33, 0, 0, 0, 33, 33, 0, 0, 0, + 0, 33, 0, 33, 33, 33, 33, 0, 0, 0, + 0, 33, 0, 0, 0, 33, 0, 33, 0, 0, + 0, 0, 0, 0, 0, 574, 0, 33, 0, 33, + 33, 31, 33, 0, 0, 0, 33, 0, 0, 0, + 0, 0, 31, 0, 0, 0, 0, 31, 0, 0, + 0, 31, 0, 0, 31, 0, 33, 0, 0, 0, + 0, 0, 33, 33, 0, 0, 31, 31, 0, 0, + 42, 31, 31, 0, 47, 0, 0, 31, 0, 31, + 31, 31, 31, 0, 0, 47, 0, 31, 0, 0, + 47, 31, 0, 31, 47, 0, 0, 47, 0, 0, + 0, 0, 0, 31, 0, 0, 31, 0, 31, 47, + 47, 0, 31, 0, 47, 47, 0, 47, 0, 0, + 47, 0, 47, 47, 47, 47, 0, 0, 47, 0, + 47, 0, 31, 47, 47, 0, 47, 47, 31, 31, + 47, 0, 0, 0, 0, 0, 47, 0, 0, 47, + 0, 47, 47, 47, 0, 47, 0, 47, 47, 47, + 0, 0, 0, 47, 0, 47, 47, 47, 47, 0, + 0, 0, 0, 47, 0, 47, 0, 47, 0, 47, + 0, 35, 47, 0, 0, 0, 0, 0, 0, 47, + 0, 0, 47, 0, 47, 47, 0, 47, 47, 0, + 47, 0, 0, 0, 0, 47, 0, 47, 47, 47, + 47, 0, 0, 0, 0, 47, 0, 0, 47, 47, + 47, 0, 0, 0, 36, 0, 0, 0, 0, 0, + 0, 47, 0, 47, 47, 47, 47, 0, 47, 0, + 0, 0, 0, 47, 0, 47, 47, 47, 47, 0, + 0, 0, 0, 47, 0, 0, 0, 47, 47, 0, + 47, 0, 47, 47, 0, 0, 196, 0, 0, 47, + 0, 47, 47, 47, 47, 47, 47, 0, 0, 0, + 0, 47, 0, 47, 47, 47, 47, 0, 0, 47, + 0, 47, 0, 0, 0, 47, 47, 0, 47, 0, + 47, 47, 0, 0, 198, 0, 0, 47, 0, 47, + 47, 47, 47, 0, 47, 0, 0, 0, 0, 47, + 0, 47, 47, 47, 47, 0, 0, 0, 0, 47, + 0, 0, 0, 47, 47, 0, 47, 0, 0, 0, + 0, 47, 299, 47, 0, 47, 0, 47, 47, 0, + 47, 0, 47, 0, 0, 0, 0, 47, 0, 47, + 47, 47, 47, 0, 47, 0, 0, 47, 0, 0, + 0, 47, 0, 0, 47, 0, 0, 47, 0, 0, + 300, 452, 47, 47, 0, 0, 47, 47, 47, 47, + 47, 47, 47, 0, 0, 47, 0, 47, 0, 0, + 0, 47, 0, 0, 453, 0, 0, 0, 0, 0, + 0, 452, 47, 47, 47, 47, 47, 454, 47, 0, + 0, 455, 456, 0, 0, 0, 0, 457, 0, 458, + 459, 460, 461, 0, 453, 0, 0, 462, 0, 0, + 0, 463, 47, 0, 0, 0, 0, 454, 0, 0, + 0, 0, 456, 464, 0, 0, 465, 457, 466, 458, + 459, 460, 461, 0, 0, 0, 0, 462, 0, 0, + 0, 463, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 467, 464, 0, 0, 465, 0, 466, 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, 468, + 0, 0, 467, }; protected static readonly short [] yyCheck = { 17, - 516, 18, 4, 17, 300, 518, 299, 189, 51, 51, - 191, 188, 232, 17, 17, 289, 87, 88, 6, 470, - 84, 68, 20, 234, 339, 59, 157, 17, 492, 247, - 321, 298, 559, 332, 370, 296, 354, 108, 936, 47, - 87, 88, 354, 1112, 58, 92, 576, 0, 721, 113, - 723, 115, 1147, 1148, 268, 73, 748, 584, 113, 77, - 115, 328, 781, 256, 256, 79, 59, 81, 59, 59, - 1240, 277, 256, 63, 368, 281, 256, 95, 17, 17, - 368, 256, 941, 256, 268, 256, 256, 1257, 256, 256, - 77, 256, 256, 256, 1224, 768, 256, 335, 771, 368, - 372, 17, 93, 1198, 294, 256, 97, 98, 99, 100, - 101, 102, 103, 104, 256, 256, 306, 17, 282, 1144, - 374, 268, 890, 256, 418, 172, 17, 17, 199, 200, - 17, 256, 268, 901, 357, 665, 342, 257, 1268, 157, - 276, 429, 323, 157, 411, 0, 189, 189, 358, 0, - 314, 369, 17, 157, 157, 645, 646, 429, 17, 339, - 429, 256, 416, 386, 344, 256, 346, 157, 343, 349, - 350, 339, 352, 353, 355, 325, 344, 1202, 346, 360, - 17, 349, 350, 256, 352, 353, 17, 256, 339, 232, - 232, 262, 363, 344, 374, 346, 363, 256, 349, 350, - 247, 352, 353, 370, 256, 372, 374, 374, 422, 1068, - 375, 724, 259, 512, 434, 223, 391, 288, 157, 157, - 532, 368, 515, 256, 435, 418, 418, 363, 418, 247, - 256, 372, 374, 374, 252, 256, 554, 308, 422, 414, - 228, 157, 554, 376, 559, 418, 1416, 418, 418, 429, - 375, 418, 286, 428, 418, 418, 320, 157, 418, 440, - 324, 429, 296, 358, 576, 329, 157, 157, 418, 584, - 157, 289, 256, 1443, 329, 422, 294, 295, 429, 326, - 351, 277, 418, 374, 331, 1455, 256, 1457, 429, 256, - 1107, 309, 157, 286, 475, 286, 286, 315, 157, 317, - 790, 256, 316, 321, 257, 296, 1025, 368, 381, 257, - 256, 302, 381, 372, 256, 333, 334, 388, 389, 371, - 157, 1197, 369, 370, 317, 998, 157, 317, 818, 424, - 425, 426, 427, 418, 367, 339, 339, 256, 256, 869, - 358, 1410, 1218, 376, 376, 416, 417, 262, 666, 339, - 1042, 369, 370, 665, 375, 381, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 363, 429, 416, - 417, 358, 1091, 420, 686, 325, 305, 256, 256, 335, - 263, 1476, 373, 298, 368, 363, 256, 368, 406, 902, - 374, 434, 434, 574, 385, 386, 387, 429, 1296, 390, - 391, 256, 444, 1224, 374, 586, 257, 588, 375, 590, - 256, 1506, 370, 266, 256, 370, 374, 881, 709, 374, - 20, 272, 418, 419, 370, 367, 277, 369, 374, 371, - 281, 1307, 315, 441, 442, 1311, 256, 256, 436, 447, - 418, 484, 256, 256, 491, 296, 493, 1268, 429, 1122, - 369, 662, 450, 943, 372, 945, 1129, 256, 948, 266, - 1336, 314, 363, 378, 379, 726, 256, 256, 418, 516, - 256, 485, 323, 429, 810, 656, 694, 795, 420, 992, - 1153, 423, 368, 795, 339, 532, 912, 87, 88, 536, - 701, 342, 256, 372, 372, 676, 514, 367, 516, 492, - 518, 371, 492, 373, 374, 368, 376, 314, 108, 294, - 368, 381, 367, 376, 528, 529, 371, 418, 373, 374, - 375, 376, 375, 369, 542, 339, 381, 369, 575, 547, - 344, 1348, 346, 256, 532, 349, 350, 1210, 352, 353, - 367, 264, 341, 429, 1034, 256, 1036, 1037, 368, 376, - 868, 340, 566, 372, 374, 559, 559, 869, 363, 372, - 1377, 1378, 372, 1380, 1445, 1446, 429, 1224, 375, 559, - 369, 429, 357, 866, 1391, 593, 594, 1394, 363, 369, - 584, 584, 263, 369, 369, 372, 363, 372, 373, 372, - 581, 1017, 1409, 1019, 584, 642, 895, 644, 816, 199, - 200, 386, 325, 367, 735, 371, 653, 371, 357, 373, - 374, 1268, 376, 418, 367, 429, 1433, 381, 371, 429, - 369, 1502, 640, 372, 373, 372, 391, 645, 646, 363, - 648, 1158, 899, 418, 315, 369, 421, 386, 374, 343, - 936, 418, 429, 1133, 369, 272, 429, 694, 373, 414, - 367, 415, 256, 1224, 420, 343, 367, 368, 369, 376, - 371, 372, 262, 374, 711, 376, 368, 420, 363, 296, - 256, 418, 421, 343, 369, 1165, 694, 381, 272, 418, - 416, 1224, 753, 256, 418, 341, 305, 391, 288, 428, - 1154, 709, 726, 381, 272, 759, 323, 1268, 423, 687, - 300, 305, 296, 391, 995, 776, 724, 418, 308, 420, - 414, 729, 423, 369, 1007, 762, 418, 381, 296, 305, - 791, 391, 1212, 418, 428, 1268, 414, 391, 21, 323, - 911, 721, 256, 723, 993, 726, 256, 394, 395, 1229, - 428, 755, 960, 269, 414, 323, 1224, 794, 1223, 1224, - 414, 351, 1224, 1224, 354, 773, 414, 775, 428, 52, - 286, 256, 1021, 810, 428, 779, 339, 781, 1243, 816, - 428, 344, 790, 346, 294, 952, 349, 350, 768, 352, - 353, 771, 272, 376, 339, 339, 391, 277, 388, 389, - 1268, 281, 810, 1268, 381, 1270, 1268, 1268, 816, 870, - 818, 843, 820, 339, 391, 1079, 296, 256, 369, 414, - 370, 1126, 367, 367, 374, 339, 416, 417, 357, 1112, - 344, 376, 346, 428, 256, 349, 350, 414, 352, 353, - 873, 367, 1314, 323, 373, 1016, 436, 371, 370, 371, - 367, 1115, 374, 1158, 339, 1327, 864, 386, 866, 344, - 450, 346, 342, 851, 349, 350, 429, 352, 353, 906, - 376, 908, 306, 401, 1346, 883, 256, 914, 856, 313, - 357, 294, 890, 357, 414, 413, 1327, 1151, 1193, 269, - 386, 325, 900, 306, 902, 1398, 373, 1105, 428, 373, - 339, 306, 939, 308, 965, 344, 286, 346, 313, 386, - 349, 350, 386, 352, 353, 429, 373, 339, 371, 368, - 325, 368, 344, 960, 346, 374, 369, 349, 350, 376, - 352, 353, 381, 390, 391, 943, 418, 945, 381, 976, - 948, 367, 532, 418, 256, 370, 428, 368, 368, 374, - 376, 371, 960, 373, 374, 376, 306, 1460, 1168, 367, - 371, 379, 373, 313, 554, 382, 383, 1231, 376, 957, - 1142, 1172, 392, 393, 370, 367, 1278, 369, 374, 396, - 397, 392, 393, 1285, 992, 373, 576, 995, 376, 967, - 429, 969, 412, 971, 1497, 367, 368, 367, 368, 367, - 420, 412, 373, 423, 376, 376, 376, 429, 376, 420, - 1296, 368, 423, 1519, 1520, 372, 368, 374, 998, 376, - 372, 1025, 374, 374, 376, 376, 1034, 339, 1036, 1037, - 381, 1039, 344, 389, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 367, 372, 368, 374, 371, - 376, 373, 374, 374, 376, 376, 368, 1049, 370, 381, - 372, 368, 374, 375, 376, 372, 372, 384, 1105, 376, - 376, 1079, 384, 385, 1107, 665, 385, 389, 390, 370, - 371, 400, 373, 374, 375, 1093, 1094, 1091, 400, 401, - 370, 372, 372, 415, 374, 376, 686, 1105, 370, 1106, - 372, 413, 374, 373, 1112, 369, 376, 1115, 372, 1142, - 1142, 1144, 1144, 390, 372, 6, 370, 429, 376, 372, - 374, 369, 357, 376, 418, 1133, 17, 1410, 363, 371, - 1301, 1139, 1126, 1126, 369, 1168, 1168, 372, 373, 374, - 368, 369, 1122, 1151, 415, 371, 1126, 373, 371, 1129, - 373, 386, 418, 1324, 386, 387, 388, 1165, 1166, 256, - 372, 1222, 374, 753, 1158, 1158, 418, 1338, 59, 1202, - 1202, 277, 63, 1153, 372, 376, 374, 256, 1158, 394, - 395, 396, 397, 418, 376, 1356, 776, 1358, 398, 399, - 1223, 1223, 1224, 370, 367, 372, 87, 88, 373, 1193, - 1193, 791, 367, 368, 1212, 795, 374, 370, 376, 372, - 1243, 1243, 370, 1193, 372, 376, 1277, 108, 370, 376, - 372, 1229, 372, 1231, 374, 372, 370, 374, 372, 370, - 1210, 372, 1293, 1294, 1271, 93, 1268, 1270, 1270, 97, - 98, 99, 100, 101, 102, 103, 104, 374, 374, 376, - 376, 374, 374, 376, 376, 1316, 354, 355, 1319, 294, - 339, 851, 354, 355, 294, 344, 157, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 1281, 368, 869, - 870, 371, 343, 373, 374, 368, 369, 364, 365, 368, - 372, 370, 376, 372, 414, 374, 375, 376, 414, 415, - 372, 373, 392, 393, 364, 365, 392, 393, 199, 200, - 0, 418, 61, 398, 399, 1348, 65, 66, 67, 356, - 69, 70, 412, 1110, 1111, 74, 75, 418, 1332, 418, - 420, 369, 81, 423, 83, 375, 85, 256, 372, 372, - 376, 90, 91, 368, 1377, 1378, 936, 1380, 374, 372, - 429, 372, 294, 294, 374, 372, 1388, 372, 1391, 372, - 374, 1394, 371, 256, 376, 114, 294, 957, 294, 372, - 381, 262, 374, 1405, 373, 965, 1409, 375, 374, 373, - 381, 372, 374, 429, 374, 374, 1418, 1419, 374, 418, - 1398, 423, 1396, 372, 374, 286, 374, 288, 367, 421, - 1433, 372, 1410, 373, 372, 343, 294, 374, 294, 300, - 374, 418, 370, 1445, 1446, 371, 367, 308, 418, 1427, - 339, 375, 256, 256, 374, 344, 317, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 256, 256, - 280, 381, 256, 367, 302, 368, 343, 372, 339, 368, - 0, 370, 1460, 372, 370, 374, 375, 376, 371, 351, - 351, 376, 374, 354, 374, 376, 372, 370, 372, 347, - 1502, 390, 372, 381, 332, 423, 381, 367, 256, 381, - 256, 376, 1519, 1520, 368, 372, 347, 372, 370, 1497, - 370, 374, 339, 370, 375, 348, 372, 388, 389, 1503, - 1504, 368, 374, 372, 418, 254, 1510, 1511, 257, 418, - 429, 1519, 1520, 348, 376, 373, 368, 367, 367, 367, - 356, 381, 368, 374, 368, 416, 417, 385, 386, 387, - 371, 376, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 368, 298, - 372, 381, 368, 337, 305, 1145, 371, 369, 367, 418, - 371, 418, 418, 418, 313, 371, 376, 257, 371, 373, - 371, 261, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 272, 381, 367, 371, 418, 277, 381, 369, - 371, 281, 374, 372, 284, 372, 256, 418, 373, 373, - 315, 492, 374, 374, 374, 372, 296, 297, 376, 372, - 370, 301, 302, 0, 1204, 376, 418, 307, 418, 309, - 310, 311, 312, 376, 372, 381, 418, 317, 372, 376, - 367, 321, 1222, 323, 372, 368, 381, 372, 370, 368, - 263, 532, 368, 333, 371, 335, 336, 371, 338, 372, - 372, 0, 342, 0, 512, 367, 376, 368, 372, 0, - 368, 418, 372, 554, 370, 372, 367, 372, 559, 368, - 368, 373, 362, 367, 370, 372, 418, 418, 368, 369, - 368, 376, 367, 372, 376, 576, 372, 1277, 1278, 376, - 368, 372, 376, 584, 368, 1285, 372, 368, 368, 372, - 367, 376, 315, 1293, 1294, 263, 1296, 257, 256, 12, - 376, 261, 1302, 376, 376, 376, 50, 376, 376, 376, - 376, 5, 272, 581, 1314, 1243, 1316, 277, 957, 1319, - 851, 281, 1105, 1270, 284, 1466, 1105, 1327, 487, 1450, - 1413, 686, 1401, 1430, 1396, 1302, 296, 297, 873, 873, - 868, 301, 302, 700, 873, 1314, 1346, 307, 1511, 309, - 310, 311, 312, 1268, 1333, 1256, 1423, 317, 1419, 1505, - 1504, 321, 1202, 323, 665, 1418, 1358, 1302, 843, 528, - 532, 1204, 895, 333, 369, 335, 336, 594, 338, 816, - 0, 339, 342, 729, 1007, 686, 344, 71, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 726, - 335, 400, 362, 401, 404, 694, 402, 1182, 405, 369, - 368, 403, 370, 795, 372, 1277, 374, 375, 376, 554, - 721, 1193, 723, 1126, 382, 383, 384, 385, 157, 994, - 1070, 389, 390, 1094, 978, 1021, 394, 395, 396, 397, - 398, 399, 400, 401, 1154, 1082, 425, 916, 530, 1084, - 651, 425, 753, 1273, 1166, 413, 849, 848, -1, 256, - -1, -1, -1, -1, 261, 262, -1, 768, -1, -1, - 771, 429, -1, -1, -1, 776, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 284, -1, -1, - 791, -1, -1, -1, 795, -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, - -1, -1, -1, -1, -1, 362, 363, -1, 869, 870, - 367, 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, 0, -1, 416, - -1, 418, -1, 420, -1, -1, 423, 895, -1, -1, - -1, -1, 429, -1, -1, 936, 256, 257, -1, -1, - -1, -1, -1, -1, 264, 265, 266, 267, 268, -1, - 270, 271, -1, 273, 274, 275, 276, 277, 278, 279, - 280, -1, -1, -1, 965, 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, 256, -1, 314, -1, 316, 998, 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, 0, -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, 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, -1, -1, -1, -1, -1, -1, -1, - -1, 1122, -1, -1, -1, 1126, 390, -1, 1129, -1, - -1, -1, -1, -1, -1, -1, 400, 401, -1, -1, - -1, -1, -1, -1, 1145, -1, -1, -1, -1, 413, - -1, -1, 1153, -1, -1, -1, -1, 1158, 0, -1, - -1, -1, -1, -1, -1, 429, -1, -1, -1, -1, + 515, 18, 51, 17, 298, 4, 6, 51, 189, 234, + 469, 17, 299, 17, 288, 517, 232, 191, 354, 188, + 247, 68, 321, 20, 559, 339, 17, 84, 59, 491, + 157, 297, 354, 645, 646, 332, 370, 937, 295, 1113, + 87, 88, 87, 88, 58, 92, 721, 576, 723, 77, + 585, 59, 1148, 1149, 748, 73, 113, 0, 115, 77, + 277, 256, 328, 108, 256, 79, 781, 81, 59, 256, + 1242, 256, 63, 113, 256, 115, 256, 95, 942, 256, + 335, 256, 368, 256, 17, 268, 17, 1259, 256, 256, + 17, 256, 256, 768, 256, 268, 771, 282, 368, 256, + 368, 256, 1145, 1199, 256, 374, 256, 341, 376, 269, + 47, 391, 401, 414, 268, 17, 256, 891, 370, 1447, + 1448, 21, 374, 418, 413, 172, 286, 428, 902, 314, + 268, 1108, 418, 428, 414, 369, 665, 256, 276, 157, + 189, 17, 369, 157, 410, 189, 363, 416, 418, 323, + 256, 157, 52, 157, 199, 200, 343, 339, 17, 256, + 1203, 429, 344, 340, 346, 17, 157, 349, 350, 256, + 352, 353, 17, 17, 429, 256, 1504, 1198, 790, 17, + 372, 355, 374, 232, 339, 368, 360, 17, 232, 344, + 358, 346, 374, 256, 349, 350, 532, 352, 353, 1220, + 247, 418, 419, 256, 391, 1069, 363, 819, 256, 434, + 256, 258, 376, 375, 511, 256, 261, 433, 554, 374, + 514, 256, 724, 418, 157, 363, 157, 414, 228, 247, + 157, 381, 554, 418, 252, 375, 0, 429, 418, 422, + 576, 428, 287, 418, 0, 559, 1418, 429, 367, 422, + 369, 418, 371, 418, 285, 157, 424, 425, 426, 427, + 256, 418, 307, 320, 295, 439, 418, 324, 422, 375, + 288, 585, 329, 1445, 429, 293, 294, 285, 375, 326, + 418, 157, 369, 294, 331, 1457, 223, 1459, 1309, 329, + 308, 256, 1313, 374, 285, 306, 256, 315, 157, 317, + 474, 420, 316, 321, 423, 157, 351, 257, 256, 317, + 256, 1026, 157, 157, 257, 333, 334, 1338, 381, 157, + 372, 369, 369, 370, 999, 371, 317, 157, 381, 665, + 358, 372, 944, 339, 946, 339, 256, 949, 1412, 374, + 358, 870, 387, 388, 666, 262, 256, 256, 339, 1043, + 686, 369, 370, 256, 418, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 418, 363, 415, 416, + 415, 416, 419, 1350, 370, 256, 372, 1092, 374, 371, + 368, 298, 1478, 256, 433, 256, 367, 405, 376, 433, + 256, 256, 256, 325, 443, 376, 266, 325, 1298, 256, + 574, 903, 1379, 1380, 374, 1382, 913, 418, 368, 374, + 709, 368, 1508, 587, 374, 589, 1393, 591, 266, 1396, + 882, 367, 418, 1035, 372, 1037, 1038, 61, 420, 358, + 376, 65, 66, 67, 1411, 69, 70, 662, 435, 483, + 74, 75, 335, 490, 314, 492, 416, 81, 1123, 83, + 370, 85, 449, 372, 374, 1130, 90, 91, 1435, 795, + 370, 378, 379, 372, 374, 368, 314, 694, 515, 726, + 484, 374, 429, 795, 277, 343, 701, 811, 281, 1154, + 114, 368, 656, 491, 341, 532, 418, 257, 369, 536, + 418, 993, 256, 343, 372, 513, 369, 515, 369, 517, + 491, 257, 676, 440, 441, 375, 372, 372, 372, 446, + 429, 1018, 369, 1020, 528, 529, 272, 372, 263, 368, + 256, 277, 1134, 391, 542, 281, 256, 375, 575, 547, + 363, 381, 368, 256, 870, 532, 1211, 363, 272, 342, + 296, 391, 429, 368, 368, 372, 414, 869, 305, 256, + 343, 429, 566, 559, 1166, 559, 339, 264, 363, 363, + 428, 363, 296, 373, 414, 369, 376, 323, 559, 305, + 315, 20, 256, 867, 429, 339, 594, 595, 428, 585, + 429, 585, 305, 369, 367, 418, 342, 256, 381, 323, + 817, 272, 418, 429, 585, 642, 277, 644, 391, 896, + 281, 1213, 429, 367, 429, 429, 653, 371, 735, 373, + 374, 375, 376, 418, 418, 296, 418, 381, 325, 1231, + 254, 414, 640, 257, 1159, 376, 306, 645, 646, 256, + 648, 305, 369, 313, 900, 428, 373, 367, 87, 88, + 263, 371, 323, 373, 374, 367, 376, 694, 363, 371, + 937, 381, 1226, 414, 369, 339, 1226, 398, 399, 108, + 344, 342, 346, 297, 711, 349, 350, 428, 352, 353, + 339, 994, 1226, 394, 395, 344, 694, 346, 429, 313, + 349, 350, 256, 352, 353, 415, 423, 687, 371, 357, + 373, 709, 315, 1155, 376, 726, 1270, 996, 420, 1022, + 1270, 369, 759, 418, 372, 373, 724, 339, 753, 392, + 393, 729, 339, 294, 1008, 762, 1270, 344, 386, 346, + 294, 391, 349, 350, 272, 352, 353, 256, 272, 412, + 721, 776, 723, 376, 961, 367, 1316, 420, 912, 256, + 423, 755, 1225, 1226, 414, 429, 791, 794, 296, 1329, + 199, 200, 296, 421, 1226, 773, 1226, 775, 428, 306, + 429, 308, 1245, 1226, 811, 779, 313, 781, 1348, 371, + 817, 256, 790, 418, 294, 323, 357, 768, 325, 323, + 771, 1226, 363, 428, 953, 357, 306, 1270, 369, 1272, + 1226, 372, 373, 811, 373, 844, 369, 376, 1270, 817, + 1270, 819, 429, 821, 386, 386, 1080, 1270, 381, 371, + 339, 373, 261, 1127, 386, 344, 339, 346, 381, 1113, + 349, 350, 339, 352, 353, 1270, 871, 344, 391, 346, + 874, 381, 349, 350, 1270, 352, 353, 418, 287, 256, + 421, 391, 1116, 1017, 367, 1159, 256, 865, 367, 867, + 299, 414, 486, 376, 418, 852, 306, 857, 307, 269, + 907, 357, 909, 313, 414, 428, 884, 374, 915, 376, + 1329, 371, 367, 891, 381, 325, 286, 373, 1152, 1106, + 1194, 376, 367, 901, 373, 903, 371, 376, 373, 374, + 386, 376, 367, 940, 528, 357, 381, 256, 1400, 367, + 429, 376, 351, 370, 368, 354, 384, 374, 376, 367, + 374, 373, 429, 371, 961, 373, 374, 381, 376, 354, + 355, 966, 339, 381, 386, 256, 944, 344, 946, 346, + 977, 949, 349, 350, 368, 352, 353, 367, 387, 388, + 382, 383, 376, 961, 1280, 371, 376, 373, 1173, 367, + 368, 1287, 6, 1169, 396, 397, 389, 415, 376, 1233, + 1462, 958, 1143, 17, 385, 370, 415, 416, 968, 374, + 970, 368, 972, 357, 371, 993, 373, 374, 996, 372, + 339, 374, 369, 376, 370, 344, 435, 346, 374, 373, + 349, 350, 400, 352, 353, 392, 393, 1499, 390, 370, + 449, 372, 386, 374, 418, 59, 1521, 1522, 999, 63, + 368, 1298, 1026, 415, 372, 412, 374, 1035, 376, 1037, + 1038, 368, 1040, 420, 368, 372, 423, 374, 372, 376, + 367, 368, 376, 87, 88, 371, 367, 368, 369, 376, + 371, 372, 368, 374, 369, 376, 418, 372, 374, 256, + 376, 1050, 370, 371, 108, 373, 374, 375, 418, 1106, + 368, 277, 1080, 371, 1108, 373, 374, 370, 371, 370, + 429, 374, 367, 374, 369, 372, 1094, 1095, 1092, 376, + 368, 369, 372, 532, 392, 393, 376, 418, 1106, 420, + 1107, 376, 423, 372, 1143, 1113, 1145, 376, 1116, 1143, + 372, 1145, 374, 157, 412, 554, 370, 372, 372, 376, + 374, 376, 420, 354, 355, 423, 1134, 372, 1412, 374, + 1169, 1127, 1140, 1127, 370, 1169, 372, 576, 370, 1303, + 372, 374, 1123, 376, 1152, 370, 1127, 372, 367, 1130, + 393, 394, 395, 396, 256, 199, 200, 294, 1166, 1167, + 367, 368, 1326, 1159, 1203, 1159, 368, 369, 357, 1203, + 386, 387, 388, 1154, 363, 370, 1340, 372, 1159, 372, + 369, 374, 373, 372, 373, 374, 1225, 1226, 372, 1224, + 374, 1225, 343, 370, 1358, 372, 1360, 386, 1194, 370, + 1194, 372, 374, 376, 376, 1213, 1245, 374, 374, 376, + 376, 1245, 374, 1194, 376, 376, 261, 261, 414, 415, + 364, 365, 294, 1231, 372, 1233, 665, 372, 373, 418, + 1211, 1270, 414, 1272, 364, 365, 1273, 418, 1272, 284, + 356, 285, 376, 287, 1279, 391, 392, 686, 418, 1111, + 1112, 369, 297, 389, 390, 299, 375, 302, 397, 398, + 1295, 1296, 307, 307, 309, 310, 311, 312, 418, 372, + 376, 372, 317, 317, 368, 374, 321, 372, 294, 1283, + 325, 372, 294, 1318, 374, 372, 1321, 372, 333, 372, + 374, 336, 93, 338, 256, 339, 97, 98, 99, 100, + 101, 102, 103, 104, 371, 376, 256, 351, 294, 294, + 354, 381, 372, 374, 753, 373, 1350, 362, 375, 374, + 373, 418, 381, 372, 374, 429, 374, 374, 374, 372, + 1334, 423, 374, 374, 367, 421, 372, 776, 373, 343, + 372, 294, 294, 387, 388, 1379, 1380, 374, 1382, 374, + 0, 1390, 791, 418, 371, 370, 795, 367, 256, 1393, + 256, 375, 1396, 374, 418, 256, 261, 256, 1407, 280, + 256, 415, 416, 418, 381, 367, 372, 1411, 368, 343, + 351, 1420, 1421, 370, 423, 376, 374, 371, 381, 284, + 372, 374, 1400, 370, 1398, 376, 372, 372, 347, 367, + 256, 1435, 297, 381, 1412, 256, 372, 302, 1447, 1448, + 305, 381, 307, 852, 309, 310, 311, 312, 372, 0, + 376, 1429, 317, 368, 347, 339, 321, 370, 374, 370, + 325, 870, 871, 375, 381, 370, 372, 368, 333, 348, + 374, 336, 372, 338, 418, 418, 348, 491, 376, 256, + 368, 367, 256, 368, 1462, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 1504, 367, 362, 367, 381, + 376, 356, 372, 337, 371, 368, 368, 305, 368, 418, + 374, 418, 369, 371, 1521, 1522, 418, 367, 532, 418, + 371, 1499, 418, 376, 371, 371, 371, 381, 937, 373, + 301, 1505, 1506, 371, 367, 371, 373, 369, 1512, 1513, + 554, 381, 372, 1521, 1522, 559, 374, 372, 256, 958, + 373, 367, 0, 418, 374, 374, 374, 966, 372, 376, + 372, 332, 576, 370, 368, 339, 418, 376, 376, 418, + 344, 585, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 418, 372, 376, 372, 418, 381, 372, + 370, 381, 368, 372, 368, 315, 370, 263, 372, 371, + 374, 375, 376, 371, 368, 372, 372, 0, 0, 367, + 372, 376, 368, 384, 385, 386, 390, 376, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 0, 368, 372, 257, 372, 370, + 418, 261, 367, 372, 0, 368, 368, 373, 372, 370, + 367, 665, 272, 368, 372, 429, 368, 277, 418, 372, + 376, 281, 376, 418, 284, 376, 372, 376, 368, 367, + 372, 368, 686, 372, 368, 376, 296, 297, 367, 315, + 376, 301, 302, 376, 376, 376, 376, 307, 376, 309, + 310, 311, 312, 376, 376, 263, 50, 317, 12, 5, + 958, 321, 852, 323, 1272, 1106, 257, 721, 1106, 723, + 261, 1452, 1415, 333, 1245, 335, 336, 686, 338, 1468, + 1432, 272, 342, 1403, 1398, 1304, 277, 700, 874, 874, + 281, 869, 1316, 284, 1513, 874, 1335, 1146, 1258, 753, + 511, 1270, 362, 1421, 1420, 296, 297, 1507, 368, 369, + 301, 302, 1425, 1203, 768, 1506, 307, 771, 309, 310, + 311, 312, 776, 1360, 1304, 844, 317, 896, 1205, 265, + 321, 267, 323, 817, 270, 532, 369, 791, 1008, 275, + 729, 795, 333, 279, 335, 336, 694, 338, 71, 595, + 335, 342, 288, 726, 399, 401, 1205, 400, 402, 295, + 554, 403, 795, 404, 300, 1279, 1194, 1183, 304, 257, + 581, 362, 1127, 261, 157, 1224, 995, 1071, 369, 1095, + 316, 979, 318, 1022, 272, 1085, 322, 0, 1155, 277, + 1083, 1275, 917, 281, 330, 331, 284, 424, 334, 424, + 651, 337, 1167, 530, -1, -1, 850, -1, 296, 297, + 849, -1, -1, 301, 302, -1, 870, 871, -1, 307, + -1, 309, 310, 311, 312, -1, -1, 363, -1, 317, + 1279, 1280, -1, 321, -1, 323, -1, -1, 1287, -1, + -1, -1, -1, -1, -1, 333, 1295, 1296, 336, 1298, + 338, -1, -1, -1, 342, 1304, -1, -1, -1, -1, + 256, -1, -1, -1, -1, 261, 262, 1316, -1, 1318, + -1, -1, 1321, -1, 362, -1, -1, -1, -1, -1, + 1329, 369, 418, 937, -1, -1, -1, -1, 284, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 1348, + -1, 297, 298, -1, -1, -1, 302, -1, -1, 305, + -1, 307, 966, 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, 999, -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, 373, 374, 375, + 376, 0, 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, + 416, -1, 418, -1, 420, -1, -1, 423, -1, -1, + -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, -1, -1, 261, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, - -1, -1, 1193, -1, 277, -1, -1, -1, 281, -1, - -1, 284, -1, 1204, -1, -1, -1, -1, -1, 1210, - -1, -1, -1, 296, 297, -1, -1, -1, 301, 302, - -1, 1222, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, -1, -1, 317, -1, -1, -1, 321, -1, + -1, 256, -1, -1, -1, -1, -1, 262, -1, 272, + -1, -1, -1, -1, 277, -1, -1, -1, 281, 1123, + -1, 284, -1, 1127, -1, -1, 1130, -1, -1, -1, + -1, -1, -1, 296, 297, 896, -1, -1, 301, 302, + -1, -1, 1146, 298, 307, -1, 309, 310, 311, 312, + 1154, -1, -1, -1, 317, 1159, -1, -1, 321, -1, 323, -1, -1, -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, 336, -1, 338, -1, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1277, 1278, -1, 362, - -1, -1, -1, -1, 1285, 368, 369, -1, 256, 257, - -1, -1, 1293, 1294, -1, 1296, 264, 265, 266, 267, - 268, -1, 270, 271, 0, 273, 274, 275, 276, 277, - 278, 279, -1, -1, -1, 1316, -1, 285, 1319, 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, + 1194, -1, -1, -1, -1, -1, -1, -1, 0, 362, + -1, 1205, -1, -1, -1, 368, 369, 1211, 363, -1, + -1, -1, -1, 368, 369, -1, 371, 372, 373, 374, + 1224, 376, -1, 378, 379, -1, 381, 382, 383, 384, + 385, -1, 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, -1, -1, 429, 1279, 1280, -1, -1, -1, + -1, -1, -1, 1287, -1, -1, -1, 256, 257, -1, + -1, 1295, 1296, -1, 1298, 264, 265, 266, 267, 268, + -1, 270, 271, -1, 273, 274, 275, 276, 277, 278, + 279, 280, -1, -1, 1318, -1, 285, 1321, 287, 288, + 289, 290, 291, 292, 0, -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, - -1, 359, 360, 361, 362, 363, -1, -1, -1, 367, - 368, -1, -1, 371, -1, -1, -1, -1, 376, 377, - 378, 379, 380, -1, 256, -1, 384, -1, 386, 261, - 262, -1, -1, -1, 392, 393, -1, -1, -1, -1, - -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, - -1, -1, 284, -1, -1, -1, -1, -1, -1, 417, - 418, 419, 420, -1, 422, 297, 298, -1, -1, -1, - 302, 429, -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, - 256, -1, -1, -1, 0, 261, 262, -1, -1, -1, - -1, 413, -1, -1, 416, -1, 418, -1, 420, -1, - -1, 423, -1, -1, -1, -1, -1, 429, 284, -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, 297, 298, -1, -1, -1, 302, -1, -1, 305, + -1, -1, -1, -1, -1, -1, -1, -1, 417, 418, + 419, 420, -1, 422, 256, 257, -1, -1, -1, -1, + 429, -1, 264, 265, 266, 267, 268, -1, 270, 271, + 0, 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, 368, -1, -1, 371, + -1, -1, -1, -1, 376, 377, 378, 379, 380, -1, + 256, -1, 384, -1, 386, 261, 262, -1, -1, -1, + 392, 393, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, 284, -1, + -1, -1, -1, -1, -1, 417, 418, 419, 420, -1, + 422, 297, 298, -1, -1, -1, 302, 429, -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, 0, -1, - -1, 367, 368, 369, 370, 371, 372, -1, 374, 375, + 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, - 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, + 386, -1, -1, 389, 390, -1, -1, -1, 394, 395, + 396, 397, 398, 399, 400, 401, 256, -1, -1, -1, + 0, 261, 262, -1, -1, -1, -1, 413, -1, -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, -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, 0, -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, -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, -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, 0, -1, -1, -1, -1, 413, -1, -1, - 416, -1, 418, -1, -1, -1, -1, -1, -1, -1, - -1, -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, -1, -1, 256, -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, 0, -1, 389, 390, -1, - -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, - 256, -1, -1, -1, -1, -1, 262, -1, -1, -1, - -1, 413, -1, -1, 416, -1, 418, -1, 420, -1, - -1, 423, -1, -1, -1, -1, -1, 429, 0, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 339, 298, -1, -1, -1, 344, -1, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, -1, 429, 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, -1, -1, -1, + -1, -1, 362, 363, 0, -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, -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, -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, + 0, -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, -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, -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, 0, -1, + -1, -1, -1, 413, -1, -1, 416, -1, 418, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 429, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 368, 0, 370, -1, 372, -1, 374, 375, 376, -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, 363, -1, -1, - -1, 367, 368, -1, 370, 371, 372, -1, 374, 375, + 356, 357, -1, -1, 256, -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, - -1, 429, -1, 389, 390, -1, -1, -1, 394, 395, - 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, 413, 256, 257, - 416, -1, 418, 261, -1, -1, -1, 265, -1, 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, 0, 293, -1, 295, 296, 297, - -1, -1, 300, 301, 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, 0, 336, 337, - 338, -1, 257, -1, 342, -1, 261, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 272, -1, -1, - -1, -1, 277, -1, 362, -1, 281, -1, -1, 284, - 368, 369, -1, -1, -1, -1, -1, -1, -1, 377, - 0, 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, - 418, 336, -1, 338, 296, 297, -1, 342, 257, 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, - 0, 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, 369, -1, -1, - -1, -1, -1, -1, 333, -1, -1, 336, 257, 338, - -1, -1, 261, 342, -1, -1, -1, -1, -1, -1, + 386, 0, -1, 389, 390, -1, -1, -1, 394, 395, + 396, 397, 398, 399, 400, 401, 256, -1, -1, -1, + -1, -1, 262, -1, -1, -1, -1, 413, -1, -1, + 416, -1, 418, -1, 420, -1, -1, 423, -1, -1, + -1, -1, -1, 429, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 339, 298, -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, 0, 370, -1, + 372, -1, 374, 375, 376, -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, 363, -1, -1, -1, 367, 368, -1, + 370, 371, 372, -1, 374, 375, 376, -1, 378, 379, + -1, -1, 382, 383, 384, 385, -1, 429, -1, 389, + 390, -1, -1, -1, 394, 395, 396, 397, 398, 399, + 400, 401, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, 413, 256, 257, 416, -1, 418, 261, + -1, -1, -1, 265, -1, 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, + 0, 293, -1, 295, 296, 297, -1, -1, 300, 301, + 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, 0, 336, 337, 338, -1, 257, -1, + 342, -1, 261, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, -1, -1, -1, -1, 277, -1, - -1, -1, 281, 362, -1, 284, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 296, 297, -1, + 362, -1, 281, -1, -1, 284, 368, 369, -1, -1, + -1, -1, -1, -1, -1, 377, 0, 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, + -1, -1, -1, -1, 333, -1, 418, 336, -1, 338, 296, 297, -1, 342, 257, 301, 302, -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, -1, -1, 272, - -1, 317, -1, 362, 277, 321, -1, 323, 281, -1, - -1, 284, -1, -1, -1, -1, -1, 333, -1, -1, - 336, -1, 338, 296, 297, -1, 342, 257, 301, 302, + -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, + -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, -1, 336, 257, 338, -1, -1, 261, 342, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 272, + -1, -1, -1, -1, 277, -1, -1, -1, 281, 362, + -1, 284, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 296, 297, -1, -1, 257, 301, 302, -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 272, -1, 317, -1, 362, 277, 321, -1, + -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, -1, 336, 257, 338, -1, - -1, 261, 342, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 272, -1, -1, -1, -1, 277, -1, -1, - -1, 281, 362, -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, -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, 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, 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, -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, -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, -1, -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, 256, -1, -1, -1, 330, 331, 262, -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, 367, 368, 298, 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, 418, 420, 262, -1, 423, -1, -1, - -1, -1, -1, 429, -1, -1, -1, -1, 363, -1, - -1, -1, -1, 368, 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, + 257, 301, 302, -1, 261, -1, -1, 307, -1, 309, + 310, 311, 312, -1, -1, 272, -1, 317, -1, 362, + 277, 321, -1, 323, 281, -1, -1, 284, -1, -1, + -1, -1, -1, 333, -1, -1, 336, -1, 338, 296, + 297, -1, 342, 257, 301, 302, -1, 261, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, 272, -1, + 317, -1, 362, 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, -1, -1, -1, -1, - 368, -1, 370, 371, 372, 373, 374, 375, 376, -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, 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, + 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, 285, 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, + -1, -1, -1, -1, -1, -1, -1, -1, 367, 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, 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, -1, - -1, 256, 325, -1, -1, -1, -1, 262, -1, -1, - 333, 266, -1, 336, -1, 338, -1, -1, -1, 339, + 409, 410, 411, 412, 413, -1, 256, -1, -1, -1, + -1, 420, 262, -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, 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, -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, 362, - -1, -1, -1, 298, -1, -1, -1, -1, 368, -1, - 370, 371, 372, 373, 374, 375, 376, -1, 378, 314, + 350, 351, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 367, 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, + 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, 418, -1, -1, -1, -1, - 420, -1, 357, 423, -1, -1, -1, -1, 363, 429, - -1, -1, -1, 368, 369, 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, 256, 418, -1, 420, 262, -1, 423, -1, - 264, 265, -1, 267, 429, -1, 270, 271, -1, -1, - -1, 275, 276, 277, -1, 279, -1, -1, -1, -1, - -1, 285, -1, -1, 288, -1, -1, -1, -1, -1, - -1, 295, 298, -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, 339, -1, -1, -1, -1, 344, -1, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, -1, -1, -1, -1, 359, 360, 361, 362, -1, - -1, -1, 368, -1, 370, -1, 372, 371, 374, 375, - 376, -1, 378, 379, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 261, -1, -1, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 256, 413, 284, -1, - -1, -1, 262, 417, 418, -1, -1, -1, -1, -1, - -1, 297, -1, 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, 298, 325, - -1, -1, -1, -1, -1, -1, -1, 333, -1, -1, - 336, -1, 338, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 256, -1, -1, -1, -1, -1, - 262, -1, -1, -1, -1, -1, 362, -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, 386, 387, 388, 389, - 390, -1, 418, -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, -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, 285, -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, 327, 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, 377, 378, 379, 380, -1, - 382, 383, 384, 385, 386, 387, 388, 389, 256, 429, - 392, 393, 394, 395, 396, 397, 398, 399, -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, - -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, 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, -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, -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, -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, - -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, -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, -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, -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, - -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, -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, -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, -1, -1, 384, 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, - 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, 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, -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, -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, 368, 369, -1, - 371, -1, 373, -1, 375, 376, -1, 378, 379, -1, + 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, -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, -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, -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, -1, -1, -1, 418, 420, 262, 256, + 423, -1, 266, -1, -1, -1, 429, -1, 265, -1, + 267, -1, -1, 270, -1, -1, -1, -1, 275, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, + -1, 288, -1, -1, 298, -1, -1, -1, 295, -1, + -1, -1, -1, 300, -1, -1, -1, 304, -1, -1, + 314, -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, -1, -1, -1, -1, 256, -1, -1, -1, -1, + -1, 262, -1, 357, -1, -1, -1, -1, -1, 363, + -1, -1, -1, -1, 368, 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, 418, -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, -1, -1, -1, -1, -1, 368, -1, 370, + -1, 372, -1, 374, 375, 376, -1, 378, 379, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 261, -1, -1, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 256, 413, 284, -1, -1, -1, 262, -1, -1, + -1, -1, -1, -1, -1, -1, 297, -1, 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, 298, 325, -1, -1, -1, -1, -1, + -1, -1, 333, -1, -1, 336, -1, 338, -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, 262, -1, -1, -1, -1, + -1, 362, -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, 386, 387, 388, 389, 390, -1, 418, -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, -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, 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, 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, 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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -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, -1, -1, 384, 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, -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, 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, 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, -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, -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, -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, -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, 368, 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, - 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, 384, -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, -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, 306, -1, -1, - -1, -1, -1, 295, 313, -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, + -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, - 372, -1, -1, 392, 393, -1, -1, -1, -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, -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, + 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, 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, 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, - 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, 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, -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, 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, -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, -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, 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, 306, -1, -1, -1, -1, -1, 295, 313, + -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, 370, -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, 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, + -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, @@ -12236,7 +12256,7 @@ void case_980() 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, + 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, @@ -12247,7 +12267,7 @@ void case_980() 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, + 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, @@ -12255,74 +12275,25 @@ void case_980() 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, 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, 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, + 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, - -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, -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, + 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, 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, 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, -1, + -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, @@ -12331,58 +12302,141 @@ void case_980() -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, -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, -1, -1, -1, - 300, -1, 302, 303, 304, -1, -1, -1, -1, -1, - -1, -1, 262, -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, 298, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 359, + -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, -1, -1, -1, -1, 417, 418, 419, - 420, 371, 372, 373, 374, 375, -1, -1, 378, 379, - -1, -1, 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, 263, -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, 294, 295, - 296, 297, -1, -1, 300, -1, 302, -1, 304, -1, - 306, 307, -1, 309, 310, 311, 312, -1, -1, 315, - 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, 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, - -1, -1, -1, -1, -1, -1, 362, -1, 364, 365, - 261, -1, -1, -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, -1, 295, 296, 297, -1, -1, 300, - -1, 302, -1, 304, -1, -1, 307, -1, 309, 310, - 311, 312, 418, -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, + 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, 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, + 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, -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, -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, + -1, 279, -1, -1, -1, -1, -1, 285, -1, -1, + 288, -1, -1, -1, 261, -1, -1, 295, -1, -1, + -1, 262, 300, -1, 302, 303, 304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 284, 316, -1, + 318, 319, -1, -1, 322, -1, -1, 325, -1, 327, + 297, 329, 330, 331, 332, 302, 334, 298, -1, -1, + 307, -1, 309, 310, 311, 312, -1, -1, 315, -1, + 317, -1, -1, -1, 321, -1, -1, -1, -1, -1, + -1, 359, 360, 361, 362, -1, 333, -1, -1, 336, + -1, 338, -1, 371, -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, 368, 369, -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, 263, -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, 294, 295, 296, + 297, -1, -1, 300, -1, 302, -1, 304, -1, 306, + 307, -1, 309, 310, 311, 312, -1, -1, 315, 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, -1, -1, 362, -1, 364, 365, 261, + -1, -1, -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, -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, + 312, 418, -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, @@ -12395,46 +12449,51 @@ void case_980() -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, 261, -1, -1, -1, 265, -1, - 267, -1, -1, 270, -1, 272, 273, -1, 275, 362, - 277, -1, 279, -1, 281, 282, 283, 284, -1, -1, - 287, 288, -1, -1, 377, -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, 418, 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, 261, -1, - -1, 362, -1, -1, 297, -1, -1, -1, 369, 302, - 371, -1, 373, -1, 307, 418, 309, 310, 311, 312, - -1, 284, -1, -1, 317, 386, -1, -1, 321, -1, - -1, -1, 325, -1, 297, -1, -1, -1, -1, 302, - 333, -1, -1, 336, 307, 338, 309, 310, 311, 312, - -1, -1, -1, -1, 317, -1, -1, 418, 321, -1, - -1, -1, -1, -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, -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, 261, -1, -1, -1, 265, -1, 267, + -1, -1, 270, -1, 272, 273, -1, 275, 362, 277, + -1, 279, -1, 281, 282, 283, 284, -1, -1, 287, + 288, -1, -1, 377, -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, 418, 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, 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, -1, + -1, 333, 302, -1, 336, -1, 338, 307, -1, 309, + 310, 311, 312, -1, -1, -1, -1, 317, -1, -1, + -1, 321, -1, -1, -1, 357, -1, -1, -1, -1, + 362, -1, -1, 333, -1, -1, 336, 369, 338, 371, + -1, 373, -1, -1, 418, 264, 265, -1, 267, -1, + -1, 270, 271, -1, 386, -1, 275, 276, 277, -1, + 279, -1, 362, -1, -1, -1, 285, -1, -1, 288, + -1, -1, -1, -1, -1, -1, 295, -1, -1, -1, + -1, 300, -1, 302, 303, 304, 418, 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, + 319, -1, -1, 322, -1, -1, 325, -1, 327, -1, + 329, 330, 331, 332, -1, 334, -1, -1, 418, -1, -1, -1, 341, -1, -1, 344, 345, -1, -1, -1, - -1, -1, -1, -1, -1, 418, -1, -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, 372, -1, 374, -1, -1, 377, 378, 379, 380, -1, -1, -1, 384, -1, 386, -1, -1, @@ -12578,12 +12637,12 @@ void case_980() -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, -1, 300, -1, 302, + -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, 315, -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, @@ -12652,74 +12711,66 @@ void case_980() 313, -1, 270, 316, -1, 318, -1, 275, -1, 322, -1, 279, 325, -1, -1, 283, -1, 330, 331, -1, 288, 334, -1, -1, 337, 293, -1, 295, -1, 418, - -1, -1, 300, -1, -1, -1, 304, 305, -1, -1, - -1, 265, -1, 267, -1, -1, 270, -1, 316, -1, - 318, 275, -1, -1, 322, 279, -1, -1, -1, -1, - -1, 418, 330, 331, 288, 265, 334, 267, -1, -1, - 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, 418, 330, 331, -1, -1, - 334, -1, 261, 337, -1, -1, 316, -1, 318, -1, - -1, -1, 322, 272, -1, -1, -1, -1, 277, -1, - 330, 331, 281, -1, 334, 284, -1, 337, -1, 363, - -1, -1, -1, -1, -1, -1, -1, 296, 297, -1, - 418, -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, 418, 301, 302, -1, 261, -1, - 263, 307, -1, 309, 310, 311, 312, -1, -1, -1, - -1, 317, -1, 362, -1, 321, -1, 323, 418, 368, - 369, 284, -1, -1, -1, -1, -1, 333, -1, -1, - 336, -1, 338, -1, 297, -1, 342, -1, -1, 302, - -1, 261, -1, -1, 307, -1, 309, 310, 311, 312, - -1, -1, 272, -1, 317, -1, 362, 277, 321, -1, - -1, 281, 368, 369, 284, -1, -1, -1, -1, -1, - 333, -1, -1, 336, -1, 338, 296, 297, -1, -1, - -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, 300, -1, -1, 261, 304, 305, -1, -1, + -1, -1, -1, -1, -1, -1, 272, -1, 316, -1, + 318, 277, -1, -1, 322, 281, -1, -1, 284, -1, + -1, 418, 330, 331, -1, -1, 334, -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, + -1, -1, -1, -1, -1, 418, -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, 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, -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, + 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, -1, + 302, -1, -1, -1, -1, 307, -1, 309, 310, 311, + 312, -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, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 362, + -1, -1, 362, }; -#line 6618 "cs-parser.jay" +#line 6654 "cs-parser.jay" // <summary> // A class used to hold info about an operator declarator @@ -12874,17 +12925,12 @@ public Tokenizer Lexer { } } -static CSharpParser () +public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, ParserSession session) + : this (reader, file, file.Compiler.Report, session) { - oob_stack = new Stack<object> (); } -public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file) - : this (reader, file, file.Compiler.Report) -{ -} - -public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Report report) +public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Report report, ParserSession session) { this.file = file; current_container = current_namespace = file; @@ -12897,22 +12943,16 @@ public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Re lang_version = settings.Version; yacc_verbose_flag = settings.VerboseParserFlag; doc_support = settings.DocumentationFile != null; - oob_stack.Clear (); - lexer = new Tokenizer (reader, file); - -#if FULL_AST - lbag = new LocationsBag (); -#else - lbag = null; -#endif - - use_global_stacks = true; + lexer = new Tokenizer (reader, file, session); + oob_stack = new Stack<object> (); + lbag = session.LocationsBag; + use_global_stacks = session.UseJayGlobalArrays; + parameters_bucket = session.ParametersStack; } public void parse () { eof_token = Token.EOF; - Tokenizer.LocatedToken.Initialize (); try { if (yacc_verbose_flag > 1) @@ -12979,12 +13019,6 @@ Location GetLocation (object obj) return lexer.Location; } -public LocationsBag LocationsBag { - get { - return lbag; - } -} - void start_block (Location loc) { if (current_block == null) { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay index e323e33332..1299f6d93b 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-parser.jay @@ -76,7 +76,7 @@ namespace Mono.CSharp /// /// An out-of-band stack. /// - static Stack<object> oob_stack; + Stack<object> oob_stack; /// /// Controls the verbosity of the errors produced by the parser @@ -132,7 +132,7 @@ namespace Mono.CSharp // share the bucket for very common constructs which can never // be recursive // - static List<Parameter> parameters_bucket = new List<Parameter> (6); + List<Parameter> parameters_bucket; // // Full AST support members @@ -2664,6 +2664,21 @@ enum_member_declaration $$ = em; } + | opt_attributes IDENTIFIER error + { + Error_SyntaxError (yyToken); + + var lt = (Tokenizer.LocatedToken) $2; + var em = new EnumMember ((Enum) current_type, new MemberName (lt.Value, lt.Location), (Attributes) $1); + ((Enum) current_type).AddEnumMember (em); + + if (doc_support) { + em.DocComment = Lexer.consume_doc_comment (); + Lexer.doc_state = XmlCommentState.Allowed; + } + + $$ = em; + } | attributes_without_members ; @@ -3961,18 +3976,18 @@ multiplicative_expression : prefixed_unary_expression | multiplicative_expression STAR prefixed_unary_expression { - $$ = new Binary (Binary.Operator.Multiply, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.Multiply, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | multiplicative_expression DIV prefixed_unary_expression { - $$ = new Binary (Binary.Operator.Division, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.Division, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | multiplicative_expression PERCENT prefixed_unary_expression { - $$ = new Binary (Binary.Operator.Modulus, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.Modulus, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -3980,18 +3995,14 @@ additive_expression : multiplicative_expression | additive_expression PLUS multiplicative_expression { - $$ = new Binary (Binary.Operator.Addition, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.Addition, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | additive_expression MINUS multiplicative_expression { - $$ = new Binary (Binary.Operator.Subtraction, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.Subtraction, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } - | parenthesized_expression MINUS multiplicative_expression - { - // Shift/Reduce conflict - $$ = new Binary (Binary.Operator.Subtraction, (Expression) $1, (Expression) $3, GetLocation ($2)); - } | additive_expression AS type { $$ = new As ((Expression) $1, (Expression) $3, GetLocation ($2)); @@ -4006,13 +4017,13 @@ shift_expression : additive_expression | shift_expression OP_SHIFT_LEFT additive_expression { - $$ = new Binary (Binary.Operator.LeftShift, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.LeftShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | shift_expression OP_SHIFT_RIGHT additive_expression { - $$ = new Binary (Binary.Operator.RightShift, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.RightShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4020,23 +4031,23 @@ relational_expression : shift_expression | relational_expression OP_LT shift_expression { - $$ = new Binary (Binary.Operator.LessThan, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.LessThan, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | relational_expression OP_GT shift_expression { - $$ = new Binary (Binary.Operator.GreaterThan, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.GreaterThan, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | relational_expression OP_LE shift_expression { - $$ = new Binary (Binary.Operator.LessThanOrEqual, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.LessThanOrEqual, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | relational_expression OP_GE shift_expression { - $$ = new Binary (Binary.Operator.GreaterThanOrEqual, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.GreaterThanOrEqual, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4044,13 +4055,13 @@ equality_expression : relational_expression | equality_expression OP_EQ relational_expression { - $$ = new Binary (Binary.Operator.Equality, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.Equality, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | equality_expression OP_NE relational_expression { - $$ = new Binary (Binary.Operator.Inequality, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.Inequality, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4058,8 +4069,8 @@ and_expression : equality_expression | and_expression BITWISE_AND equality_expression { - $$ = new Binary (Binary.Operator.BitwiseAnd, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.BitwiseAnd, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4067,8 +4078,8 @@ exclusive_or_expression : and_expression | exclusive_or_expression CARRET and_expression { - $$ = new Binary (Binary.Operator.ExclusiveOr, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.ExclusiveOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4076,8 +4087,8 @@ inclusive_or_expression : exclusive_or_expression | inclusive_or_expression BITWISE_OR exclusive_or_expression { - $$ = new Binary (Binary.Operator.BitwiseOr, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.BitwiseOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4085,8 +4096,8 @@ conditional_and_expression : inclusive_or_expression | conditional_and_expression OP_AND inclusive_or_expression { - $$ = new Binary (Binary.Operator.LogicalAnd, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.LogicalAnd, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4094,8 +4105,8 @@ conditional_or_expression : conditional_and_expression | conditional_or_expression OP_OR conditional_and_expression { - $$ = new Binary (Binary.Operator.LogicalOr, - (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Binary (Binary.Operator.LogicalOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4106,7 +4117,8 @@ null_coalescing_expression if (lang_version < LanguageVersion.ISO_2) FeatureIsNotAvailable (GetLocation ($2), "null coalescing operator"); - $$ = new Nullable.NullCoalescingOperator ((Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new Nullable.NullCoalescingOperator ((Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4127,57 +4139,58 @@ conditional_expression assignment_expression : prefixed_unary_expression ASSIGN expression { - $$ = new SimpleAssign ((Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new SimpleAssign ((Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_MULT_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.Multiply, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.Multiply, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_DIV_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.Division, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.Division, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_MOD_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.Modulus, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.Modulus, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_ADD_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.Addition, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.Addition, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_SUB_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.Subtraction, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.Subtraction, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_SHIFT_LEFT_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.LeftShift, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.LeftShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_SHIFT_RIGHT_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.RightShift, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.RightShift, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_AND_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.BitwiseAnd, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.BitwiseAnd, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_OR_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.BitwiseOr, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.BitwiseOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } | prefixed_unary_expression OP_XOR_ASSIGN expression { - $$ = new CompoundAssign ( - Binary.Operator.ExclusiveOr, (Expression) $1, (Expression) $3, GetLocation ($2)); + $$ = new CompoundAssign (Binary.Operator.ExclusiveOr, (Expression) $1, (Expression) $3); + lbag.AddLocation ($$, GetLocation ($2)); } ; @@ -4971,7 +4984,7 @@ identifier_inside_body { if (async_block) { report.Error (4003, GetLocation ($1), "`await' cannot be used as an identifier within an async method or lambda expression"); - $$ = Tokenizer.LocatedToken.Create ("await", GetLocation ($1)); + $$ = new Tokenizer.LocatedToken ("await", GetLocation ($1)); } } ; @@ -5353,19 +5366,19 @@ while_statement do_statement : DO embedded_statement WHILE open_parens_any boolean_expression CLOSE_PARENS SEMICOLON { - $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1)); + $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1), GetLocation ($3)); lbag.AddStatement ($$, GetLocation ($3), GetLocation ($4), GetLocation ($6), GetLocation ($7)); } | DO embedded_statement error { Error_SyntaxError (yyToken); - $$ = new Do ((Statement) $2, null, GetLocation ($1)); + $$ = new Do ((Statement) $2, null, GetLocation ($1), Location.Null); } | DO embedded_statement WHILE open_parens_any boolean_expression error { Error_SyntaxError (yyToken); - $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1)); + $$ = new Do ((Statement) $2, (BooleanExpression) $5, GetLocation ($1), GetLocation ($3)); lbag.AddStatement ($$, GetLocation ($3), GetLocation ($4)); } ; @@ -5634,6 +5647,11 @@ return_statement $$ = new Return ((Expression) $2, GetLocation ($1)); lbag.AddStatement ($$, GetLocation ($3)); } + | RETURN expression error + { + Error_SyntaxError (yyToken); + $$ = new Return ((Expression) $2, GetLocation ($1)); + } | RETURN error { Error_SyntaxError (yyToken); @@ -5671,6 +5689,24 @@ yield_statement $$ = new Yield ((Expression) $3, lt.Location); lbag.AddStatement ($$, GetLocation ($2), GetLocation ($4)); } + | identifier_inside_body RETURN expression error + { + Error_SyntaxError (yyToken); + + var lt = (Tokenizer.LocatedToken) $1; + string s = lt.Value; + if (s != "yield"){ + report.Error (1003, lt.Location, "; expected"); + } else if ($3 == null) { + report.Error (1627, GetLocation ($4), "Expression expected after yield return"); + } else if (lang_version == LanguageVersion.ISO_1){ + FeatureIsNotAvailable (lt.Location, "iterators"); + } + + current_block.Explicit.RegisterIteratorYield (); + $$ = new Yield ((Expression) $3, lt.Location); + lbag.AddStatement ($$, GetLocation ($2)); + } | identifier_inside_body BREAK SEMICOLON { var lt = (Tokenizer.LocatedToken) $1; @@ -6769,17 +6805,12 @@ public Tokenizer Lexer { } } -static CSharpParser () +public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, ParserSession session) + : this (reader, file, file.Compiler.Report, session) { - oob_stack = new Stack<object> (); } -public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file) - : this (reader, file, file.Compiler.Report) -{ -} - -public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Report report) +public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Report report, ParserSession session) { this.file = file; current_container = current_namespace = file; @@ -6792,22 +6823,16 @@ public CSharpParser (SeekableStreamReader reader, CompilationSourceFile file, Re lang_version = settings.Version; yacc_verbose_flag = settings.VerboseParserFlag; doc_support = settings.DocumentationFile != null; - oob_stack.Clear (); - lexer = new Tokenizer (reader, file); - -#if FULL_AST - lbag = new LocationsBag (); -#else - lbag = null; -#endif - - use_global_stacks = true; + lexer = new Tokenizer (reader, file, session); + oob_stack = new Stack<object> (); + lbag = session.LocationsBag; + use_global_stacks = session.UseJayGlobalArrays; + parameters_bucket = session.ParametersStack; } public void parse () { eof_token = Token.EOF; - Tokenizer.LocatedToken.Initialize (); try { if (yacc_verbose_flag > 1) @@ -6874,12 +6899,6 @@ Location GetLocation (object obj) return lexer.Location; } -public LocationsBag LocationsBag { - get { - return lbag; - } -} - void start_block (Location loc) { if (current_block == null) { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs index 2240642e87..6e4dce7a9d 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/cs-tokenizer.cs @@ -16,6 +16,7 @@ using System.Text; using System.Collections.Generic; using System.Globalization; using System.Diagnostics; +using System.Collections; namespace Mono.CSharp { @@ -66,32 +67,62 @@ namespace Mono.CSharp } // - // This class has to be used in the parser only, it reuses token - // details after each parse + // This class has to be used by parser only, it reuses token + // details after each file parse completion // public class LocatedToken { - int row, column; - string value; + public int row, column; + public string value; + public SourceFile file; - static LocatedToken[] buffer = new LocatedToken[0]; - static int pos; - - private LocatedToken () + public LocatedToken () { } - public static LocatedToken Create (int row, int column) + public LocatedToken (string value, Location loc) { - return Create (null, row, column); + this.value = value; + file = loc.SourceFile; + row = loc.Row; + column = loc.Column; } - public static LocatedToken Create (string value, Location loc) + public override string ToString () { - return Create (value, loc.Row, loc.Column); + return string.Format ("Token '{0}' at {1},{2}", Value, row, column); } - public static LocatedToken Create (string value, int row, int column) + public Location Location { + get { return new Location (file, row, column); } + } + + public string Value { + get { return value; } + } + } + + public class LocatedTokenBuffer + { + readonly LocatedToken[] buffer; + public int pos; + + public LocatedTokenBuffer () + { + buffer = new LocatedToken[0]; + } + + public LocatedTokenBuffer (LocatedToken[] buffer) + { + this.buffer = buffer ?? new LocatedToken[0]; + } + + public LocatedToken Create (SourceFile file, int row, int column) + { + return Create (null, file, row, column); + } + + public LocatedToken Create (string value, SourceFile file, int row, int column) { // // TODO: I am not very happy about the logic but it's the best @@ -105,15 +136,16 @@ namespace Mono.CSharp if (pos >= buffer.Length) { entry = new LocatedToken (); } else { - entry = buffer [pos]; + entry = buffer[pos]; if (entry == null) { entry = new LocatedToken (); - buffer [pos] = entry; + buffer[pos] = entry; } ++pos; } entry.value = value; + entry.file = file; entry.row = row; entry.column = column; return entry; @@ -123,31 +155,9 @@ namespace Mono.CSharp // Used for token not required by expression evaluator // [Conditional ("FULL_AST")] - public static void CreateOptional (int row, int col, ref object token) - { - token = Create (row, col); - } - - public static void Initialize () + public void CreateOptional (SourceFile file, int row, int col, ref object token) { -#if !FULL_AST - if (buffer.Length == 0) - buffer = new LocatedToken [15000]; -#endif - pos = 0; - } - - public override string ToString () - { - return string.Format ("Token '{0}' at {1},{2}", Value, row, column); - } - - public Location Location { - get { return new Location (row, column); } - } - - public string Value { - get { return value; } + token = Create (file, row, col); } } @@ -174,6 +184,7 @@ namespace Mono.CSharp readonly SeekableStreamReader reader; readonly CompilationSourceFile source_file; + public CompilationSourceFile SourceFile { get { return source_file; } } readonly CompilerContext context; SourceFile current_source; @@ -192,6 +203,7 @@ namespace Mono.CSharp List<Location> escaped_identifiers; int parsing_generic_less_than; readonly bool doc_processing; + readonly LocatedTokenBuffer ltb; // // Used mainly for parser optimizations. Some expressions for instance @@ -355,27 +367,15 @@ namespace Mono.CSharp // Stack<int> ifstack; - const int max_id_size = 512; - const int max_number_size = 512; + public const int MaxIdentifierLength = 512; + public const int MaxNumberLength = 512; -#if FULL_AST - readonly char [] id_builder = new char [max_id_size]; - - Dictionary<char[], string>[] identifiers = new Dictionary<char[], string>[max_id_size + 1]; - - char [] number_builder = new char [max_number_size]; + readonly char[] id_builder; + readonly Dictionary<char[], string>[] identifiers; + readonly char[] number_builder; int number_pos; - char[] value_builder = new char[256]; -#else - static readonly char [] id_builder = new char [max_id_size]; - - static Dictionary<char[], string>[] identifiers = new Dictionary<char[], string>[max_id_size + 1]; - - static char [] number_builder = new char [max_number_size]; - static int number_pos; - static char[] value_builder = new char[256]; -#endif + char[] value_builder = new char[64]; public int Line { get { @@ -430,11 +430,15 @@ namespace Mono.CSharp } } - public Tokenizer (SeekableStreamReader input, CompilationSourceFile file) + public Tokenizer (SeekableStreamReader input, CompilationSourceFile file, ParserSession session) { this.source_file = file; this.context = file.Compiler; this.current_source = file.SourceFile; + this.identifiers = session.Identifiers; + this.id_builder = session.IDBuilder; + this.number_builder = session.NumberBuilder; + this.ltb = new LocatedTokenBuffer (session.LocatedTokens); reader = input; @@ -444,8 +448,6 @@ namespace Mono.CSharp doc_processing = context.Settings.DocumentationFile != null; tab_size = context.Settings.TabSize; - - Mono.CSharp.Location.Push (current_source); } public void PushPosition () @@ -829,11 +831,13 @@ namespace Mono.CSharp PushPosition (); xtoken (); if (xtoken () != Token.ARROW) - res = -1; + goto default; PopPosition (); break; default: + // peek_token could overwrite id_buffer + id_builder [0] = 'a'; id_builder [1] = 's'; id_builder [2] = 'y'; id_builder [3] = 'n'; id_builder [4] = 'c'; res = -1; break; } @@ -891,7 +895,7 @@ namespace Mono.CSharp public Location Location { get { - return new Location (ref_line, col); + return new Location (current_source, ref_line, col); } } @@ -1104,11 +1108,14 @@ namespace Mono.CSharp start: int the_token = token (); if (the_token == Token.OPEN_BRACKET) { - do { + while (true) { the_token = token (); if (the_token == Token.EOF) - return false; - } while (the_token != Token.CLOSE_BRACKET); + return true; + + if (the_token == Token.CLOSE_BRACKET) + break; + } the_token = token (); } else if (the_token == Token.IN || the_token == Token.OUT) { the_token = token (); @@ -1321,7 +1328,7 @@ namespace Mono.CSharp bool seen_digits = false; if (c != -1){ - if (number_pos == max_number_size) + if (number_pos == MaxNumberLength) Error_NumericConstantTooLong (); number_builder [number_pos++] = (char) c; } @@ -1332,7 +1339,7 @@ namespace Mono.CSharp // while ((d = peek_char2 ()) != -1){ if (d >= '0' && d <= '9'){ - if (number_pos == max_number_size) + if (number_pos == MaxNumberLength) Error_NumericConstantTooLong (); number_builder [number_pos++] = (char) d; get_char (); @@ -1597,23 +1604,23 @@ namespace Mono.CSharp if (c == 'e' || c == 'E'){ is_real = true; - if (number_pos == max_number_size) + if (number_pos == MaxNumberLength) Error_NumericConstantTooLong (); number_builder [number_pos++] = (char) c; c = get_char (); if (c == '+'){ - if (number_pos == max_number_size) + if (number_pos == MaxNumberLength) Error_NumericConstantTooLong (); number_builder [number_pos++] = '+'; c = -1; } else if (c == '-') { - if (number_pos == max_number_size) + if (number_pos == MaxNumberLength) Error_NumericConstantTooLong (); number_builder [number_pos++] = '-'; c = -1; } else { - if (number_pos == max_number_size) + if (number_pos == MaxNumberLength) Error_NumericConstantTooLong (); number_builder [number_pos++] = '+'; } @@ -1962,7 +1969,7 @@ namespace Mono.CSharp } if (pos != 0) { - if (pos > max_id_size) + if (pos > MaxIdentifierLength) arg = new string (value_builder, 0, pos); else arg = InternIdentifier (value_builder, pos); @@ -1997,7 +2004,6 @@ namespace Mono.CSharp } //ref_line = line; - Location.Push (current_source); return true; } @@ -2084,7 +2090,6 @@ namespace Mono.CSharp if (new_file_name != null) { current_source = context.LookupFile (source_file, new_file_name); source_file.AddIncludeFile (current_source); - Location.Push (current_source); } if (!hidden_block_start.IsNull) { @@ -2182,6 +2187,8 @@ namespace Mono.CSharp // // The syntax is ` "foo.txt" "{guid}" "hash"' // + // guid is predefined hash algorithm guid {406ea660-64cf-4c82-b6f0-42d48172a799} for md5 + // int c = get_char (); if (c != '"') @@ -2244,6 +2251,7 @@ namespace Mono.CSharp // Any length of checksum List<byte> checksum_bytes = new List<byte> (16); + var checksum_location = Location; c = peek_char (); while (c != '"' && c != -1) { checksum_bytes.Add (read_hex (out error)); @@ -2259,14 +2267,23 @@ namespace Mono.CSharp return false; } - file.SetChecksum (guid_bytes, checksum_bytes.ToArray ()); - current_source.AutoGenerated = true; + if (context.Settings.GenerateDebugInfo) { + var chsum = checksum_bytes.ToArray (); + + if (file.HasChecksum) { + if (!ArrayComparer.IsEqual (file.Checksum, chsum)) { + // TODO: Report.SymbolRelatedToPreviousError + Report.Warning (1697, 1, checksum_location, "Different checksum values specified for file `{0}'", file.Name); + } + } + + file.SetChecksum (guid_bytes, chsum); + current_source.AutoGenerated = true; + } + return true; } -#if !FULL_AST - static -#endif bool IsTokenIdentifierEqual (char[] identifier) { for (int i = 0; i < identifier.Length; ++i) { @@ -3008,7 +3025,7 @@ namespace Mono.CSharp if (id_builder [0] >= '_' && !quoted) { int keyword = GetKeyword (id_builder, pos); if (keyword != -1) { - val = LocatedToken.Create (keyword == Token.AWAIT ? "await" : null, ref_line, column); + val = ltb.Create (keyword == Token.AWAIT ? "await" : null, current_source, ref_line, column); return keyword; } } @@ -3016,12 +3033,12 @@ namespace Mono.CSharp string s = InternIdentifier (id_builder, pos); #if FULL_AST if (quoted) { - val = LocatedToken.Create ("@" + s, ref_line, column - 1); + val = ltb.Create ("@" + s, current_source, ref_line, column - 1); } else { - val = LocatedToken.Create (s, ref_line, column); + val = ltb.Create (s, current_source, ref_line, column); } #else - val = LocatedToken.Create (s, ref_line, column); + val = ltb.Create (s, current_source, ref_line, column); #endif if (quoted && parsing_attribute_section) AddEscapedIdentifier (((LocatedToken) val).Location); @@ -3029,9 +3046,6 @@ namespace Mono.CSharp return Token.IDENTIFIER; } -#if !FULL_AST - static -#endif string InternIdentifier (char[] charBuffer, int length) { // @@ -3097,17 +3111,17 @@ namespace Mono.CSharp return consume_identifier (c); case '{': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); return Token.OPEN_BRACE; case '}': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); return Token.CLOSE_BRACE; case '[': // To block doccomment inside attribute declaration. if (doc_state == XmlCommentState.Allowed) doc_state = XmlCommentState.NotAllowed; - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); if (parsing_block == 0 || lambda_arguments_parsing) return Token.OPEN_BRACKET; @@ -3133,10 +3147,10 @@ namespace Mono.CSharp return Token.OPEN_BRACKET_EXPR; } case ']': - LocatedToken.CreateOptional (ref_line, col, ref val); + ltb.CreateOptional (current_source, ref_line, col, ref val); return Token.CLOSE_BRACKET; case '(': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); // // An expression versions of parens can appear in block context only // @@ -3181,29 +3195,29 @@ namespace Mono.CSharp return Token.OPEN_PARENS; case ')': - LocatedToken.CreateOptional (ref_line, col, ref val); + ltb.CreateOptional (current_source, ref_line, col, ref val); return Token.CLOSE_PARENS; case ',': - LocatedToken.CreateOptional (ref_line, col, ref val); + ltb.CreateOptional (current_source, ref_line, col, ref val); return Token.COMMA; case ';': - LocatedToken.CreateOptional (ref_line, col, ref val); + ltb.CreateOptional (current_source, ref_line, col, ref val); return Token.SEMICOLON; case '~': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); return Token.TILDE; case '?': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); return TokenizePossibleNullableType (); case '<': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); if (parsing_generic_less_than++ > 0) return Token.OP_GENERICS_LT; return TokenizeLessThan (); case '>': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); d = peek_char (); if (d == '=') { @@ -3230,7 +3244,7 @@ namespace Mono.CSharp return Token.OP_GT; case '+': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); d = peek_char (); if (d == '+') { d = Token.OP_INC; @@ -3243,7 +3257,7 @@ namespace Mono.CSharp return d; case '-': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); d = peek_char (); if (d == '-') { d = Token.OP_DEC; @@ -3258,15 +3272,15 @@ namespace Mono.CSharp return d; case '!': - val = LocatedToken.Create (ref_line, col); - if (peek_char () == '=') { + val = ltb.Create (current_source, ref_line, col); + if (peek_char () == '='){ get_char (); return Token.OP_NE; } return Token.BANG; case '=': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); d = peek_char (); if (d == '=') { get_char (); @@ -3280,7 +3294,7 @@ namespace Mono.CSharp return Token.ASSIGN; case '&': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); d = peek_char (); if (d == '&') { get_char (); @@ -3293,7 +3307,7 @@ namespace Mono.CSharp return Token.BITWISE_AND; case '|': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); d = peek_char (); if (d == '|') { get_char (); @@ -3306,8 +3320,8 @@ namespace Mono.CSharp return Token.BITWISE_OR; case '*': - val = LocatedToken.Create (ref_line, col); - if (peek_char () == '=') { + val = ltb.Create (current_source, ref_line, col); + if (peek_char () == '='){ get_char (); return Token.OP_MULT_ASSIGN; } @@ -3315,8 +3329,8 @@ namespace Mono.CSharp case '/': d = peek_char (); - if (d == '=') { - val = LocatedToken.Create (ref_line, col); + if (d == '='){ + val = ltb.Create (current_source, ref_line, col); get_char (); return Token.OP_DIV_ASSIGN; } @@ -3425,11 +3439,11 @@ namespace Mono.CSharp update_formatted_doc_comment (current_comment_start); continue; } - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); return Token.DIV; case '%': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); if (peek_char () == '='){ get_char (); return Token.OP_MOD_ASSIGN; @@ -3437,7 +3451,7 @@ namespace Mono.CSharp return Token.PERCENT; case '^': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); if (peek_char () == '='){ get_char (); return Token.OP_XOR_ASSIGN; @@ -3445,7 +3459,7 @@ namespace Mono.CSharp return Token.CARRET; case ':': - val = LocatedToken.Create (ref_line, col); + val = ltb.Create (current_source, ref_line, col); if (peek_char () == ':') { get_char (); return Token.DOUBLE_COLON; @@ -3469,7 +3483,7 @@ namespace Mono.CSharp if (d >= '0' && d <= '9') return is_number (c); - LocatedToken.CreateOptional (ref_line, col, ref val); + ltb.CreateOptional (current_source, ref_line, col, ref val); return Token.DOT; case '#': diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs index 19c79512f3..11eca1e7e5 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/decl.cs @@ -608,7 +608,7 @@ namespace Mono.CSharp { if (al == Modifiers.PRIVATE) { var decl = mc.Parent; do { - same_access_restrictions = decl.CurrentType == p_parent; + same_access_restrictions = decl.CurrentType.MemberDefinition == p_parent.MemberDefinition; } while (!same_access_restrictions && !decl.PartialContainer.IsTopLevel && (decl = decl.Parent) != null); } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs index f0781401bb..f2923aa5b1 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/delegate.cs @@ -520,8 +520,11 @@ namespace Mono.CSharp { } TypeSpec rt = delegate_method.ReturnType; + if (rt.BuiltinType == BuiltinTypeSpec.Type.Dynamic) + rt = ec.BuiltinTypes.Object; + if (!Delegate.IsTypeCovariant (ec, rt, invoke_method.ReturnType)) { - Expression ret_expr = new TypeExpression (rt, loc); + Expression ret_expr = new TypeExpression (delegate_method.ReturnType, loc); Error_ConversionFailed (ec, delegate_method, ret_expr); } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs index e988178c43..6cc53d5053 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/doc.cs @@ -47,6 +47,8 @@ namespace Mono.CSharp // Dictionary<string, XmlDocument> StoredDocuments = new Dictionary<string, XmlDocument> (); + ParserSession session; + public DocumentationBuilder (ModuleContainer module) { doc_module = new ModuleContainer (module.Compiler); @@ -324,12 +326,18 @@ namespace Mono.CSharp var encoding = module.Compiler.Settings.Encoding; var s = new MemoryStream (encoding.GetBytes (cref)); - SeekableStreamReader seekable = new SeekableStreamReader (s, encoding); - var source_file = new CompilationSourceFile (doc_module); + var source_file = new CompilationSourceFile (doc_module, mc.Location.SourceFile); var report = new Report (doc_module.Compiler, new NullReportPrinter ()); - var parser = new CSharpParser (seekable, source_file, report); + if (session == null) + session = new ParserSession () { + UseJayGlobalArrays = true + }; + + SeekableStreamReader seekable = new SeekableStreamReader (s, encoding, session.StreamReaderBuffer); + + var parser = new CSharpParser (seekable, source_file, report, session); ParsedParameters = null; ParsedName = null; ParsedBuiltinType = null; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs index e86263da6c..1aabb3b750 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/driver.cs @@ -20,6 +20,7 @@ using System.IO; using System.Text; using System.Globalization; using System.Diagnostics; +using System.Threading; namespace Mono.CSharp { @@ -41,7 +42,7 @@ namespace Mono.CSharp } } - void tokenize_file (SourceFile sourceFile, ModuleContainer module) + void tokenize_file (SourceFile sourceFile, ModuleContainer module, ParserSession session) { Stream input; @@ -56,7 +57,7 @@ namespace Mono.CSharp SeekableStreamReader reader = new SeekableStreamReader (input, ctx.Settings.Encoding); var file = new CompilationSourceFile (module, sourceFile); - Tokenizer lexer = new Tokenizer (reader, file); + Tokenizer lexer = new Tokenizer (reader, file, session); int token, tokens = 0, errors = 0; while ((token = lexer.token ()) != Token.EOF){ @@ -77,48 +78,95 @@ namespace Mono.CSharp Location.Initialize (sources); + var session = new ParserSession () { + UseJayGlobalArrays = true, + LocatedTokens = new Tokenizer.LocatedToken[15000] + }; + for (int i = 0; i < sources.Count; ++i) { if (tokenize_only) { - tokenize_file (sources[i], module); + tokenize_file (sources[i], module, session); } else { - Parse (sources[i], module); + Parse (sources[i], module, session, Report); } } } - public void Parse (SourceFile file, ModuleContainer module) +#if false + void ParseParallel (ModuleContainer module) + { + var sources = module.Compiler.SourceFiles; + + Location.Initialize (sources); + + var pcount = Environment.ProcessorCount; + var threads = new Thread[System.Math.Max (2, pcount - 1)]; + + for (int i = 0; i < threads.Length; ++i) { + var t = new Thread (l => { + var session = new ParserSession () { + //UseJayGlobalArrays = true, + }; + + var report = new Report (ctx, Report.Printer); // TODO: Implement flush at once printer + + for (int ii = (int) l; ii < sources.Count; ii += threads.Length) { + Parse (sources[ii], module, session, report); + } + + // TODO: Merge warning regions + }); + + t.Start (i); + threads[i] = t; + } + + for (int t = 0; t < threads.Length; ++t) { + threads[t].Join (); + } + } +#endif + + public void Parse (SourceFile file, ModuleContainer module, ParserSession session, Report report) { Stream input; try { input = File.OpenRead (file.Name); } catch { - Report.Error (2001, "Source file `{0}' could not be found", file.Name); + report.Error (2001, "Source file `{0}' could not be found", file.Name); return; } // Check 'MZ' header if (input.ReadByte () == 77 && input.ReadByte () == 90) { - Report.Error (2015, "Source file `{0}' is a binary file and not a text file", file.Name); + report.Error (2015, "Source file `{0}' is a binary file and not a text file", file.Name); input.Close (); return; } input.Position = 0; - SeekableStreamReader reader = new SeekableStreamReader (input, ctx.Settings.Encoding); + SeekableStreamReader reader = new SeekableStreamReader (input, ctx.Settings.Encoding, session.StreamReaderBuffer); + + Parse (reader, file, module, session, report); + + if (ctx.Settings.GenerateDebugInfo && report.Errors == 0 && !file.HasChecksum) { + input.Position = 0; + var checksum = session.GetChecksumAlgorithm (); + file.SetChecksum (checksum.ComputeHash (input)); + } - Parse (reader, file, module); reader.Dispose (); input.Close (); } - public static CSharpParser Parse(SeekableStreamReader reader, SourceFile sourceFile, ModuleContainer module, int lineModifier = 0) + public static CSharpParser Parse (SeekableStreamReader reader, SourceFile sourceFile, ModuleContainer module, ParserSession session, Report report, int lineModifier = 0) { var file = new CompilationSourceFile (module, sourceFile); module.AddTypeContainer(file); - CSharpParser parser = new CSharpParser (reader, file); + CSharpParser parser = new CSharpParser (reader, file, report, session); parser.Lexer.Line += lineModifier; parser.Lexer.sbag = new SpecialsBag (); parser.parse (); @@ -347,7 +395,8 @@ namespace Mono.CSharp tr.Stop (TimeReporter.TimerType.CloseTypes); tr.Start (TimeReporter.TimerType.Resouces); - assembly.EmbedResources (); + if (!settings.WriteMetadataOnly) + assembly.EmbedResources (); tr.Stop (TimeReporter.TimerType.Resouces); if (Report.Errors > 0) @@ -369,6 +418,7 @@ namespace Mono.CSharp public ModuleContainer ModuleCompiled { get; set; } public LocationsBag LocationsBag { get; set; } public SpecialsBag SpecialsBag { get; set; } + public IEnumerable<string> Conditionals { get; set; } public object LastYYValue { get; set; } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs index c9cea6927c..b9d6967dcc 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/dynamic.cs @@ -502,7 +502,7 @@ namespace Mono.CSharp using (ec.With (BuilderContext.Options.OmitDebugInfo, true)) { if (s.Resolve (bc)) { - Statement init = new If (new Binary (Binary.Operator.Equality, site_field_expr, new NullLiteral (loc), loc), s, loc); + Statement init = new If (new Binary (Binary.Operator.Equality, site_field_expr, new NullLiteral (loc)), s, loc); init.Emit (ec); } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs index 7629e4e8f5..cf1de9483e 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/ecore.cs @@ -2277,9 +2277,11 @@ namespace Mono.CSharp { } } + var report = ctx.Module.Compiler.Report; + var retval = ctx.LookupNamespaceOrType (Name, Arity, LookupMode.IgnoreAccessibility, loc); if (retval != null) { - ctx.Module.Compiler.Report.SymbolRelatedToPreviousError (retval.Type); + report.SymbolRelatedToPreviousError (retval.Type); ErrorIsInaccesible (ctx, retval.GetSignatureForError (), loc); return; } @@ -2290,7 +2292,17 @@ namespace Mono.CSharp { return; } - NamespaceContainer.Error_NamespaceNotFound (loc, Name, ctx.Module.Compiler.Report); + var ns_candidates = ctx.Module.GlobalRootNamespace.FindTypeNamespaces (ctx, Name, Arity); + if (ns_candidates != null) { + string usings = string.Join ("' or `", ns_candidates.ToArray ()); + report.Error (246, loc, + "The type or namespace name `{0}' could not be found. Are you missing `{1}' using directive?", + Name, usings); + } else { + report.Error (246, loc, + "The type or namespace name `{0}' could not be found. Are you missing an assembly reference?", + Name); + } } public override FullNamedExpression ResolveAsTypeOrNamespace (IMemberContext ec) @@ -3176,8 +3188,12 @@ namespace Mono.CSharp { } var me = ExtensionExpression as MemberExpr; - if (me != null) + if (me != null) { me.ResolveInstanceExpression (ec, null); + var fe = me as FieldExpr; + if (fe != null) + fe.Spec.MemberDefinition.SetIsUsed (); + } InstanceExpression = null; return this; @@ -3447,6 +3463,21 @@ namespace Mono.CSharp { best_candidate_return = best_candidate.ReturnType; } + if (best_candidate.IsGeneric && TypeParameterSpec.HasAnyTypeParameterConstrained (best_candidate.GenericDefinition)) { + ConstraintChecker cc = new ConstraintChecker (ec); + cc.CheckAll (best_candidate.GetGenericMethodDefinition (), best_candidate.TypeArguments, best_candidate.Constraints, loc); + } + + // + // Additional check for possible imported base override method which + // could not be done during IsOverrideMethodBaseTypeAccessible + // + if (best_candidate.IsVirtual && (best_candidate.DeclaringType.Modifiers & Modifiers.PROTECTED) != 0 && + best_candidate.MemberDefinition.IsImported && !best_candidate.DeclaringType.IsAccessible (ec)) { + ec.Report.SymbolRelatedToPreviousError (best_candidate); + ErrorIsInaccesible (ec, best_candidate.GetSignatureForError (), loc); + } + return this; } @@ -3738,7 +3769,9 @@ namespace Mono.CSharp { if (!TypeSpecComparer.Equals (p_m.Parameters.Types, q_m.Parameters.Types)) return 0; + var orig_p = p; p = p_m.ReturnType; + var orig_q = q; q = q_m.ReturnType; // @@ -3755,14 +3788,14 @@ namespace Mono.CSharp { return p.Kind != MemberKind.Void ? 1: 0; } + var am = (AnonymousMethodExpression) a.Expr; + // // When anonymous method is an asynchronous, and P has a return type Task<Y1>, and Q has a return type Task<Y2> // better conversion is performed between underlying types Y1 and Y2 // if (p.IsGenericTask || q.IsGenericTask) { - var async_am = a.Expr as AnonymousMethodExpression; - if (async_am != null && async_am.Block.IsAsync) { - + if (am.Block.IsAsync) { if (p.IsGenericTask != q.IsGenericTask) { return 0; } @@ -3770,6 +3803,19 @@ namespace Mono.CSharp { q = q.TypeArguments[0]; p = p.TypeArguments[0]; } + } else if (q != p) { + // + // LAMESPEC: Lambda expression returning dynamic type has identity (better) conversion to delegate returning object type + // + if (q.BuiltinType == BuiltinTypeSpec.Type.Object) { + var am_rt = am.InferReturnType (ec, null, orig_q); + if (am_rt != null && am_rt.BuiltinType == BuiltinTypeSpec.Type.Dynamic) + return 2; + } else if (p.BuiltinType == BuiltinTypeSpec.Type.Object) { + var am_rt = am.InferReturnType (ec, null, orig_p); + if (am_rt != null && am_rt.BuiltinType == BuiltinTypeSpec.Type.Dynamic) + return 1; + } } // @@ -4048,6 +4094,32 @@ namespace Mono.CSharp { return false; } + static bool CheckInflatedArguments (MethodSpec ms) + { + if (!TypeParameterSpec.HasAnyTypeParameterTypeConstrained (ms.GenericDefinition)) + return true; + + // Setup constraint checker for probing only + ConstraintChecker cc = new ConstraintChecker (null); + + var mp = ms.Parameters.Types; + for (int i = 0; i < mp.Length; ++i) { + var type = mp[i] as InflatedTypeSpec; + if (type == null) + continue; + + var targs = type.TypeArguments; + if (targs.Length == 0) + continue; + + // TODO: Checking inflated MVAR arguments should be enough + if (!cc.CheckAll (type.GetDefinition (), targs, type.Constraints, Location.Null)) + return false; + } + + return true; + } + public static void Error_ConstructorMismatch (ResolveContext rc, TypeSpec type, int argCount, Location loc) { rc.Report.Error (1729, loc, @@ -4203,9 +4275,6 @@ namespace Mono.CSharp { TypeSpec[] ptypes; var ms = candidate as MethodSpec; if (ms != null && ms.IsGeneric) { - // Setup constraint checker for probing only - ConstraintChecker cc = new ConstraintChecker (null); - if (type_arguments != null) { var g_args_count = ms.Arity; if (g_args_count != type_arguments.Count) @@ -4251,14 +4320,12 @@ namespace Mono.CSharp { if (i_args.Length != 0) { ms = ms.MakeGenericMethod (ec, i_args); } - - cc.IgnoreInferredDynamic = true; } // // Type arguments constraints have to match for the method to be applicable // - if (!cc.CheckAll (ms.GetGenericMethodDefinition (), ms.TypeArguments, ms.Constraints, loc)) { + if (!CheckInflatedArguments (ms)) { candidate = ms; return int.MaxValue - 25000; } @@ -4485,7 +4552,7 @@ namespace Mono.CSharp { return p; if (specific == ac_q.Element) return q; - } else if (TypeManager.IsGenericType (p)) { + } else if (p.IsGeneric && q.IsGeneric) { var pargs = TypeManager.GetTypeArguments (p); var qargs = TypeManager.GetTypeArguments (q); @@ -4721,6 +4788,17 @@ namespace Mono.CSharp { args [0].Type.GetSignatureForError (), best_candidate.Name, best_candidate.GetSignatureForError ()); } + // + // Check type constraints only when explicit type arguments are used + // + if (best_candidate.IsGeneric && type_arguments != null) { + MethodSpec bc = best_candidate as MethodSpec; + if (bc != null && TypeParameterSpec.HasAnyTypeParameterConstrained (bc.GenericDefinition)) { + ConstraintChecker cc = new ConstraintChecker (rc); + cc.CheckAll (bc.GetGenericMethodDefinition (), bc.TypeArguments, bc.Constraints, loc); + } + } + BestCandidateIsDynamic = true; return null; } @@ -5279,6 +5357,8 @@ namespace Mono.CSharp { protected override Expression DoResolve (ResolveContext ec) { + spec.MemberDefinition.SetIsUsed (); + return DoResolve (ec, null); } @@ -5498,8 +5578,6 @@ namespace Mono.CSharp { { bool is_volatile = (spec.Modifiers & Modifiers.VOLATILE) != 0; - spec.MemberDefinition.SetIsUsed (); - if (IsStatic){ if (is_volatile) ec.Emit (OpCodes.Volatile); diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs index 6eb283b4c8..0d1264516c 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/eval.cs @@ -79,7 +79,7 @@ namespace Mono.CSharp module = new ModuleContainer (ctx); module.Evaluator = this; - source_file = new CompilationSourceFile (module); + source_file = new CompilationSourceFile (module, null); module.AddTypeContainer (source_file); startup_files = ctx.SourceFiles.Count; @@ -115,9 +115,10 @@ namespace Mono.CSharp Location.Initialize (ctx.SourceFiles); + var parser_session = new ParserSession (); for (int i = 0; i < startup_files; ++i) { var sf = ctx.SourceFiles [i]; - d.Parse (sf, module); + d.Parse (sf, module, parser_session, ctx.Report); } } @@ -442,7 +443,7 @@ namespace Mono.CSharp // InputKind ToplevelOrStatement (SeekableStreamReader seekable) { - Tokenizer tokenizer = new Tokenizer (seekable, source_file); + Tokenizer tokenizer = new Tokenizer (seekable, source_file, new ParserSession ()); int t = tokenizer.token (); switch (t){ @@ -571,7 +572,7 @@ namespace Mono.CSharp seekable.Position = 0; source_file.DeclarationFound = false; - CSharpParser parser = new CSharpParser (seekable, source_file); + CSharpParser parser = new CSharpParser (seekable, source_file, new ParserSession ()); if (kind == InputKind.StatementOrExpression){ parser.Lexer.putback_char = Tokenizer.EvalStatementParserCharacter; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs index f24537f246..458df5c491 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/expression.cs @@ -1211,7 +1211,7 @@ namespace Mono.CSharp var one = new IntConstant (ec.BuiltinTypes, 1, loc); var op = IsDecrement ? Binary.Operator.Subtraction : Binary.Operator.Addition; - operation = new Binary (op, source, one, loc); + operation = new Binary (op, source, one); operation = operation.Resolve (ec); if (operation == null) throw new NotImplementedException ("should not be reached"); @@ -1527,7 +1527,7 @@ namespace Mono.CSharp // Turn is check into simple null check for implicitly convertible reference types // return ReducedExpression.Create ( - new Binary (Binary.Operator.Inequality, expr, new NullLiteral (loc), loc).Resolve (ec), + new Binary (Binary.Operator.Inequality, expr, new NullLiteral (loc)).Resolve (ec), this).Resolve (ec); } @@ -2014,7 +2014,7 @@ namespace Mono.CSharp // b = b.left >> b.right & (0x1f|0x3f) // b.right = new Binary (Operator.BitwiseAnd, - b.right, new IntConstant (ec.BuiltinTypes, right_mask, b.right.Location), b.loc).Resolve (ec); + b.right, new IntConstant (ec.BuiltinTypes, right_mask, b.right.Location)).Resolve (ec); // // Expression tree representation does not use & mask @@ -2202,19 +2202,19 @@ namespace Mono.CSharp protected State state; Expression enum_conversion; - public Binary (Operator oper, Expression left, Expression right, bool isCompound, Location loc) - : this (oper, left, right, loc) + public Binary (Operator oper, Expression left, Expression right, bool isCompound) + : this (oper, left, right) { if (isCompound) state |= State.Compound; } - public Binary (Operator oper, Expression left, Expression right, Location loc) + public Binary (Operator oper, Expression left, Expression right) { this.oper = oper; this.left = left; this.right = right; - this.loc = loc; + this.loc = left.Location; } #region Properties @@ -2319,7 +2319,7 @@ namespace Mono.CSharp public static void Error_OperatorCannotBeApplied (ResolveContext ec, Expression left, Expression right, Operator oper, Location loc) { - new Binary (oper, left, right, loc).Error_OperatorCannotBeApplied (ec, left, right); + new Binary (oper, left, right).Error_OperatorCannotBeApplied (ec, left, right); } public static void Error_OperatorCannotBeApplied (ResolveContext ec, Expression left, Expression right, string oper, Location loc) @@ -3031,7 +3031,7 @@ namespace Mono.CSharp (TypeSpec.IsValueType (left.Type) && right is NullLiteral) || (right.Type.IsNullableType && (left is NullLiteral || left.Type.IsNullableType || TypeSpec.IsValueType (left.Type))) || (TypeSpec.IsValueType (right.Type) && left is NullLiteral))) { - var lifted = new Nullable.LiftedBinaryOperator (oper, left, right, loc); + var lifted = new Nullable.LiftedBinaryOperator (oper, left, right); lifted.state = state; return lifted.Resolve (ec); } @@ -4409,7 +4409,7 @@ namespace Mono.CSharp // TODO: Should be the checks resolve context sensitive? ResolveContext rc = new ResolveContext (ec.MemberContext, ResolveContext.Options.UnsafeScope); - right = new Binary (Binary.Operator.Multiply, right, right_const, loc).Resolve (rc); + right = new Binary (Binary.Operator.Multiply, right, right_const).Resolve (rc); if (right == null) return; } @@ -5264,8 +5264,10 @@ namespace Mono.CSharp { this.expr = expr; this.arguments = arguments; - if (expr != null) - loc = expr.Location; + if (expr != null) { + var ma = expr as MemberAccess; + loc = ma != null ? ma.GetLeftExpressionLocation () : expr.Location; + } } #region Properties @@ -6154,7 +6156,7 @@ namespace Mono.CSharp { if (initializers != null && bounds == null) { // - // We use this to store all the date values in the order in which we + // We use this to store all the data values in the order in which we // will need to store them in the byte blob later // array_data = new List<Expression> (); @@ -6212,7 +6214,16 @@ namespace Mono.CSharp ec.Report.Error (623, loc, "Array initializers can only be used in a variable or field initializer. Try using a new expression instead"); return false; } - + + // When we don't have explicitly specified dimensions, record whatever dimension we first encounter at each level + if (!bounds.ContainsKey(idx + 1)) + bounds[idx + 1] = sub_probe.Count; + + if (bounds[idx + 1] != sub_probe.Count) { + ec.Report.Error(847, sub_probe.Location, "An array initializer of length `{0}' was expected", bounds[idx + 1].ToString()); + return false; + } + bool ret = CheckIndices (ec, sub_probe, idx + 1, specified_dims, child_bounds - 1); if (!ret) return false; @@ -7932,6 +7943,18 @@ namespace Mono.CSharp expr.Error_OperatorCannotBeApplied (rc, loc, ".", type); } + public Location GetLeftExpressionLocation () + { + Expression expr = LeftExpression; + MemberAccess ma = expr as MemberAccess; + while (ma != null && ma.LeftExpression != null) { + expr = ma.LeftExpression; + ma = expr as MemberAccess; + } + + return expr == null ? Location : expr.Location; + } + public static bool IsValidDotExpression (TypeSpec type) { const MemberKind dot_kinds = MemberKind.Class | MemberKind.Struct | MemberKind.Delegate | MemberKind.Enum | @@ -8252,9 +8275,19 @@ namespace Mono.CSharp { if (ec.Module.Compiler.Settings.Version > LanguageVersion.ISO_2 && !ec.IsRuntimeBinder && MethodGroupExpr.IsExtensionMethodArgument (expr)) { ec.Report.SymbolRelatedToPreviousError (type); + + var cand = ec.Module.GlobalRootNamespace.FindExtensionMethodNamespaces (ec, type, name, Arity); + string missing; + // a using directive or an assembly reference + if (cand != null) { + missing = "`" + string.Join ("' or `", cand.ToArray ()) + "' using directive"; + } else { + missing = "an assembly reference"; + } + ec.Report.Error (1061, loc, - "Type `{0}' does not contain a definition for `{1}' and no extension method `{1}' of type `{0}' could be found (are you missing a using directive or an assembly reference?)", - type.GetSignatureForError (), name); + "Type `{0}' does not contain a definition for `{1}' and no extension method `{1}' of type `{0}' could be found. Are you missing {2}?", + type.GetSignatureForError (), name, missing); return; } @@ -9461,7 +9494,7 @@ namespace Mono.CSharp this.left = left; this.spec = spec; - this.loc = spec.Location; + this.loc = left.Location; } public override TypeSpec ResolveAsType (IMemberContext ec) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs index d38ecc945a..580b192a6f 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/field.cs @@ -640,13 +640,12 @@ namespace Mono.CSharp } if (initializer != null) { - Parent.RegisterFieldForInitialization (this, - new FieldInitializer (spec, initializer, this)); + Parent.RegisterFieldForInitialization (this, new FieldInitializer (this, initializer, TypeExpression.Location)); } if (declarators != null) { - var t = new TypeExpression (MemberType, TypeExpression.Location); foreach (var d in declarators) { + var t = new TypeExpression (MemberType, d.Name.Location); var f = new Field (Parent, t, ModFlags, new MemberName (d.Name.Value, d.Name.Location), OptAttributes); if (d.Initializer != null) f.initializer = d.Initializer; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs index 2922ff5891..9bf70dc768 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/generic.cs @@ -737,6 +737,12 @@ namespace Mono.CSharp { } } + public bool HasAnyTypeConstraint { + get { + return (spec & (SpecialConstraint.Class | SpecialConstraint.Struct)) != 0 || ifaces != null || targs != null || HasTypeConstraint; + } + } + public bool HasTypeConstraint { get { var bt = BaseType.BuiltinType; @@ -1226,6 +1232,30 @@ namespace Mono.CSharp { return false; } + public static bool HasAnyTypeParameterTypeConstrained (IGenericMethodDefinition md) + { + var tps = md.TypeParameters; + for (int i = 0; i < md.TypeParametersCount; ++i) { + if (tps[i].HasAnyTypeConstraint) { + return true; + } + } + + return false; + } + + public static bool HasAnyTypeParameterConstrained (IGenericMethodDefinition md) + { + var tps = md.TypeParameters; + for (int i = 0; i < md.TypeParametersCount; ++i) { + if (tps[i].IsConstrained) { + return true; + } + } + + return false; + } + public override TypeSpec Mutate (TypeParameterMutator mutator) { return mutator.Mutate (this); @@ -2224,29 +2254,14 @@ namespace Mono.CSharp { struct ConstraintChecker { IMemberContext mc; - bool ignore_inferred_dynamic; bool recursive_checks; public ConstraintChecker (IMemberContext ctx) { this.mc = ctx; - ignore_inferred_dynamic = false; recursive_checks = false; } - #region Properties - - public bool IgnoreInferredDynamic { - get { - return ignore_inferred_dynamic; - } - set { - ignore_inferred_dynamic = value; - } - } - - #endregion - // // Checks the constraints of open generic type against type // arguments. This version is used for types which could not be @@ -2296,9 +2311,6 @@ namespace Mono.CSharp { public bool CheckAll (MemberSpec context, TypeSpec[] targs, TypeParameterSpec[] tparams, Location loc) { for (int i = 0; i < tparams.Length; i++) { - if (ignore_inferred_dynamic && targs[i].BuiltinType == BuiltinTypeSpec.Type.Dynamic) - continue; - var targ = targs[i]; if (!CheckConstraint (context, targ, tparams [i], loc)) return false; @@ -2446,14 +2458,6 @@ namespace Mono.CSharp { return true; } - // - // When partial/full type inference finds a dynamic type argument delay - // the constraint check to runtime, it can succeed for real underlying - // dynamic type - // - if (ignore_inferred_dynamic && HasDynamicTypeArgument (ttype.TypeArguments)) - return true; - if (mc != null) { mc.Module.Compiler.Report.SymbolRelatedToPreviousError (tparam); if (atype.IsGenericParameter) { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/import.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/import.cs index da3e3d7c70..605db44fb5 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/import.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/import.cs @@ -90,7 +90,7 @@ namespace Mono.CSharp if (cad.Count > 0) { foreach (var ca in cad) { var dt = ca.Constructor.DeclaringType; - if (dt.Name != "DynamicAttribute" && dt.Namespace != CompilerServicesNamespace) + if (dt.Name != "DynamicAttribute" || dt.Namespace != CompilerServicesNamespace) continue; if (ca.ConstructorArguments.Count == 0) { @@ -390,18 +390,21 @@ namespace Mono.CSharp if ((mod & Modifiers.OVERRIDE) != 0) { bool is_real_override = false; if (kind == MemberKind.Method && declaringType.BaseType != null) { - var filter = MemberFilter.Method (name, tparams != null ? tparams.Length : 0, parameters, null); - var candidate = MemberCache.FindMember (declaringType.BaseType, filter, BindingRestriction.None); - - // - // For imported class method do additional validation to be sure that metadata - // override flag was correct - // - // Difference between protected internal and protected is ok - // - const Modifiers conflict_mask = Modifiers.AccessibilityMask & ~Modifiers.INTERNAL; - if (candidate != null && (candidate.Modifiers & conflict_mask) == (mod & conflict_mask) && !candidate.IsStatic) { - is_real_override = true; + var btype = declaringType.BaseType; + if (IsOverrideMethodBaseTypeAccessible (btype)) { + var filter = MemberFilter.Method (name, tparams != null ? tparams.Length : 0, parameters, null); + var candidate = MemberCache.FindMember (btype, filter, BindingRestriction.None); + + // + // For imported class method do additional validation to be sure that metadata + // override flag was correct + // + // Difference between protected internal and protected is ok + // + const Modifiers conflict_mask = Modifiers.AccessibilityMask & ~Modifiers.INTERNAL; + if (candidate != null && (candidate.Modifiers & conflict_mask) == (mod & conflict_mask) && !candidate.IsStatic) { + is_real_override = true; + } } } @@ -434,6 +437,30 @@ namespace Mono.CSharp return ms; } + bool IsOverrideMethodBaseTypeAccessible (TypeSpec baseType) + { + switch (baseType.Modifiers & Modifiers.AccessibilityMask) { + case Modifiers.PUBLIC: + return true; + case Modifiers.INTERNAL: + // + // Check whether imported method in base type is accessible from compiled + // context + // + return baseType.MemberDefinition.IsInternalAsPublic (module.DeclaringAssembly); + case Modifiers.PRIVATE: + return false; + default: + // protected + // protected internal + // + // Method accessibility checks will be done later based on context + // where the method is called (CS0122 error will be reported for inaccessible) + // + return true; + } + } + // // Imports System.Reflection parameters // diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs index 337c378e55..e3cbf6dd10 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/location.cs @@ -52,13 +52,15 @@ namespace Mono.CSharp } } + static readonly byte[] MD5Algorith = { 96, 166, 110, 64, 207, 100, 130, 76, 182, 240, 66, 212, 129, 114, 167, 153 }; + public readonly string Name; public readonly string FullPathName; public readonly int Index; public bool AutoGenerated; SourceFileEntry file; - byte[] guid, checksum; + byte[] algGuid, checksum; List<LocationRegion> hidden_lines; public SourceFile (string name, string path, int index) @@ -68,15 +70,32 @@ namespace Mono.CSharp this.FullPathName = path; } + public byte[] Checksum { + get { + return checksum; + } + } + + public bool HasChecksum { + get { + return checksum != null; + } + } + public SourceFileEntry SourceFileEntry { get { return file; } } - public void SetChecksum (byte[] guid, byte[] checksum) + public void SetChecksum (byte[] checksum) { - this.guid = guid; + SetChecksum (MD5Algorith, checksum); + } + + public void SetChecksum (byte[] algorithmGuid, byte[] checksum) + { + this.algGuid = algorithmGuid; this.checksum = checksum; } @@ -85,13 +104,9 @@ namespace Mono.CSharp if (hidden_lines != null) hidden_lines.Sort (); - if (guid != null) { - file = new SourceFileEntry (symwriter, FullPathName, guid, checksum); - } else { - file = new SourceFileEntry (symwriter, FullPathName); - if (AutoGenerated) - file.SetAutoGenerated (); - } + file = new SourceFileEntry (symwriter, FullPathName, algGuid, checksum); + if (AutoGenerated) + file.SetAutoGenerated (); return file; } @@ -177,7 +192,6 @@ namespace Mono.CSharp const int max_column = column_mask; static List<SourceFile> source_list; - static int current_source; static Checkpoint [] checkpoints; static int checkpoint_index; @@ -192,7 +206,6 @@ namespace Mono.CSharp public static void Reset () { source_list = new List<SourceFile> (); - current_source = 0; checkpoint_index = 0; } @@ -220,13 +233,7 @@ namespace Mono.CSharp checkpoints [0] = new Checkpoint (0, 0); } - static public void Push (SourceFile file) - { - current_source = file != null ? file.Index : -1; - // File is always pushed before being changed. - } - - public Location (int row, int column) + public Location (SourceFile file, int row, int column) { if (row <= 0) token = 0; @@ -237,6 +244,9 @@ namespace Mono.CSharp long target = -1; long delta = 0; + // TODO: For eval only, need better handling of empty + int file_index = file == null ? 0 : file.Index; + // FIXME: This value is certainly wrong but what was the intension int max = checkpoint_index < 10 ? checkpoint_index : 10; @@ -245,13 +255,13 @@ namespace Mono.CSharp delta = row - offset; if (delta >= 0 && delta < (1 << line_delta_bits) && - checkpoints [checkpoint_index - i].File == current_source) { + checkpoints[checkpoint_index - i].File == file_index) { target = checkpoint_index - i; break; } } if (target == -1) { - AddCheckpoint (current_source, row); + AddCheckpoint (file_index, row); target = checkpoint_index; delta = row % (1 << line_delta_bits); } @@ -269,7 +279,7 @@ namespace Mono.CSharp public static Location operator - (Location loc, int columns) { - return new Location (loc.Row, loc.Column - columns); + return new Location (loc.SourceFile, loc.Row, loc.Column - columns); } static void AddCheckpoint (int file, int row) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs index 5374da9db9..9ff3168869 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/membercache.cs @@ -435,12 +435,15 @@ namespace Mono.CSharp { // A special method to work with member lookup only. It returns a list of all members named @name // starting from @container. It's very performance sensitive // - public static IList<MemberSpec> FindMembers (TypeSpec container, string name, bool declaredOnly) + // declaredOnlyClass cannot be used interfaces. Manual filtering is required because names are + // compacted + // + public static IList<MemberSpec> FindMembers (TypeSpec container, string name, bool declaredOnlyClass) { IList<MemberSpec> applicable; do { - if (container.MemberCache.member_hash.TryGetValue (name, out applicable) || declaredOnly) + if (container.MemberCache.member_hash.TryGetValue (name, out applicable) || declaredOnlyClass) return applicable; container = container.BaseType; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs index f704166852..a1560a5086 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/method.cs @@ -1213,6 +1213,9 @@ namespace Mono.CSharp { block = (ToplevelBlock) block.ConvertToAsyncTask (this, Parent.PartialContainer, parameters, ReturnType, Location); ModFlags |= Modifiers.DEBUGGER_HIDDEN; } + + if (Compiler.Settings.WriteMetadataOnly) + block = null; } if ((ModFlags & Modifiers.STATIC) == 0) @@ -1301,10 +1304,18 @@ namespace Mono.CSharp { } } - base.Emit (); - + if (block != null && block.StateMachine != null) { + var psm = block.StateMachine is IteratorStorey ? + Module.PredefinedAttributes.IteratorStateMachine : + Module.PredefinedAttributes.AsyncStateMachine; + + psm.EmitAttribute (MethodBuilder, block.StateMachine); + } + if ((ModFlags & Modifiers.METHOD_EXTENSION) != 0) Module.PredefinedAttributes.Extension.EmitAttribute (MethodBuilder); + + base.Emit (); } catch { Console.WriteLine ("Internal compiler error at {0}: exception caught while emitting {1}", Location, MethodBuilder); @@ -1617,10 +1628,15 @@ namespace Mono.CSharp { Parent.MemberCache.AddMember (spec); - // It's here only to report an error - if (block != null && block.IsIterator) { - member_type = Compiler.BuiltinTypes.Void; - Iterator.CreateIterator (this, Parent.PartialContainer, ModFlags); + if (block != null) { + // It's here only to report an error + if (block.IsIterator) { + member_type = Compiler.BuiltinTypes.Void; + Iterator.CreateIterator (this, Parent.PartialContainer, ModFlags); + } + + if (Compiler.Settings.WriteMetadataOnly) + block = null; } return true; @@ -1656,14 +1672,14 @@ namespace Mono.CSharp { BlockContext bc = new BlockContext (this, block, Compiler.BuiltinTypes.Void); bc.Set (ResolveContext.Options.ConstructorScope); - // - // If we use a "this (...)" constructor initializer, then - // do not emit field initializers, they are initialized in the other constructor - // - if (!(Initializer is ConstructorThisInitializer)) - Parent.PartialContainer.ResolveFieldInitializers (bc); - if (block != null) { + // + // If we use a "this (...)" constructor initializer, then + // do not emit field initializers, they are initialized in the other constructor + // + if (!(Initializer is ConstructorThisInitializer)) + Parent.PartialContainer.ResolveFieldInitializers (bc); + if (!IsStatic) { if (Initializer == null) { if (Parent.PartialContainer.Kind == MemberKind.Struct) { @@ -2155,6 +2171,16 @@ namespace Mono.CSharp { return true; } + public override bool Define () + { + base.Define (); + + if (Compiler.Settings.WriteMetadataOnly) + block = null; + + return true; + } + public override void Emit() { var base_type = Parent.PartialContainer.BaseType; @@ -2518,13 +2544,18 @@ namespace Mono.CSharp { if (!base.Define ()) return false; - if (block != null && block.IsIterator) { - // - // Current method is turned into automatically generated - // wrapper which creates an instance of iterator - // - Iterator.CreateIterator (this, Parent.PartialContainer, ModFlags); - ModFlags |= Modifiers.DEBUGGER_HIDDEN; + if (block != null) { + if (block.IsIterator) { + // + // Current method is turned into automatically generated + // wrapper which creates an instance of iterator + // + Iterator.CreateIterator (this, Parent.PartialContainer, ModFlags); + ModFlags |= Modifiers.DEBUGGER_HIDDEN; + } + + if (Compiler.Settings.WriteMetadataOnly) + block = null; } // imlicit and explicit operator of same types are not allowed diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs index 3117053fcf..bf36e8f20e 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/module.cs @@ -429,7 +429,7 @@ namespace Mono.CSharp base.EmitContainer (); - if (Compiler.Report.Errors == 0) + if (Compiler.Report.Errors == 0 && !Compiler.Settings.WriteMetadataOnly) VerifyMembers (); if (anonymous_types != null) { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs index a33a3a14ae..9f448842fe 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/namespace.cs @@ -41,6 +41,46 @@ namespace Mono.CSharp { report.Error (1681, loc, "The global extern alias cannot be redefined"); } + // + // For better error reporting where we try to guess missing using directive + // + public List<string> FindTypeNamespaces (IMemberContext ctx, string name, int arity) + { + List<string> res = null; + + foreach (var ns in all_namespaces) { + var type = ns.Value.LookupType (ctx, name, arity, LookupMode.Normal, Location.Null); + if (type != null) { + if (res == null) + res = new List<string> (); + + res.Add (ns.Key); + } + } + + return res; + } + + // + // For better error reporting where compiler tries to guess missing using directive + // + public List<string> FindExtensionMethodNamespaces (IMemberContext ctx, TypeSpec extensionType, string name, int arity) + { + List<string> res = null; + + foreach (var ns in all_namespaces) { + var methods = ns.Value.LookupExtensionMethod (ctx, extensionType, name, arity); + if (methods != null) { + if (res == null) + res = new List<string> (); + + res.Add (ns.Key); + } + } + + return res; + } + public void RegisterNamespace (Namespace child) { if (child != this) @@ -181,14 +221,51 @@ namespace Mono.CSharp { return; } + string assembly = null; + string possible_name = fullname + "." + name; + + // Only assembly unique name should be added + switch (possible_name) { + case "System.Drawing": + case "System.Web.Services": + case "System.Web": + case "System.Data": + case "System.Configuration": + case "System.Data.Services": + case "System.DirectoryServices": + case "System.Json": + case "System.Net.Http": + case "System.Numerics": + case "System.Runtime.Caching": + case "System.ServiceModel": + case "System.Transactions": + case "System.Web.Routing": + case "System.Xml.Linq": + case "System.Xml": + assembly = possible_name; + break; + + case "System.Linq": + case "System.Linq.Expressions": + assembly = "System.Core"; + break; + + case "System.Windows.Forms": + case "System.Windows.Forms.Layout": + assembly = "System.Windows.Name"; + break; + } + + assembly = assembly == null ? "an" : "`" + assembly + "'"; + if (this is GlobalRootNamespace) { ctx.Module.Compiler.Report.Error (400, loc, - "The type or namespace name `{0}' could not be found in the global namespace (are you missing an assembly reference?)", - name); + "The type or namespace name `{0}' could not be found in the global namespace. Are you missing {1} assembly reference?", + name, assembly); } else { ctx.Module.Compiler.Report.Error (234, loc, - "The type or namespace name `{0}' does not exist in the namespace `{1}'. Are you missing an assembly reference?", - name, GetSignatureForError ()); + "The type or namespace name `{0}' does not exist in the namespace `{1}'. Are you missing {2} assembly reference?", + name, GetSignatureForError (), assembly); } } @@ -209,10 +286,16 @@ namespace Mono.CSharp { ns_parent = this; } + return ns_parent.TryAddNamespace (name.Basename); + } + + Namespace TryAddNamespace (string name) + { Namespace ns; - if (!ns_parent.namespaces.TryGetValue (name.Basename, out ns)) { - ns = new Namespace (ns_parent, name.Basename); - ns_parent.namespaces.Add (name.Basename, ns); + + if (!namespaces.TryGetValue (name, out ns)) { + ns = new Namespace (this, name); + namespaces.Add (name, ns); } return ns; @@ -591,6 +674,14 @@ namespace Mono.CSharp { } } + public IEnumerable<string> Conditionals { + get { + if (conditionals == null) + return Enumerable.Empty<string> (); + return conditionals.Where (kv => kv.Value).Select (kv => kv.Key); + } + } + public string FileName { get { return file.Name; @@ -1102,44 +1193,6 @@ namespace Mono.CSharp { return match; } - static void MsgtryRef (string s) - { - Console.WriteLine (" Try using -r:" + s); - } - - static void MsgtryPkg (string s) - { - Console.WriteLine (" Try using -pkg:" + s); - } - - 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?", - name); - - switch (name) { - case "Gtk": case "GtkSharp": - MsgtryPkg ("gtk-sharp-2.0"); - break; - - case "Gdk": case "GdkSharp": - MsgtryPkg ("gdk-sharp-2.0"); - break; - - case "Glade": case "GladeSharp": - MsgtryPkg ("glade-sharp-2.0"); - break; - - case "System.Drawing": - case "System.Web.Services": - case "System.Web": - case "System.Data": - case "System.Windows.Forms": - MsgtryRef (name); - break; - } - } - protected override void DefineNamespace () { if (namespace_using_table == null) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs index 1e46767cf1..d7a6c1638d 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/nullable.cs @@ -539,8 +539,8 @@ namespace Mono.CSharp.Nullable Expression user_operator; MethodSpec wrap_ctor; - public LiftedBinaryOperator (Binary.Operator op, Expression left, Expression right, Location loc) - : base (op, left, right, loc) + public LiftedBinaryOperator (Binary.Operator op, Expression left, Expression right) + : base (op, left, right) { } @@ -583,7 +583,7 @@ namespace Mono.CSharp.Nullable Constant c = new BoolConstant (ec.BuiltinTypes, Oper == Operator.Inequality, loc); if ((Oper & Operator.EqualityMask) != 0) { - ec.Report.Warning (472, 2, loc, "The result of comparing value type `{0}' with null is `{1}'", + ec.Report.Warning (472, 2, loc, "The result of comparing value type `{0}' with null is always `{1}'", TypeManager.CSharpName (expr.Type), c.GetValueAsLiteral ()); } else { ec.Report.Warning (464, 2, loc, "The result of comparing type `{0}' with null is always `{1}'", @@ -1000,12 +1000,12 @@ namespace Mono.CSharp.Nullable { Expression left, right; Unwrap unwrap; - - public NullCoalescingOperator (Expression left, Expression right, Location loc) + + public NullCoalescingOperator (Expression left, Expression right) { this.left = left; this.right = right; - this.loc = loc; + this.loc = left.Location; } public Expression LeftExpression { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs index 63a006ac55..7f21b8c4df 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/outline.cs @@ -142,7 +142,6 @@ public class Outline { first = true; foreach (ConstructorInfo ci in t.GetConstructors (DefaultFlags)) { - if (! ShowMember (ci)) continue; @@ -150,6 +149,7 @@ public class Outline { o.WriteLine (); first = false; + OutlineMemberAttribute (ci); OutlineConstructor (ci); o.WriteLine (); @@ -169,7 +169,8 @@ public class Outline { if (first) o.WriteLine (); first = false; - + + OutlineMemberAttribute (m); OutlineMethod (m); o.WriteLine (); @@ -191,6 +192,7 @@ public class Outline { o.WriteLine (); first = false; + OutlineMemberAttribute (m); OutlineOperator (m); o.WriteLine (); @@ -208,6 +210,7 @@ public class Outline { o.WriteLine (); first = false; + OutlineMemberAttribute (pi); OutlineProperty (pi); o.WriteLine (); @@ -224,6 +227,7 @@ public class Outline { o.WriteLine (); first = false; + OutlineMemberAttribute (fi); OutlineField (fi); o.WriteLine (); @@ -240,6 +244,7 @@ public class Outline { o.WriteLine (); first = false; + OutlineMemberAttribute (ei); OutlineEvent (ei); o.WriteLine (); @@ -286,6 +291,15 @@ public class Outline { o.WriteLine ("[Obsolete]"); } + void OutlineMemberAttribute (MemberInfo mi) + { + if (!mi.IsDefined (typeof (System.ObsoleteAttribute), false)) + return; + var oa = mi.GetCustomAttributes (typeof (System.ObsoleteAttribute), false) [0] as ObsoleteAttribute; + var msg = oa.Message; + o.WriteLine ("[Obsolete{0}]", msg == null || msg == "" ? "" : string.Format ("(\"{0}\")", msg)); + } + void OutlineEvent (EventInfo ei) { MethodBase accessor = ei.GetAddMethod (true); diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs index d53d724fb6..067c0c5f2d 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/property.cs @@ -362,8 +362,13 @@ namespace Mono.CSharp CheckAbstractAndExtern (block != null); CheckProtectedModifier (); - if (block != null && block.IsIterator) - Iterator.CreateIterator (this, Parent.PartialContainer, ModFlags); + if (block != null) { + if (block.IsIterator) + Iterator.CreateIterator (this, Parent.PartialContainer, ModFlags); + + if (Compiler.Settings.WriteMetadataOnly) + block = null; + } return null; } @@ -906,7 +911,7 @@ namespace Mono.CSharp public override void Emit (TypeDefinition parent) { - if ((method.ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) == 0) { + if ((method.ModFlags & (Modifiers.ABSTRACT | Modifiers.EXTERN)) == 0 && !Compiler.Settings.WriteMetadataOnly) { block = new ToplevelBlock (Compiler, ParameterInfo, Location) { IsCompilerGenerated = true }; @@ -938,11 +943,10 @@ namespace Mono.CSharp var cond = new BooleanExpression (new Binary (Binary.Operator.Inequality, 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)); + new Cast (new TypeExpression (Module.Compiler.BuiltinTypes.Object, Location), new LocalVariableReference (obj2, Location), Location))); var body = new ExplicitBlock (block, Location, Location); - block.AddStatement (new Do (body, cond, Location)); + block.AddStatement (new Do (body, cond, Location, Location)); body.AddStatement (new StatementExpression ( new SimpleAssign (new LocalVariableReference (obj2, Location), new LocalVariableReference (obj1, Location)))); @@ -1194,6 +1198,9 @@ namespace Mono.CSharp if (!method_data.Define (parent.PartialContainer, method.GetFullName (MemberName))) return null; + if (Compiler.Settings.WriteMetadataOnly) + block = null; + MethodBuilder mb = method_data.MethodBuilder; Spec = new MethodSpec (MemberKind.Method, parent.PartialContainer.Definition, this, ReturnType, mb, ParameterInfo, method.ModFlags); diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs index 26e3f4101c..b27b9c8a08 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/report.cs @@ -49,7 +49,7 @@ namespace Mono.CSharp { 809, 824, 1030, 1058, 1060, 1066, 1522, 1570, 1571, 1572, 1573, 1574, 1580, 1581, 1584, 1587, 1589, 1590, 1591, 1592, - 1607, 1616, 1633, 1634, 1635, 1685, 1690, 1691, 1692, 1695, 1696, 1699, + 1607, 1616, 1633, 1634, 1635, 1685, 1690, 1691, 1692, 1695, 1696, 1697, 1699, 1700, 1701, 1702, 1709, 1711, 1717, 1718, 1720, 1735, 1901, 1956, 1981, 1998, 2002, 2023, 2029, diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs index 214c925591..1556b5ca5f 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/settings.cs @@ -159,6 +159,8 @@ namespace Mono.CSharp { public RuntimeVersion StdLibRuntimeVersion; + public bool WriteMetadataOnly; + readonly List<string> conditional_symbols; readonly List<SourceFile> source_files; @@ -180,10 +182,8 @@ namespace Mono.CSharp { StdLibRuntimeVersion = RuntimeVersion.v4; WarningLevel = 4; - if (Environment.OSVersion.Platform == PlatformID.Win32NT) - TabSize = 4; - else - TabSize = 8; + // Default to 1 or mdb files would be platform speficic + TabSize = 1; AssemblyReferences = new List<string> (); AssemblyReferencesAliases = new List<Tuple<string, string>> (); @@ -224,11 +224,7 @@ namespace Mono.CSharp { return source_files; } } - - public IList<string> ConditionalSymbols { - get { return conditional_symbols; } - } - + #endregion public void AddConditionalSymbol (string symbol) @@ -674,8 +670,9 @@ namespace Mono.CSharp { { output.WriteLine ( "Other flags in the compiler\n" + - " --fatal[=COUNT] Makes errors after COUNT fatal\n" + + " --fatal[=COUNT] Makes error after COUNT fatal\n" + " --lint Enhanced warnings\n" + + " --metadata-only Produced assembly will contain metadata only\n" + " --parse Only parses the source file\n" + " --runtime:VERSION Sets mscorlib.dll metadata version: v1, v2, v4\n" + " --stacktrace Shows stack trace at error location\n" + @@ -937,7 +934,7 @@ namespace Mono.CSharp { return ParseResult.Success; case "/debug": - if (value == "full" || value == "pdbonly" || idx < 0) { + if (value.Equals ("full", StringComparison.OrdinalIgnoreCase) || value.Equals ("pdbonly", StringComparison.OrdinalIgnoreCase) || idx < 0) { settings.GenerateDebugInfo = true; return ParseResult.Success; } @@ -1429,6 +1426,10 @@ namespace Mono.CSharp { settings.LoadDefaultReferences = false; return ParseResult.Success; + case "--metadata-only": + settings.WriteMetadataOnly = true; + return ParseResult.Success; + default: if (arg.StartsWith ("--fatal", StringComparison.Ordinal)){ int fatal = 1; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs index b16e790d9c..46aff2b96b 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/statement.cs @@ -281,11 +281,16 @@ namespace Mono.CSharp { public Expression expr; public Statement EmbeddedStatement; - public Do (Statement statement, BooleanExpression bool_expr, Location l) + public Do (Statement statement, BooleanExpression bool_expr, Location doLocation, Location whileLocation) { expr = bool_expr; EmbeddedStatement = statement; - loc = l; + loc = doLocation; + WhileLocation = whileLocation; + } + + public Location WhileLocation { + get; private set; } public override bool Resolve (BlockContext ec) @@ -332,7 +337,7 @@ namespace Mono.CSharp { ec.MarkLabel (ec.LoopBegin); // Mark start of while condition - ec.Mark (expr.Location); + ec.Mark (WhileLocation); // // Dead code elimination @@ -461,7 +466,7 @@ namespace Mono.CSharp { ec.MarkLabel (ec.LoopBegin); - ec.Mark (expr.Location); + ec.Mark (loc); expr.EmitBranchable (ec, while_loop, true); ec.MarkLabel (ec.LoopEnd); @@ -878,7 +883,6 @@ namespace Mono.CSharp { return true; } - // TODO: Better error message if (async_type.Kind == MemberKind.Void) { ec.Report.Error (127, loc, "`{0}': A return keyword must not be followed by any expression when method returns void", @@ -909,6 +913,15 @@ namespace Mono.CSharp { } } } else { + // Same error code as .NET but better error message + if (block_return_type.Kind == MemberKind.Void) { + ec.Report.Error (127, loc, + "`{0}': A return keyword must not be followed by any expression when delegate returns void", + am.GetSignatureForError ()); + + return false; + } + var l = am as AnonymousMethodBody; if (l != null && l.ReturnTypeInference != null && expr != null) { l.ReturnTypeInference.AddCommonTypeBound (expr.Type); @@ -1620,8 +1633,10 @@ namespace Mono.CSharp { if (declarators != null) { foreach (var d in declarators) { d.Variable.CreateBuilder (ec); - if (d.Initializer != null) + if (d.Initializer != null) { + ec.Mark (d.Variable.Location); ((ExpressionStatement) d.Initializer).EmitStatement (ec); + } } } } @@ -4236,10 +4251,10 @@ namespace Mono.CSharp { Expression cond = null; for (int ci = 0; ci < s.Labels.Count; ++ci) { - var e = new Binary (Binary.Operator.Equality, value, s.Labels[ci].Converted, loc); + var e = new Binary (Binary.Operator.Equality, value, s.Labels[ci].Converted); if (ci > 0) { - cond = new Binary (Binary.Operator.LogicalOr, cond, e, loc); + cond = new Binary (Binary.Operator.LogicalOr, cond, e); } else { cond = e; } @@ -5130,8 +5145,8 @@ namespace Mono.CSharp { // fixed (T* e_ptr = (e == null || e.Length == 0) ? null : converted [0]) // converted = new Conditional (new BooleanExpression (new Binary (Binary.Operator.LogicalOr, - new Binary (Binary.Operator.Equality, initializer, new NullLiteral (loc), loc), - new Binary (Binary.Operator.Equality, new MemberAccess (initializer, "Length"), new IntConstant (bc.BuiltinTypes, 0, loc), loc), loc)), + new Binary (Binary.Operator.Equality, initializer, new NullLiteral (loc)), + new Binary (Binary.Operator.Equality, new MemberAccess (initializer, "Length"), new IntConstant (bc.BuiltinTypes, 0, loc)))), new NullLiteral (loc), converted, loc); @@ -5697,7 +5712,7 @@ namespace Mono.CSharp { // Add conditional call when disposing possible null variable if (!type.IsStruct || type.IsNullableType) - dispose = new If (new Binary (Binary.Operator.Inequality, lvr, new NullLiteral (loc), loc), dispose, dispose.loc); + dispose = new If (new Binary (Binary.Operator.Inequality, lvr, new NullLiteral (loc)), dispose, dispose.loc); return dispose; } @@ -5711,7 +5726,7 @@ namespace Mono.CSharp { { for (int i = declarators.Count - 1; i >= 0; --i) { var d = declarators [i]; - var vd = new VariableDeclaration (d.Variable, type_expr.Location); + var vd = new VariableDeclaration (d.Variable, d.Variable.Location); vd.Initializer = d.Initializer; vd.IsNested = true; vd.dispose_call = CreateDisposeCall (bc, d.Variable); @@ -5947,7 +5962,7 @@ namespace Mono.CSharp { if (variable_ref == null) return false; - for_each.body.AddScopeStatement (new StatementExpression (new CompilerAssign (variable_ref, access, Location.Null), for_each.variable.Location)); + for_each.body.AddScopeStatement (new StatementExpression (new CompilerAssign (variable_ref, access, Location.Null), for_each.type.Location)); bool ok = true; @@ -6043,7 +6058,7 @@ namespace Mono.CSharp { var idisaposable_test = new Binary (Binary.Operator.Inequality, new CompilerAssign ( dispose_variable.CreateReferenceExpression (bc, loc), new As (lv.CreateReferenceExpression (bc, loc), new TypeExpression (dispose_variable.Type, loc), loc), - loc), new NullLiteral (loc), loc); + loc), new NullLiteral (loc)); var m = bc.Module.PredefinedMembers.IDisposableDispose.Resolve (loc); @@ -6258,7 +6273,7 @@ namespace Mono.CSharp { if (variable_ref == null) return false; - for_each.body.AddScopeStatement (new StatementExpression (new CompilerAssign (variable_ref, current_pe, Location.Null), variable.Location)); + for_each.body.AddScopeStatement (new StatementExpression (new CompilerAssign (variable_ref, current_pe, Location.Null), for_each.type.Location)); var init = new Invocation (get_enumerator_mg, null); diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs index 35762dfeae..55d8ebd2db 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/support.cs @@ -137,21 +137,23 @@ namespace Mono.CSharp { /// </summary> public class SeekableStreamReader : IDisposable { + public const int DefaultReadAheadSize = 2048; + StreamReader reader; Stream stream; - static char[] buffer; + char[] buffer; int read_ahead_length; // the length of read buffer int buffer_start; // in chars int char_count; // count of filled characters in buffer[] int pos; // index into buffer[] - public SeekableStreamReader (Stream stream, Encoding encoding) + public SeekableStreamReader (Stream stream, Encoding encoding, char[] sharedBuffer = null) { this.stream = stream; + this.buffer = sharedBuffer; - const int default_read_ahead = 2048; - InitializeStream (default_read_ahead); + InitializeStream (DefaultReadAheadSize); reader = new StreamReader (stream, encoding, true); } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs index 6eb3fc6e44..1a2b37eafb 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Parser/mcs/typemanager.cs @@ -144,7 +144,7 @@ namespace Mono.CSharp { var ctx = module.Compiler; foreach (var p in types) { - var found = PredefinedType.Resolve (module, p.Kind, p.Namespace, p.Name, p.Arity); + var found = PredefinedType.Resolve (module, p.Kind, p.Namespace, p.Name, p.Arity, true, true); if (found == null || found == p) continue; @@ -340,6 +340,7 @@ namespace Mono.CSharp public readonly PredefinedMember<MethodSpec> AsyncVoidMethodBuilderSetStateMachine; public readonly PredefinedMember<MethodSpec> AsyncVoidMethodBuilderOnCompleted; public readonly PredefinedMember<MethodSpec> AsyncVoidMethodBuilderOnCompletedUnsafe; + public readonly PredefinedMember<MethodSpec> AsyncStateMachineAttributeCtor; public readonly PredefinedMember<MethodSpec> DebuggerBrowsableAttributeCtor; public readonly PredefinedMember<MethodSpec> DecimalCtor; public readonly PredefinedMember<MethodSpec> DecimalCtorInt; @@ -357,6 +358,7 @@ namespace Mono.CSharp public readonly PredefinedMember<MethodSpec> IEnumerableGetEnumerator; public readonly PredefinedMember<MethodSpec> InterlockedCompareExchange; public readonly PredefinedMember<MethodSpec> InterlockedCompareExchange_T; + public readonly PredefinedMember<MethodSpec> IteratorStateMachineAttributeCtor; public readonly PredefinedMember<MethodSpec> FixedBufferAttributeCtor; public readonly PredefinedMember<MethodSpec> MethodInfoGetMethodFromHandle; public readonly PredefinedMember<MethodSpec> MethodInfoGetMethodFromHandle2; @@ -549,6 +551,10 @@ namespace Mono.CSharp }, false), btypes.Void)); + AsyncStateMachineAttributeCtor = new PredefinedMember<MethodSpec> (module, atypes.AsyncStateMachine, + MemberFilter.Constructor (ParametersCompiled.CreateFullyResolved ( + btypes.Type))); + DebuggerBrowsableAttributeCtor = new PredefinedMember<MethodSpec> (module, atypes.DebuggerBrowsable, MemberFilter.Constructor (null)); @@ -625,6 +631,10 @@ namespace Mono.CSharp }, false), null)); + IteratorStateMachineAttributeCtor = new PredefinedMember<MethodSpec> (module, atypes.IteratorStateMachine, + MemberFilter.Constructor (ParametersCompiled.CreateFullyResolved ( + btypes.Type))); + MethodInfoGetMethodFromHandle = new PredefinedMember<MethodSpec> (module, types.MethodBase, "GetMethodFromHandle", MemberKind.Method, types.RuntimeMethodHandle); @@ -748,7 +758,7 @@ namespace Mono.CSharp if (type != null) return true; - type = Resolve (module, kind, ns, name, arity, false); + type = Resolve (module, kind, ns, name, arity, false, false); return type != null; } @@ -757,17 +767,21 @@ namespace Mono.CSharp return ns + "." + name; } - public static TypeSpec Resolve (ModuleContainer module, MemberKind kind, string ns, string name, int arity) + public static TypeSpec Resolve (ModuleContainer module, MemberKind kind, string ns, string name, int arity, bool required, bool reportErrors) { - return Resolve (module, kind, ns, name, arity, true); - } + // + // Cannot call it with true because it could create non-existent namespaces for + // predefined types. It's set to true only for build-in types which all must + // exist therefore it does not matter, for predefined types we don't want to create + // fake namespaces when type is optional and does not exist (e.g. System.Linq). + // + Namespace type_ns = module.GlobalRootNamespace.GetNamespace (ns, required); + IList<TypeSpec> found = null; + if (type_ns != null) + found = type_ns.GetAllTypes (name); - public static TypeSpec Resolve (ModuleContainer module, MemberKind kind, string ns, string name, int arity, bool reportErrors) - { - Namespace type_ns = module.GlobalRootNamespace.GetNamespace (ns, true); - var found = type_ns.GetAllTypes (name); if (found == null) { - if (reportErrors) + if (reportErrors ) module.Compiler.Report.Error (518, "The predefined type `{0}.{1}' is not defined or imported", ns, name); return null; @@ -837,13 +851,13 @@ namespace Mono.CSharp public TypeSpec Resolve () { if (type == null) - type = Resolve (module, kind, ns, name, arity); + type = Resolve (module, kind, ns, name, arity, false, true); return type; } } - class PredefinedMember<T> where T : MemberSpec + public class PredefinedMember<T> where T : MemberSpec { readonly ModuleContainer module; T member; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs index 6c107a618b..915715cb52 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs @@ -1,4 +1,4 @@ -// +// // ImplementInterfaceAction.cs // // Author: @@ -68,7 +68,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring foreach (var member in toImplement) { if (!nodes.ContainsKey(member.Item1.DeclaringType)) nodes [member.Item1.DeclaringType] = new List<AstNode>(); - nodes [member.Item1.DeclaringType].Add(GenerateMemberImplementation(context, member)); + nodes [member.Item1.DeclaringType].Add(GenerateMemberImplementation(context, member.Item1, member.Item2)); } foreach (var kv in nodes) { @@ -89,188 +89,21 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } } - static AstNode GenerateMemberImplementation(RefactoringContext context, Tuple<IMember, bool> member) - { - switch (member.Item1.EntityType) { - case EntityType.Property: - return GenerateProperty(context, (IProperty)member.Item1, member.Item2); - case EntityType.Indexer: - return GenerateIndexer(context, (IProperty)member.Item1, member.Item2); - case EntityType.Event: - return GenerateEvent(context, (IEvent)member.Item1, member.Item2); - case EntityType.Method: - return GenerateMethod(context, (IMethod)member.Item1, member.Item2); - default: - throw new ArgumentOutOfRangeException(); - } - } - - static AstNode GenerateEvent(RefactoringContext context, IEvent evt, bool explicitImplementation) + static EntityDeclaration GenerateMemberImplementation(RefactoringContext context, IMember member, bool explicitImplementation) { - if (!explicitImplementation) { - return new EventDeclaration() { - Modifiers = Modifiers.Public, - Name = evt.Name, - ReturnType = context.CreateShortType (evt.ReturnType) - }; - } - return new CustomEventDeclaration() { - Name = evt.Name, - ReturnType = context.CreateShortType (evt.ReturnType), - PrivateImplementationType = context.CreateShortType(evt.DeclaringType), - AddAccessor = new Accessor { - Body = new BlockStatement() { - new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))) - } - }, - RemoveAccessor = new Accessor { - Body = new BlockStatement() { - new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))) - } - } - }; - } - - static AstNode GenerateProperty(RefactoringContext context, IProperty property, bool explicitImplementation) - { - var result = new PropertyDeclaration() { - Name = property.Name, - ReturnType = context.CreateShortType (property.ReturnType) - }; - - if (!explicitImplementation) { - result.Modifiers = Modifiers.Public; - } else { - result.PrivateImplementationType = context.CreateShortType(property.DeclaringType); - } - - if (property.CanGet) { - if (property.DeclaringType.Kind != TypeKind.Interface) { - result.Getter = new Accessor() { - Body = new BlockStatement () { - new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))) - } - }; - } else { - result.Getter = new Accessor(); - } - } - if (property.CanSet) { - if (property.DeclaringType.Kind != TypeKind.Interface) { - result.Setter = new Accessor() { - Body = new BlockStatement () { - new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))) - } - }; - } else { - result.Setter = new Accessor(); - } - } - - return result; - } - - static AstNode GenerateIndexer(RefactoringContext context, IProperty indexer, bool explicitImplementation) - { - var result = new IndexerDeclaration() { - ReturnType = context.CreateShortType (indexer.ReturnType) - }; - - if (!explicitImplementation) { - result.Modifiers = Modifiers.Public; + var builder = context.CreateTypeSytemAstBuilder(); + builder.GenerateBody = true; + builder.ShowConstantValues = !explicitImplementation; + builder.ShowTypeParameterConstraints = !explicitImplementation; + builder.UseCustomEvents = explicitImplementation; + var decl = builder.ConvertEntity(member); + if (explicitImplementation) { + decl.Modifiers = Modifiers.None; + decl.AddChild(builder.ConvertType(member.DeclaringType), EntityDeclaration.PrivateImplementationTypeRole); } else { - result.PrivateImplementationType = context.CreateShortType(indexer.DeclaringType); + decl.Modifiers = Modifiers.Public; } - - foreach (var p in indexer.Parameters) { - ParameterModifier modifier; - if (p.IsOut) { - modifier = ParameterModifier.Out; - } else if (p.IsRef) { - modifier = ParameterModifier.Ref; - } else if (p.IsParams) { - modifier = ParameterModifier.Params; - } else { - modifier = ParameterModifier.None; - } - result.Parameters.Add(new ParameterDeclaration(context.CreateShortType(p.Type), p.Name, modifier)); - } - - if (indexer.CanGet) { - result.Getter = new Accessor() { - Body = new BlockStatement () { - new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))) - } - }; - } - if (indexer.CanSet) { - result.Setter = new Accessor() { - Body = new BlockStatement () { - new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))) - } - }; - } - return result; - } - - static AstNode GenerateMethod(RefactoringContext context, IMethod method, bool explicitImplementation) - { - var result = new MethodDeclaration() { - Name = method.Name, - ReturnType = context.CreateShortType (method.ReturnType), - Body = new BlockStatement() { - new ThrowStatement(new ObjectCreateExpression(context.CreateShortType("System", "NotImplementedException"))) - } - }; - - if (!explicitImplementation) { - result.Modifiers = Modifiers.Public; - } else { - result.PrivateImplementationType = context.CreateShortType(method.DeclaringType); - } - - foreach (var typeParam in method.TypeParameters) { - result.TypeParameters.Add(new TypeParameterDeclaration(typeParam.Name)); - - var constraint = new Constraint() { - TypeParameter = new SimpleType(typeParam.Name) - }; - - if (typeParam.HasDefaultConstructorConstraint) { - constraint.BaseTypes.Add(new PrimitiveType("new")); - } else if (typeParam.HasReferenceTypeConstraint) { - constraint.BaseTypes.Add(new PrimitiveType("class")); - } else if (typeParam.HasValueTypeConstraint) { - constraint.BaseTypes.Add(new PrimitiveType("struct")); - } - - foreach (var type in typeParam.DirectBaseTypes) { - if (type.FullName == "System.Object") - continue; - if (type.FullName == "System.ValueType") - continue; - constraint.BaseTypes.Add(context.CreateShortType(type)); - } - if (constraint.BaseTypes.Count == 0) - continue; - result.Constraints.Add(constraint); - } - - foreach (var p in method.Parameters) { - ParameterModifier modifier; - if (p.IsOut) { - modifier = ParameterModifier.Out; - } else if (p.IsRef) { - modifier = ParameterModifier.Ref; - } else if (p.IsParams) { - modifier = ParameterModifier.Params; - } else { - modifier = ParameterModifier.None; - } - result.Parameters.Add(new ParameterDeclaration(context.CreateShortType(p.Type), p.Name, modifier)); - } - - return result; + return decl; } public static List<Tuple<IMember, bool>> CollectMembersToImplement(ITypeDefinition implementingType, IType interfaceType, bool explicitly) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantThisIssue.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantThisIssue.cs index 5a6d538e0a..c3b840d43a 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantThisIssue.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/RedundantThisIssue.cs @@ -45,6 +45,21 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring IssueMarker = IssueMarker.GrayOut)] public class RedundantThisIssue : ICodeIssueProvider { + bool ignoreConstructors = true; + + /// <summary> + /// Specifies whether to ignore redundant 'this' in constructors. + /// "this.Name = name;" + /// </summary> + public bool IgnoreConstructors { + get { + return ignoreConstructors; + } + set { + ignoreConstructors = value; + } + } + public IEnumerable<CodeIssue> GetIssues(BaseRefactoringContext context) { return new GatherVisitor(context, this).GetIssues(); @@ -69,6 +84,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring return null; } + + public override void VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration) + { + if (inspector.IgnoreConstructors) + return; + base.VisitConstructorDeclaration(constructorDeclaration); + } public override void VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression) { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs index 76dc5e24c9..e7dd6e3a02 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs @@ -44,24 +44,23 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } public abstract TextLocation Location { get; } - - public virtual AstType CreateShortType (IType fullType) + + public TypeSystemAstBuilder CreateTypeSytemAstBuilder() { var csResolver = Resolver.GetResolverStateBefore(GetNode()); - var builder = new TypeSystemAstBuilder(csResolver); + return new TypeSystemAstBuilder(csResolver); + } + + public virtual AstType CreateShortType (IType fullType) + { + var builder = CreateTypeSytemAstBuilder(); return builder.ConvertType(fullType); } - public AstType CreateShortType(string ns, string name, int typeParameterCount = 0) + public virtual AstType CreateShortType(string ns, string name, int typeParameterCount = 0) { - foreach (var asm in Compilation.Assemblies) { - var def = asm.GetTypeDefinition(ns, name, typeParameterCount); - if (def != null) { - return CreateShortType(def); - } - } - - return new MemberType(new SimpleType(ns), name); + var builder = CreateTypeSytemAstBuilder(); + return builder.ConvertType(ns, name, typeParameterCount); } public virtual IEnumerable<AstNode> GetSelectedNodes() diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs index be486dc7e3..47f0350ae1 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/Script.cs @@ -166,7 +166,11 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring { // Default implementation: do nothing // Derived classes are supposed to enter the text editor's linked state. - return null; + + // Immediately signal the task as completed: + var tcs = new TaskCompletionSource<object>(); + tcs.SetResult(null); + return tcs.Task; } public void Replace (AstNode node, AstNode replaceWith) diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs index fa52949a20..2c29f68842 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs @@ -111,6 +111,18 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring /// The default value is <c>false</c>. /// </summary> public bool AlwaysUseShortTypeNames { get; set; } + + /// <summary> + /// Controls whether to generate a body that throws a <c>System.NotImplementedException</c>. + /// The default value is <c>false</c>. + /// </summary> + public bool GenerateBody { get; set; } + + /// <summary> + /// Controls whether to generate custom events. + /// The default value is <c>false</c>. + /// </summary> + public bool UseCustomEvents { get; set; } #endregion #region Convert Type @@ -124,6 +136,19 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring return astType; } + public AstType ConvertType(string ns, string name, int typeParameterCount = 0) + { + if (resolver != null) { + foreach (var asm in resolver.Compilation.Assemblies) { + var def = asm.GetTypeDefinition(ns, name, typeParameterCount); + if (def != null) { + return ConvertType(def); + } + } + } + return new MemberType(new SimpleType(ns), name); + } + AstType ConvertTypeHelper(IType type) { TypeWithElementType typeWithElementType = type as TypeWithElementType; @@ -557,12 +582,24 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring return decl; } + BlockStatement GenerateBodyBlock() + { + if (GenerateBody) { + return new BlockStatement { + new ThrowStatement(new ObjectCreateExpression(ConvertType("System", "NotImplementedException"))) + }; + } else { + return BlockStatement.Null; + } + } + Accessor ConvertAccessor(IMethod accessor) { if (accessor == null) return Accessor.Null; Accessor decl = new Accessor(); decl.Modifiers = ModifierFromAccessibility(accessor.Accessibility); + decl.Body = GenerateBodyBlock(); return decl; } @@ -590,13 +627,23 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring return decl; } - EventDeclaration ConvertEvent(IEvent ev) + EntityDeclaration ConvertEvent(IEvent ev) { - EventDeclaration decl = new EventDeclaration(); - decl.Modifiers = GetMemberModifiers(ev); - decl.ReturnType = ConvertType(ev.ReturnType); - decl.Variables.Add(new VariableInitializer(ev.Name)); - return decl; + if (this.UseCustomEvents) { + CustomEventDeclaration decl = new CustomEventDeclaration(); + decl.Modifiers = GetMemberModifiers(ev); + decl.ReturnType = ConvertType(ev.ReturnType); + decl.Name = ev.Name; + decl.AddAccessor = ConvertAccessor(ev.AddAccessor); + decl.RemoveAccessor = ConvertAccessor(ev.RemoveAccessor); + return decl; + } else { + EventDeclaration decl = new EventDeclaration(); + decl.Modifiers = GetMemberModifiers(ev); + decl.ReturnType = ConvertType(ev.ReturnType); + decl.Variables.Add(new VariableInitializer(ev.Name)); + return decl; + } } MethodDeclaration ConvertMethod(IMethod method) @@ -625,6 +672,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring decl.Constraints.Add(constraint); } } + decl.Body = GenerateBodyBlock(); return decl; } @@ -641,6 +689,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring foreach (IParameter p in op.Parameters) { decl.Parameters.Add(ConvertParameter(p)); } + decl.Body = GenerateBodyBlock(); return decl; } @@ -652,6 +701,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring foreach (IParameter p in ctor.Parameters) { decl.Parameters.Add(ConvertParameter(p)); } + decl.Body = GenerateBodyBlock(); return decl; } @@ -659,6 +709,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring { DestructorDeclaration decl = new DestructorDeclaration(); decl.Name = dtor.DeclaringTypeDefinition.Name; + decl.Body = GenerateBodyBlock(); return decl; } #endregion @@ -687,12 +738,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring Modifiers GetMemberModifiers(IMember member) { - Modifiers m = ModifierFromAccessibility(member.Accessibility); + bool isInterfaceMember = member.DeclaringType.Kind == TypeKind.Interface; + Modifiers m = isInterfaceMember ? Modifiers.None : ModifierFromAccessibility(member.Accessibility); if (this.ShowModifiers) { if (member.IsStatic) { m |= Modifiers.Static; } else { - if (member.IsAbstract) + if (member.IsAbstract && !isInterfaceMember) m |= Modifiers.Abstract; if (member.IsOverride) m |= Modifiers.Override; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpConversions.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpConversions.cs index 359338129f..d45ba6c7ca 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpConversions.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpConversions.cs @@ -112,6 +112,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } c = ImplicitConversion(resolveResult.Type, toType); if (c.IsValid) return c; + if (resolveResult.Type.Kind == TypeKind.Dynamic) + return Conversion.ImplicitDynamicConversion; c = AnonymousFunctionConversion(resolveResult, toType); if (c.IsValid) return c; c = MethodGroupConversion(resolveResult, toType); @@ -159,8 +161,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver return Conversion.ImplicitReferenceConversion; if (IsBoxingConversion(fromType, toType)) return Conversion.BoxingConversion; - if (fromType.Kind == TypeKind.Dynamic) - return Conversion.ImplicitDynamicConversion; if (ImplicitTypeParameterConversion(fromType, toType)) { // Implicit type parameter conversions that aren't also // reference conversions are considered to be boxing conversions @@ -471,7 +471,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver bool IdentityOrVarianceConversion(IType s, IType t, int subtypeCheckNestingDepth) { ITypeDefinition def = s.GetDefinition(); - if (def != null && def.Equals(t.GetDefinition())) { + if (def != null) { + if (!def.Equals(t.GetDefinition())) + return false; ParameterizedType ps = s as ParameterizedType; ParameterizedType pt = t as ParameterizedType; if (ps != null && pt != null) { @@ -499,8 +501,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver return false; // only of of them is parameterized, or counts don't match? -> not valid conversion } return true; + } else { + // not type definitions? we still need to check for equal types (e.g. s and t might be type parameters) + return s.Equals(t); } - return false; } #endregion diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs index cc0ba36f0d..20d34852fb 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs @@ -1900,15 +1900,37 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver // C# 4.0 spec: §7.6.5 if (target.Type.Kind == TypeKind.Dynamic) { - return new DynamicInvocationResolveResult(target, arguments.Select((a, i) => new DynamicInvocationArgument(argumentNames != null ? argumentNames[i] : null, a)).ToList().AsReadOnly()); + return new DynamicInvocationResolveResult(target, DynamicInvocationType.Invocation, arguments.Select((a, i) => new DynamicInvocationArgument(argumentNames != null ? argumentNames[i] : null, a)).ToList().AsReadOnly()); } MethodGroupResolveResult mgrr = target as MethodGroupResolveResult; if (mgrr != null) { + if (arguments.Any(a => a.Type.Kind == TypeKind.Dynamic)) { + // If we have dynamic arguments, we need to represent the invocation as a dynamic invocation if there is more than one applicable method. + var or2 = CreateOverloadResolution(arguments, argumentNames, mgrr.TypeArguments.ToArray()); + var applicableMethods = mgrr.MethodsGroupedByDeclaringType.SelectMany(m => m, (x, m) => new { x.DeclaringType, Method = m }).Where(x => OverloadResolution.IsApplicable(or2.AddCandidate(x.Method))).ToList(); + + if (applicableMethods.Count > 1) { + ResolveResult actualTarget; + if (applicableMethods.All(x => x.Method.IsStatic) && !(mgrr.TargetResult is TypeResolveResult)) + actualTarget = new TypeResolveResult(mgrr.TargetType); + else + actualTarget = mgrr.TargetResult; + + var l = new List<MethodListWithDeclaringType>(); + foreach (var m in applicableMethods) { + if (l.Count == 0 || l[l.Count - 1].DeclaringType != m.DeclaringType) + l.Add(new MethodListWithDeclaringType(m.DeclaringType)); + l[l.Count - 1].Add(m.Method); + } + return new DynamicInvocationResolveResult(new MethodGroupResolveResult(actualTarget, mgrr.MethodName, l, mgrr.TypeArguments), DynamicInvocationType.Invocation, arguments.Select((a, i) => new DynamicInvocationArgument(argumentNames != null ? argumentNames[i] : null, a)).ToList().AsReadOnly()); + } + } + OverloadResolution or = mgrr.PerformOverloadResolution(compilation, arguments, argumentNames, checkForOverflow: checkForOverflow, conversions: conversions); if (or.BestCandidate != null) { if (or.BestCandidate.IsStatic && !or.IsExtensionMethodInvocation && !(mgrr.TargetResult is TypeResolveResult)) - return or.CreateResolveResult(new TypeResolveResult(mgrr.TargetResult.Type)); + return or.CreateResolveResult(new TypeResolveResult(mgrr.TargetType)); else return or.CreateResolveResult(mgrr.TargetResult); } else { @@ -2043,10 +2065,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver { switch (target.Type.Kind) { case TypeKind.Dynamic: - for (int i = 0; i < arguments.Length; i++) { - arguments[i] = Convert(arguments[i], SpecialType.Dynamic); - } - return new ArrayAccessResolveResult(SpecialType.Dynamic, target, arguments); + return new DynamicInvocationResolveResult(target, DynamicInvocationType.Indexing, arguments.Select((a, i) => new DynamicInvocationArgument(argumentNames != null ? argumentNames[i] : null, a)).ToList().AsReadOnly()); case TypeKind.Array: case TypeKind.Pointer: @@ -2056,9 +2075,21 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } // §7.6.6.2 Indexer access - OverloadResolution or = CreateOverloadResolution(arguments, argumentNames); + MemberLookup lookup = CreateMemberLookup(); var indexers = lookup.LookupIndexers(target.Type); + + if (arguments.Any(a => a.Type.Kind == TypeKind.Dynamic)) { + // If we have dynamic arguments, we need to represent the invocation as a dynamic invocation if there is more than one applicable indexer. + var or2 = CreateOverloadResolution(arguments, argumentNames, null); + var applicableIndexers = indexers.SelectMany(x => x).Where(m => OverloadResolution.IsApplicable(or2.AddCandidate(m))).ToList(); + + if (applicableIndexers.Count > 1) { + return new DynamicInvocationResolveResult(target, DynamicInvocationType.Indexing, arguments.Select((a, i) => new DynamicInvocationArgument(argumentNames != null ? argumentNames[i] : null, a)).ToList().AsReadOnly()); + } + } + + OverloadResolution or = CreateOverloadResolution(arguments, argumentNames); or.AddMethodLists(indexers); if (or.BestCandidate != null) { return or.CreateResolveResult(target); @@ -2109,16 +2140,35 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver public ResolveResult ResolveObjectCreation(IType type, ResolveResult[] arguments, string[] argumentNames = null, bool allowProtectedAccess = false, IList<ResolveResult> initializerStatements = null) { if (type.Kind == TypeKind.Delegate && arguments.Length == 1) { - return Convert(arguments[0], type); + ResolveResult input = arguments[0]; + IMethod invoke = input.Type.GetDelegateInvokeMethod(); + if (invoke != null) { + input = new MethodGroupResolveResult( + input, invoke.Name, + methods: new[] { new MethodListWithDeclaringType(invoke.DeclaringType) { invoke } }, + typeArguments: EmptyList<IType>.Instance + ); + } + return Convert(input, type); } OverloadResolution or = CreateOverloadResolution(arguments, argumentNames); MemberLookup lookup = CreateMemberLookup(); + var allApplicable = (arguments.Any(a => a.Type.Kind == TypeKind.Dynamic) ? new List<IMethod>() : null); foreach (IMethod ctor in type.GetConstructors()) { - if (lookup.IsAccessible(ctor, allowProtectedAccess)) - or.AddCandidate(ctor); + if (lookup.IsAccessible(ctor, allowProtectedAccess)) { + var orErrors = or.AddCandidate(ctor); + if (allApplicable != null && OverloadResolution.IsApplicable(orErrors)) + allApplicable.Add(ctor); + } else or.AddCandidate(ctor, OverloadResolutionErrors.Inaccessible); } + + if (allApplicable != null && allApplicable.Count > 1) { + // If we have dynamic arguments, we need to represent the invocation as a dynamic invocation if there is more than one applicable constructor. + return new DynamicInvocationResolveResult(new MethodGroupResolveResult(null, allApplicable[0].Name, new[] { new MethodListWithDeclaringType(type, allApplicable) }, null), DynamicInvocationType.ObjectCreation, arguments.Select((a, i) => new DynamicInvocationArgument(argumentNames != null ? argumentNames[i] : null, a)).ToList().AsReadOnly(), initializerStatements); + } + if (or.BestCandidate != null) { return or.CreateResolveResult(null, initializerStatements); } else { diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/DynamicInvocationResolveResult.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/DynamicInvocationResolveResult.cs index 6139be02c0..b720d68b74 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/DynamicInvocationResolveResult.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/DynamicInvocationResolveResult.cs @@ -45,24 +45,57 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } } + public enum DynamicInvocationType { + /// <summary> + /// The invocation is a normal invocation ( 'a(b)' ). + /// </summary> + Invocation, + + /// <summary> + /// The invocation is an indexing ( 'a[b]' ). + /// </summary> + Indexing, + + /// <summary> + /// The invocation is an object creation ( 'new a(b)' ). Also used when invoking a base constructor ( ' : base(a) ' ) and chaining constructors ( ' : this(a) '). + /// </summary> + ObjectCreation, + } + /// <summary> /// Represents the result of an invocation of a member of a dynamic object. /// </summary> public class DynamicInvocationResolveResult : ResolveResult { /// <summary> - /// Target of the invocation (a dynamic object). + /// Target of the invocation. Can be a dynamic expression or a <see cref="MethodGroupResolveResult"/>. /// </summary> public readonly ResolveResult Target; /// <summary> + /// Type of the invocation. + /// </summary> + public readonly DynamicInvocationType InvocationType; + + /// <summary> /// Arguments for the call. /// </summary> public readonly IList<DynamicInvocationArgument> Arguments; - public DynamicInvocationResolveResult(ResolveResult target, IList<DynamicInvocationArgument> arguments) : base(SpecialType.Dynamic) { - this.Target = target; - this.Arguments = arguments ?? EmptyList<DynamicInvocationArgument>.Instance; + /// <summary> + /// Gets the list of initializer statements that are appplied to the result of this invocation. + /// This is used to represent object and collection initializers. + /// With the initializer statements, the <see cref="InitializedObjectResolveResult"/> is used + /// to refer to the result of this invocation. + /// Initializer statements can only exist if the <see cref="InvocationType"/> is <see cref="DynamicInvocationType.ObjectCreation"/>. + /// </summary> + public readonly IList<ResolveResult> InitializerStatements; + + public DynamicInvocationResolveResult(ResolveResult target, DynamicInvocationType invocationType, IList<DynamicInvocationArgument> arguments, IList<ResolveResult> initializerStatements = null) : base(SpecialType.Dynamic) { + this.Target = target; + this.InvocationType = invocationType; + this.Arguments = arguments ?? EmptyList<DynamicInvocationArgument>.Instance; + this.InitializerStatements = initializerStatements ?? EmptyList<ResolveResult>.Instance; } public override string ToString() diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/MethodGroupResolveResult.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/MethodGroupResolveResult.cs index 11fd0e6519..39571f2918 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/MethodGroupResolveResult.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/MethodGroupResolveResult.cs @@ -29,10 +29,32 @@ using ICSharpCode.NRefactory.TypeSystem.Implementation; namespace ICSharpCode.NRefactory.CSharp.Resolver { + /// <summary> + /// A method list that belongs to a declaring type. + /// </summary> public class MethodListWithDeclaringType : List<IParameterizedMember> { readonly IType declaringType; + /// <summary> + /// The declaring type. + /// </summary> + /// <remarks> + /// Not all methods in this list necessarily have this as their declaring type. + /// For example, this program: + /// <code> + /// class Base { + /// public virtual void M() {} + /// } + /// class Derived : Base { + /// public override void M() {} + /// public void M(int i) {} + /// } + /// </code> + /// results in two lists: + /// <c>new MethodListWithDeclaringType(Base) { Derived.M() }</c>, + /// <c>new MethodListWithDeclaringType(Derived) { Derived.M(int) }</c> + /// </remarks> public IType DeclaringType { get { return declaringType; } } @@ -64,8 +86,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver public MethodGroupResolveResult(ResolveResult targetResult, string methodName, IList<MethodListWithDeclaringType> methods, IList<IType> typeArguments) : base(SpecialType.UnknownType) { - if (targetResult == null) - throw new ArgumentNullException("targetResult"); if (methods == null) throw new ArgumentNullException("methods"); this.targetResult = targetResult; @@ -85,7 +105,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver /// Gets the type of the reference to the target object. /// </summary> public IType TargetType { - get { return targetResult.Type; } + get { return targetResult != null ? targetResult.Type : SpecialType.UnknownType; } } /// <summary> @@ -161,8 +181,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver /// </summary> /// <param name="substituteInferredTypes"> /// Specifies whether to produce a <see cref="SpecializedMethod"/> - /// when type arguments could be inferred from <paramref name="targetType"/>. This parameter - /// is only used for inferred types and has no effect if the type parameters are + /// when type arguments could be inferred from <see cref="TargetType"/>. + /// This setting is only used for inferred types and has no effect if the type parameters are /// specified explicitly. /// </param> /// <remarks> diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs index f160fcbc60..bf8331d7d8 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs @@ -938,6 +938,23 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver ScanChildren(parameterDeclaration); if (resolverEnabled) { string name = parameterDeclaration.Name; + + if (parameterDeclaration.Parent is DocumentationReference) { + // create a dummy parameter + IType type = ResolveType(parameterDeclaration.Type); + switch (parameterDeclaration.ParameterModifier) { + case ParameterModifier.Ref: + case ParameterModifier.Out: + type = new ByReferenceType(type); + break; + } + return new LocalResolveResult(new DefaultParameter( + type, name, + isRef: parameterDeclaration.ParameterModifier == ParameterModifier.Ref, + isOut: parameterDeclaration.ParameterModifier == ParameterModifier.Out, + isParams: parameterDeclaration.ParameterModifier == ParameterModifier.Params)); + } + // Look in lambda parameters: foreach (IParameter p in resolver.LocalVariables.OfType<IParameter>()) { if (p.Name == name) @@ -1479,12 +1496,20 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver ResolveResult rr = resolver.ResolveObjectCreation(type, arguments, argumentNames, false, initializerStatements); if (arguments.Length == 1 && rr.Type.Kind == TypeKind.Delegate) { - // process conversion in case it's a delegate creation - ProcessConversionResult(objectCreateExpression.Arguments.Single(), rr as ConversionResolveResult); - // wrap the result so that the delegate creation is not handled as a reference - // to the target method - otherwise FindReferencedEntities would produce two results for - // the same delegate creation. - return WrapResult(rr); + // Apply conversion to argument if it directly wraps the argument + // (but not when creating a delegate from a delegate, as then there would be a MGRR for .Invoke in between) + // This is necessary for lambda type inference. + var crr = rr as ConversionResolveResult; + if (crr != null && crr.Input == arguments[0]) { + ProcessConversionResult(objectCreateExpression.Arguments.Single(), crr); + + // wrap the result so that the delegate creation is not handled as a reference + // to the target method - otherwise FindReferencedEntities would produce two results for + // the same delegate creation. + return WrapResult(rr); + } else { + return rr; + } } else { // process conversions in all other cases ProcessConversionsInInvocation(null, objectCreateExpression.Arguments, rr as CSharpInvocationResolveResult); @@ -3847,7 +3872,102 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver #region Documentation Reference ResolveResult IAstVisitor<ResolveResult>.VisitDocumentationReference(DocumentationReference documentationReference) { - throw new NotImplementedException(); + // Resolve child nodes: + ITypeDefinition declaringTypeDef; + if (documentationReference.DeclaringType.IsNull) + declaringTypeDef = resolver.CurrentTypeDefinition; + else + declaringTypeDef = ResolveType(documentationReference.DeclaringType).GetDefinition(); + IType[] typeArguments = documentationReference.TypeArguments.Select(ResolveType).ToArray(); + IType conversionOperatorReturnType = ResolveType(documentationReference.ConversionOperatorReturnType); + IParameter[] parameters = documentationReference.Parameters.Select(ResolveXmlDocParameter).ToArray(); + + if (documentationReference.EntityType == EntityType.TypeDefinition) { + if (declaringTypeDef != null) + return new TypeResolveResult(declaringTypeDef); + else + return errorResult; + } + + if (documentationReference.EntityType == EntityType.None) { + // might be a type, member or ctor + string memberName = documentationReference.MemberName; + ResolveResult rr; + if (documentationReference.DeclaringType.IsNull) { + rr = resolver.LookupSimpleNameOrTypeName(memberName, typeArguments, NameLookupMode.Expression); + } else { + var target = Resolve(documentationReference.DeclaringType); + rr = resolver.ResolveMemberAccess(target, memberName, typeArguments); + } + // reduce to definition: + if (rr.IsError) { + return rr; + } else if (rr is TypeResolveResult) { + var typeDef = rr.Type.GetDefinition(); + if (typeDef == null) + return errorResult; + if (documentationReference.HasParameterList) { + var ctors = typeDef.GetConstructors(options: GetMemberOptions.IgnoreInheritedMembers | GetMemberOptions.ReturnMemberDefinitions); + return FindByParameters(ctors, parameters); + } else { + return new TypeResolveResult(typeDef); + } + } else if (rr is MemberResolveResult) { + var mrr = (MemberResolveResult)rr; + return new MemberResolveResult(null, mrr.Member.MemberDefinition); + } else if (rr is MethodGroupResolveResult) { + var mgrr = (MethodGroupResolveResult)rr; + var methods = mgrr.MethodsGroupedByDeclaringType.Reverse() + .SelectMany(ml => ml.Select(m => (IParameterizedMember)m.MemberDefinition)); + return FindByParameters(methods, parameters); + } + return rr; + } + + // Indexer or operator + if (declaringTypeDef == null) + return errorResult; + if (documentationReference.EntityType == EntityType.Indexer) { + var indexers = declaringTypeDef.Properties.Where(p => p.IsIndexer && !p.IsExplicitInterfaceImplementation); + return FindByParameters(indexers, parameters); + } else if (documentationReference.EntityType == EntityType.Operator) { + var opType = documentationReference.OperatorType; + string memberName = OperatorDeclaration.GetName(opType); + var methods = declaringTypeDef.Methods.Where(m => m.IsOperator && m.Name == memberName); + if (opType == OperatorType.Implicit || opType == OperatorType.Explicit) { + // conversion operator + foreach (var method in methods) { + if (ParameterListComparer.Instance.Equals(method.Parameters, parameters)) { + if (method.ReturnType.Equals(conversionOperatorReturnType)) + return new MemberResolveResult(null, method); + } + } + return new MemberResolveResult(null, methods.FirstOrDefault()); + } else { + // not a conversion operator + return FindByParameters(methods, parameters); + } + } else { + throw new NotSupportedException(); // unknown entity type + } + } + + IParameter ResolveXmlDocParameter(ParameterDeclaration p) + { + var lrr = Resolve(p) as LocalResolveResult; + if (lrr != null && lrr.IsParameter) + return (IParameter)lrr.Variable; + else + return new DefaultParameter(SpecialType.UnknownType, string.Empty); + } + + ResolveResult FindByParameters(IEnumerable<IParameterizedMember> methods, IList<IParameter> parameters) + { + foreach (var method in methods) { + if (ParameterListComparer.Instance.Equals(method.Parameters, parameters)) + return new MemberResolveResult(null, method); + } + return new MemberResolveResult(null, methods.FirstOrDefault()); } #endregion } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs index 28ee59a3f0..fe72e9b576 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs @@ -290,6 +290,10 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem get { return assembly.Compilation; } } + IEnumerable<IAssembly> INamespace.ContributingAssemblies { + get { return new [] { assembly }; } + } + INamespace INamespace.GetChildNamespace(string name) { var nameComparer = assembly.compilation.NameComparer; diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpDocumentationComment.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpDocumentationComment.cs index 5ca58078cb..d831eea509 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpDocumentationComment.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpDocumentationComment.cs @@ -17,8 +17,10 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.NRefactory.CSharp.Resolver; using ICSharpCode.NRefactory.Documentation; using ICSharpCode.NRefactory.Editor; +using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; namespace ICSharpCode.NRefactory.CSharp.TypeSystem @@ -38,6 +40,23 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem // resolve ID string return base.ResolveCref(cref); } + var documentationReference = new CSharpParser().ParseDocumentationReference(cref); + var csharpContext = context as CSharpTypeResolveContext; + CSharpResolver resolver; + if (csharpContext != null) { + resolver = new CSharpResolver(csharpContext); + } else { + resolver = new CSharpResolver(context.Compilation); + } + var astResolver = new CSharpAstResolver(resolver, documentationReference); + var rr = astResolver.Resolve(documentationReference); + + MemberResolveResult mrr = rr as MemberResolveResult; + if (mrr != null) + return mrr.Member; + TypeResolveResult trr = rr as TypeResolveResult; + if (trr != null) + return trr.Type.GetDefinition(); return null; } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs index f98d5a96ec..063a095192 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs @@ -172,6 +172,10 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem get { return EmptyList<ITypeDefinition>.Instance; } } + IEnumerable<IAssembly> INamespace.ContributingAssemblies { + get { return EmptyList<IAssembly>.Instance; } + } + ICompilation IResolved.Compilation { get { return parentNamespace.Compilation; } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs index bd47e64d1b..6da26cfc81 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs @@ -99,8 +99,12 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem { if (node == null || node.IsNull) return DomRegion.Empty; - else - return MakeRegion(node.StartLocation, node.EndLocation); + AstNode child = node.FirstChild; + // Skip attributes and comments between attributes for the purpose of + // getting a declaration's region. + while (child != null && (child is AttributeSection || child.NodeType == NodeType.Whitespace)) + child = child.NextSibling; + return MakeRegion((child ?? node).StartLocation, node.EndLocation); } DomRegion MakeBraceRegion(AstNode node) diff --git a/main/contrib/ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs b/main/contrib/ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs index 78f8cd9043..a5a88689b6 100644 --- a/main/contrib/ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs +++ b/main/contrib/ICSharpCode.NRefactory/Completion/CompletionExtensionMethods.cs @@ -44,7 +44,7 @@ namespace ICSharpCode.NRefactory.Completion { if (entity == null) throw new ArgumentNullException ("entity"); - + var browsableState = entity.Attributes.FirstOrDefault(attr => attr.AttributeType.Name == "EditorBrowsableAttribute" && attr.AttributeType.Namespace == "System.ComponentModel"); if (browsableState != null && browsableState.PositionalArguments.Count == 1) { try { diff --git a/main/contrib/ICSharpCode.NRefactory/Properties/GlobalAssemblyInfo.cs b/main/contrib/ICSharpCode.NRefactory/Properties/GlobalAssemblyInfo.cs new file mode 100644 index 0000000000..3c6b82ac4b --- /dev/null +++ b/main/contrib/ICSharpCode.NRefactory/Properties/GlobalAssemblyInfo.cs @@ -0,0 +1,26 @@ +#region Using directives + +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +#endregion + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyCompany("ICSharpCode")] +[assembly: AssemblyProduct("SharpDevelop/MonoDevelop")] +[assembly: AssemblyCopyright("Copyright 2010-2012 AlphaSierraPapa")] + +// This sets the default COM visibility of types in the assembly to invisible. +// If you need to expose a type to COM, use [ComVisible(true)] on that type. +[assembly: ComVisible(false)] + +// We keep the AssemblyVersion at 5.0.0.0 for all versions of NRefactory 5. +// This eliminates the need for binding redirects. +[assembly: AssemblyVersion("5.0.0.0")] + +// [AssemblyFileVersion] is the version of the NuGet package, +// should follow http://semver.org/ rules +[assembly: AssemblyFileVersion("5.1.0")] diff --git a/main/contrib/ICSharpCode.NRefactory/Semantics/Conversion.cs b/main/contrib/ICSharpCode.NRefactory/Semantics/Conversion.cs index a68a7f407f..fc5889d55f 100644 --- a/main/contrib/ICSharpCode.NRefactory/Semantics/Conversion.cs +++ b/main/contrib/ICSharpCode.NRefactory/Semantics/Conversion.cs @@ -185,6 +185,14 @@ namespace ICSharpCode.NRefactory.Semantics get { return type == 0; } } + public override bool IsNullLiteralConversion { + get { return type == 1; } + } + + public override bool IsConstantExpressionConversion { + get { return type == 2; } + } + public override bool IsReferenceConversion { get { return type == 3; } } @@ -365,6 +373,14 @@ namespace ICSharpCode.NRefactory.Semantics get { return false; } } + public virtual bool IsNullLiteralConversion { + get { return false; } + } + + public virtual bool IsConstantExpressionConversion { + get { return false; } + } + public virtual bool IsNumericConversion { get { return false; } } diff --git a/main/contrib/ICSharpCode.NRefactory/Semantics/MemberResolveResult.cs b/main/contrib/ICSharpCode.NRefactory/Semantics/MemberResolveResult.cs index f861920b45..3a2430856f 100644 --- a/main/contrib/ICSharpCode.NRefactory/Semantics/MemberResolveResult.cs +++ b/main/contrib/ICSharpCode.NRefactory/Semantics/MemberResolveResult.cs @@ -28,7 +28,7 @@ namespace ICSharpCode.NRefactory.Semantics /// <summary> /// Represents the result of a member invocation. /// Used for field/property/event access. - /// Also, <see cref="InvocationResultResult"/> derives from MemberResolveResult. + /// Also, <see cref="InvocationResolveResult"/> derives from MemberResolveResult. /// </summary> public class MemberResolveResult : ResolveResult { diff --git a/main/contrib/ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs b/main/contrib/ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs index 8c8e26e46f..1739bf5a1d 100644 --- a/main/contrib/ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs +++ b/main/contrib/ICSharpCode.NRefactory/TypeSystem/CecilLoader.cs @@ -55,6 +55,12 @@ namespace ICSharpCode.NRefactory.TypeSystem /// the Cecil objects to stay in memory (which can significantly increase memory usage). /// It also prevents serialization of the Cecil-loaded type system. /// </summary> + /// <remarks> + /// Because the type system can be used on multiple threads, but Cecil is not + /// thread-safe for concurrent read access, the CecilLoader will lock on the <see cref="ModuleDefinition"/> instance + /// for every delay-loading operation. + /// If you access the Cecil objects directly in your application, you may need to take the same lock. + /// </remarks> public bool LazyLoad { get; set; } /// <summary> @@ -73,6 +79,17 @@ namespace ICSharpCode.NRefactory.TypeSystem public CancellationToken CancellationToken { get; set; } /// <summary> + /// This delegate gets executed whenever an entity was loaded. + /// </summary> + /// <remarks> + /// This callback may be to build a dictionary that maps between + /// entities and cecil objects. + /// Warning: if delay-loading is used and the type system is accessed by multiple threads, + /// the callback may be invoked concurrently on multiple threads. + /// </remarks> + public Action<IUnresolvedEntity, MemberReference> OnEntityLoaded { get; set; } + + /// <summary> /// Gets a value indicating whether this instance stores references to the cecil objects. /// </summary> /// <value> @@ -87,16 +104,39 @@ namespace ICSharpCode.NRefactory.TypeSystem /// <summary> /// Initializes a new instance of the <see cref="ICSharpCode.NRefactory.TypeSystem.CecilLoader"/> class. /// </summary> + public CecilLoader() + { + // Enable interning by default. + this.InterningProvider = new SimpleInterningProvider(); + } + + /// <summary> + /// Initializes a new instance of the <see cref="ICSharpCode.NRefactory.TypeSystem.CecilLoader"/> class. + /// </summary> /// <param name='createCecilReferences'> /// If true references to the cecil objects are hold. In this case the cecil loader can do a type system -> cecil mapping. /// </param> - public CecilLoader (bool createCecilReferences = false) + [Obsolete("The built-in entity<->cecil mapping is obsolete. Use the OnEntityLoaded callback instead!")] + public CecilLoader(bool createCecilReferences) : this() { if (createCecilReferences) typeSystemTranslationTable = new Dictionary<object, object> (); - - // Enable interning by default. - this.InterningProvider = new SimpleInterningProvider(); + } + + /// <summary> + /// Creates a nested CecilLoader for lazy-loading. + /// </summary> + private CecilLoader(CecilLoader loader) + { + // use a shared typeSystemTranslationTable + this.typeSystemTranslationTable = loader.typeSystemTranslationTable; + this.IncludeInternalMembers = loader.IncludeInternalMembers; + this.LazyLoad = loader.LazyLoad; + this.OnEntityLoaded = loader.OnEntityLoaded; + this.currentModule = loader.currentModule; + this.currentAssembly = loader.currentAssembly; + // don't use interning - the interning provider is most likely not thread-safe + // don't use cancellation for delay-loaded members } #region Load From AssemblyDefinition @@ -105,69 +145,76 @@ namespace ICSharpCode.NRefactory.TypeSystem /// </summary> /// <returns>IProjectContent that represents the assembly</returns> [CLSCompliant(false)] - public IUnresolvedAssembly LoadAssembly (AssemblyDefinition assemblyDefinition, string location = null) + public IUnresolvedAssembly LoadAssembly(AssemblyDefinition assemblyDefinition) { if (assemblyDefinition == null) - throw new ArgumentNullException ("assemblyDefinition"); + throw new ArgumentNullException("assemblyDefinition"); this.currentModule = assemblyDefinition.MainModule; - + // Read assembly and module attributes - IList<IUnresolvedAttribute> assemblyAttributes = new List<IUnresolvedAttribute> (); - IList<IUnresolvedAttribute> moduleAttributes = new List<IUnresolvedAttribute> (); - AddAttributes (assemblyDefinition, assemblyAttributes); - AddAttributes (assemblyDefinition.MainModule, moduleAttributes); + IList<IUnresolvedAttribute> assemblyAttributes = new List<IUnresolvedAttribute>(); + IList<IUnresolvedAttribute> moduleAttributes = new List<IUnresolvedAttribute>(); + AddAttributes(assemblyDefinition, assemblyAttributes); + AddAttributes(assemblyDefinition.MainModule, moduleAttributes); if (this.InterningProvider != null) { - assemblyAttributes = this.InterningProvider.InternList (assemblyAttributes); - moduleAttributes = this.InterningProvider.InternList (moduleAttributes); + assemblyAttributes = this.InterningProvider.InternList(assemblyAttributes); + moduleAttributes = this.InterningProvider.InternList(moduleAttributes); } - this.currentAssembly = new CecilUnresolvedAssembly (assemblyDefinition.Name.Name, this.DocumentationProvider); - currentAssembly.AssemblyAttributes.AddRange (assemblyAttributes); - currentAssembly.ModuleAttributes.AddRange (assemblyAttributes); + this.currentAssembly = new CecilUnresolvedAssembly(assemblyDefinition.Name.Name, this.DocumentationProvider); + currentAssembly.Location = assemblyDefinition.MainModule.FullyQualifiedName; + currentAssembly.AssemblyAttributes.AddRange(assemblyAttributes); + currentAssembly.ModuleAttributes.AddRange(assemblyAttributes); // Register type forwarders: foreach (ExportedType type in assemblyDefinition.MainModule.ExportedTypes) { if (type.IsForwarder) { int typeParameterCount; - string name = ReflectionHelper.SplitTypeParameterCountFromReflectionName (type.Name, out typeParameterCount); - var typeRef = new GetClassTypeReference (GetAssemblyReference (type.Scope), type.Namespace, name, typeParameterCount); - typeRef = this.InterningProvider.Intern (typeRef); - var key = new FullNameAndTypeParameterCount (type.Namespace, name, typeParameterCount); - currentAssembly.AddTypeForwarder (key, typeRef); + string name = ReflectionHelper.SplitTypeParameterCountFromReflectionName(type.Name, out typeParameterCount); + var typeRef = new GetClassTypeReference(GetAssemblyReference(type.Scope), type.Namespace, name, typeParameterCount); + if (this.InterningProvider != null) + typeRef = this.InterningProvider.Intern(typeRef); + var key = new FullNameAndTypeParameterCount(type.Namespace, name, typeParameterCount); + currentAssembly.AddTypeForwarder(key, typeRef); } } // Create and register all types: - List<TypeDefinition> cecilTypeDefs = new List<TypeDefinition> (); - List<DefaultUnresolvedTypeDefinition> typeDefs = new List<DefaultUnresolvedTypeDefinition> (); + CecilLoader cecilLoaderCloneForLazyLoading = LazyLoad ? new CecilLoader(this) : null; + List<TypeDefinition> cecilTypeDefs = new List<TypeDefinition>(); + List<DefaultUnresolvedTypeDefinition> typeDefs = new List<DefaultUnresolvedTypeDefinition>(); foreach (ModuleDefinition module in assemblyDefinition.Modules) { foreach (TypeDefinition td in module.Types) { - this.CancellationToken.ThrowIfCancellationRequested (); + this.CancellationToken.ThrowIfCancellationRequested(); if (this.IncludeInternalMembers || (td.Attributes & TypeAttributes.VisibilityMask) == TypeAttributes.Public) { string name = td.Name; if (name.Length == 0) continue; - var t = CreateTopLevelTypeDefinition (td); - cecilTypeDefs.Add (td); - typeDefs.Add (t); - currentAssembly.AddTypeDefinition (t); + if (this.LazyLoad) { + var t = new LazyCecilTypeDefinition(cecilLoaderCloneForLazyLoading, td); + currentAssembly.AddTypeDefinition(t); + RegisterCecilObject(t, td); + } else { + var t = CreateTopLevelTypeDefinition(td); + cecilTypeDefs.Add(td); + typeDefs.Add(t); + currentAssembly.AddTypeDefinition(t); + // The registration will happen after the members are initialized + } } } } // Initialize the type's members: for (int i = 0; i < typeDefs.Count; i++) { - InitTypeDefinition (cecilTypeDefs [i], typeDefs [i]); + InitTypeDefinition(cecilTypeDefs[i], typeDefs[i]); } - if (HasCecilReferences) { - typeSystemTranslationTable [this.currentAssembly] = assemblyDefinition; - } + AddToTypeSystemTranslationTable(this.currentAssembly, assemblyDefinition); var result = this.currentAssembly; - result.Location = location ?? ""; this.currentAssembly = null; this.currentModule = null; return result; @@ -230,10 +277,7 @@ namespace ICSharpCode.NRefactory.TypeSystem throw new ArgumentNullException("fileName"); var param = new ReaderParameters { AssemblyResolver = new DummyAssemblyResolver() }; AssemblyDefinition asm = AssemblyDefinition.ReadAssembly(fileName, param); - var result = LoadAssembly(asm, fileName); - if (HasCecilReferences) - typeSystemTranslationTable[result] = asm; - return result; + return LoadAssembly(asm); } // used to prevent Cecil from loading referenced assemblies @@ -1179,14 +1223,14 @@ namespace ICSharpCode.NRefactory.TypeSystem EntityType memberType; var b = ReadByte(); switch (b) { - case 0x53: - memberType = EntityType.Field; - break; - case 0x54: - memberType = EntityType.Property; - break; - default: - throw new NotSupportedException(string.Format("Custom member type 0x{0:x} is not supported.", b)); + case 0x53: + memberType = EntityType.Field; + break; + case 0x54: + memberType = EntityType.Property; + break; + default: + throw new NotSupportedException(string.Format("Custom member type 0x{0:x} is not supported.", b)); } IType type = ReadCustomAttributeFieldOrPropType(); string name = ReadSerString(); @@ -1502,12 +1546,11 @@ namespace ICSharpCode.NRefactory.TypeSystem td.AddDefaultConstructorIfRequired = (td.Kind == TypeKind.Struct || td.Kind == TypeKind.Enum); InitMembers(typeDefinition, td, td.Members); - if (HasCecilReferences) - typeSystemTranslationTable[td] = typeDefinition; if (this.InterningProvider != null) { td.ApplyInterningProvider(this.InterningProvider); } td.Freeze(); + RegisterCecilObject(td, typeDefinition); } void InitBaseTypes(TypeDefinition typeDefinition, IList<ITypeReference> baseTypes) @@ -1659,7 +1702,18 @@ namespace ICSharpCode.NRefactory.TypeSystem bool getterVisible = property.GetMethod != null && IsVisible(property.GetMethod.Attributes); bool setterVisible = property.SetMethod != null && IsVisible(property.SetMethod.Attributes); if (getterVisible || setterVisible) { - EntityType type = property.Name == defaultMemberName ? EntityType.Indexer : EntityType.Property; + EntityType type = EntityType.Property; + if (property.HasParameters) { + // Try to detect indexer: + if (property.Name == defaultMemberName) { + type = EntityType.Indexer; // normal indexer + } else if (property.Name.EndsWith(".Item", StringComparison.Ordinal) && (property.GetMethod ?? property.SetMethod).HasOverrides) { + // explicit interface implementation of indexer + type = EntityType.Indexer; + // We can't really tell parameterized properties and indexers apart in this case without + // resolving the interface, so we rely on the "Item" naming convention instead. + } + } members.Add(ReadProperty(property, td, type)); } } @@ -1710,8 +1764,6 @@ namespace ICSharpCode.NRefactory.TypeSystem loader.AddAttributes(typeDefinition, this); flags[FlagHasExtensionMethods] = HasExtensionAttribute(typeDefinition); - if (loader.HasCecilReferences) - loader.typeSystemTranslationTable[this] = typeDefinition; if (loader.InterningProvider != null) { this.ApplyInterningProvider(loader.InterningProvider); } @@ -1723,6 +1775,15 @@ namespace ICSharpCode.NRefactory.TypeSystem set { throw new NotSupportedException(); } } + public override string FullName { + // This works because LazyCecilTypeDefinition is only used for top-level types + get { return cecilTypeDef.FullName; } + } + + public override string ReflectionName { + get { return cecilTypeDef.FullName; } + } + public TypeKind Kind { get { return kind; } } @@ -1736,7 +1797,8 @@ namespace ICSharpCode.NRefactory.TypeSystem var result = LazyInit.VolatileRead(ref this.baseTypes); if (result != null) { return result; - } else { + } + lock (loader.currentModule) { result = new List<ITypeReference>(); loader.InitBaseTypes(cecilTypeDef, result); return LazyInit.GetOrSet(ref this.baseTypes, FreezableHelper.FreezeList(result)); @@ -1749,7 +1811,10 @@ namespace ICSharpCode.NRefactory.TypeSystem var result = LazyInit.VolatileRead(ref this.nestedTypes); if (result != null) { return result; - } else { + } + lock (loader.currentModule) { + if (this.nestedTypes != null) + return this.nestedTypes; result = new List<IUnresolvedTypeDefinition>(); loader.InitNestedTypes(cecilTypeDef, this, result); return LazyInit.GetOrSet(ref this.nestedTypes, FreezableHelper.FreezeList(result)); @@ -1762,7 +1827,10 @@ namespace ICSharpCode.NRefactory.TypeSystem var result = LazyInit.VolatileRead(ref this.members); if (result != null) { return result; - } else { + } + lock (loader.currentModule) { + if (this.members != null) + return this.members; result = new List<IUnresolvedMember>(); loader.InitMembers(cecilTypeDef, this, result); return LazyInit.GetOrSet(ref this.members, FreezableHelper.FreezeList(result)); @@ -2124,16 +2192,34 @@ namespace ICSharpCode.NRefactory.TypeSystem } #endregion - void FinishReadMember(AbstractUnresolvedMember member, object cecilDefinition) + void FinishReadMember(AbstractUnresolvedMember member, MemberReference cecilDefinition) { - member.ApplyInterningProvider(this.InterningProvider); + if (this.InterningProvider != null) + member.ApplyInterningProvider(this.InterningProvider); member.Freeze(); - if (HasCecilReferences) - typeSystemTranslationTable[member] = cecilDefinition; + RegisterCecilObject(member, cecilDefinition); } #region Type system translation table - Dictionary<object, object> typeSystemTranslationTable; + readonly Dictionary<object, object> typeSystemTranslationTable; + + void RegisterCecilObject(IUnresolvedEntity typeSystemObject, MemberReference cecilObject) + { + if (OnEntityLoaded != null) + OnEntityLoaded(typeSystemObject, cecilObject); + + AddToTypeSystemTranslationTable(typeSystemObject, cecilObject); + } + + void AddToTypeSystemTranslationTable(object typeSystemObject, object cecilObject) + { + if (typeSystemTranslationTable != null) { + // When lazy-loading, the dictionary might be shared between multiple cecil-loaders that are used concurrently + lock (typeSystemTranslationTable) { + typeSystemTranslationTable[typeSystemObject] = cecilObject; + } + } + } T InternalGetCecilObject<T> (object typeSystemObject) where T : class { @@ -2142,8 +2228,10 @@ namespace ICSharpCode.NRefactory.TypeSystem if (!HasCecilReferences) throw new NotSupportedException ("This instance contains no cecil references."); object result; - if (!typeSystemTranslationTable.TryGetValue (typeSystemObject, out result)) - return null; + lock (typeSystemTranslationTable) { + if (!typeSystemTranslationTable.TryGetValue (typeSystemObject, out result)) + return null; + } return result as T; } diff --git a/main/contrib/ICSharpCode.NRefactory/TypeSystem/ExtensionMethods.cs b/main/contrib/ICSharpCode.NRefactory/TypeSystem/ExtensionMethods.cs index a0a59c3560..0f02617087 100644 --- a/main/contrib/ICSharpCode.NRefactory/TypeSystem/ExtensionMethods.cs +++ b/main/contrib/ICSharpCode.NRefactory/TypeSystem/ExtensionMethods.cs @@ -92,7 +92,7 @@ namespace ICSharpCode.NRefactory.TypeSystem } #endregion - #region IsOpen / IsUnbound + #region IsOpen / IsUnbound / IsKnownType sealed class TypeClassificationVisitor : TypeVisitor { internal bool isOpen; @@ -140,6 +140,16 @@ namespace ICSharpCode.NRefactory.TypeSystem throw new ArgumentNullException("type"); return type is ITypeDefinition && type.TypeParameterCount > 0; } + + /// <summary> + /// Gets whether the type is the specified known type. + /// For generic known types, this returns true any parameterization of the type (and also for the definition itself). + /// </summary> + public static bool IsKnownType(this IType type, KnownTypeCode knownType) + { + var def = type.GetDefinition(); + return def != null && def.KnownTypeCode == knownType; + } #endregion #region Import diff --git a/main/contrib/ICSharpCode.NRefactory/TypeSystem/INamespace.cs b/main/contrib/ICSharpCode.NRefactory/TypeSystem/INamespace.cs index 487e4fc3e3..b3631fe060 100644 --- a/main/contrib/ICSharpCode.NRefactory/TypeSystem/INamespace.cs +++ b/main/contrib/ICSharpCode.NRefactory/TypeSystem/INamespace.cs @@ -63,6 +63,11 @@ namespace ICSharpCode.NRefactory.TypeSystem IEnumerable<ITypeDefinition> Types { get; } /// <summary> + /// Gets the assemblies that contribute types to this namespace (or to child namespaces). + /// </summary> + IEnumerable<IAssembly> ContributingAssemblies { get; } + + /// <summary> /// Gets a direct child namespace by its short name. /// Returns null when the namespace cannot be found. /// </summary> diff --git a/main/contrib/ICSharpCode.NRefactory/TypeSystem/IProjectContent.cs b/main/contrib/ICSharpCode.NRefactory/TypeSystem/IProjectContent.cs index 33982c9d2a..4a731c42ce 100644 --- a/main/contrib/ICSharpCode.NRefactory/TypeSystem/IProjectContent.cs +++ b/main/contrib/ICSharpCode.NRefactory/TypeSystem/IProjectContent.cs @@ -69,12 +69,12 @@ namespace ICSharpCode.NRefactory.TypeSystem /// Changes the assembly name of this project content. /// </summary> IProjectContent SetAssemblyName(string newAssemblyName); - + /// <summary> /// Changes the location of this project content. /// </summary> IProjectContent SetLocation(string newLocation); - + /// <summary> /// Add assembly references to this project content. /// </summary> diff --git a/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedMember.cs b/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedMember.cs index d027f0b21d..0ff0b25a58 100644 --- a/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedMember.cs +++ b/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/AbstractResolvedMember.cs @@ -76,7 +76,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation result.Add(member); } return result.ToArray(); - } else if (unresolved.IsStatic) { + } else if (unresolved.IsStatic || DeclaringTypeDefinition == null || DeclaringTypeDefinition.Kind == TypeKind.Interface) { return EmptyList<IMember>.Instance; } else { // TODO: implement interface member mappings correctly diff --git a/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs b/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs index 81866619ec..d74c1cae84 100644 --- a/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs +++ b/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/DefaultUnresolvedAssembly.cs @@ -76,8 +76,6 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation return location; } set { - if (value == null) - throw new ArgumentNullException("value"); FreezableHelper.ThrowIfFrozen(this); location = value; } @@ -380,6 +378,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation get { return parentNamespace; } } + IEnumerable<IAssembly> INamespace.ContributingAssemblies { + get { return new [] { assembly }; } + } + IEnumerable<INamespace> INamespace.ChildNamespaces { get { return childNamespaces; } } diff --git a/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/MergedNamespace.cs b/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/MergedNamespace.cs index 4363253f05..1ab85bcd4e 100644 --- a/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/MergedNamespace.cs +++ b/main/contrib/ICSharpCode.NRefactory/TypeSystem/Implementation/MergedNamespace.cs @@ -20,7 +20,6 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; -using System.Text; using ICSharpCode.NRefactory.Utils; namespace ICSharpCode.NRefactory.TypeSystem.Implementation @@ -96,6 +95,10 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation get { return compilation; } } + public IEnumerable<IAssembly> ContributingAssemblies { + get { return namespaces.SelectMany(ns => ns.ContributingAssemblies); } + } + public IEnumerable<INamespace> ChildNamespaces { get { return GetChildNamespaces().Values; } } diff --git a/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft.csproj b/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft.csproj index 31a59f45e7..4e2c6ccb0d 100644 --- a/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft.csproj +++ b/main/contrib/Mono.Debugger.Soft/Mono.Debugger.Soft.csproj @@ -120,6 +120,7 @@ <ProjectReference Include="..\..\external\cecil\Mono.Cecil.csproj"> <Project>{D68133BD-1E63-496E-9EDE-4FBDBF77B486}</Project> <Name>Mono.Cecil</Name> + <Private>False</Private> </ProjectReference> </ItemGroup> </Project> diff --git a/main/external/Makefile.am b/main/external/Makefile.am index a1883e7f9e..3386fb90d9 100644 --- a/main/external/Makefile.am +++ b/main/external/Makefile.am @@ -1,27 +1,10 @@ TARBALL_PATH=../../tarballs/external -CECIL_SLN=cecil/Mono.Cecil.sln -CECIL=/property:Configuration=net_4_0_Debug $(CECIL_SLN) -CECIL_OUTPUT=cecil/bin/net_4_0_Debug/ -CECIL_ASSEMBLIES = $(addprefix $(CECIL_OUTPUT), Mono.Cecil.dll Mono.Cecil.Mdb.dll) -CECIL_BINARIES = $(CECIL_ASSEMBLIES) $(addsuffix .mdb, $(CECIL_ASSEMBLIES)) - -BINARIES = $(CECIL_BINARIES) -OUTPUT=$(top_builddir)/build/bin - all: $(MAKE) -C monomac/src - mkdir -p $(OUTPUT) - xbuild /property:CodePage=65001 $(CECIL) - for binary in $(BINARIES); do \ - rsync -u $$binary $(OUTPUT)/ || exit 1; \ - done clean: - @if test -f $(CECIL_SLN); then xbuild /property:CodePage=65001 $(CECIL) /t:Clean; fi - for binary in $(BINARIES); do \ - rm -f $(OUTPUT)/`basename $$binary`; \ - done + $(MAKE) -C monomac/src clean install: uninstall: diff --git a/main/external/monomac b/main/external/monomac -Subproject 0ba54c24a2ac5cc441116d15c30386662a6fa8d +Subproject 48b3aed9a8de01237ea3a2a242808b186de1ae2 diff --git a/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.AspNet/MonoDevelop.Debugger.Soft.AspNet.csproj b/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.AspNet/MonoDevelop.Debugger.Soft.AspNet.csproj index 6cf752bc5d..5da16af23e 100644 --- a/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.AspNet/MonoDevelop.Debugger.Soft.AspNet.csproj +++ b/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.AspNet/MonoDevelop.Debugger.Soft.AspNet.csproj @@ -85,6 +85,7 @@ <ProjectReference Include="..\..\..\..\contrib\Mono.Debugger.Soft\Mono.Debugger.Soft.csproj"> <Project>{372E8E3E-29D5-4B4D-88A2-4711CD628C4E}</Project> <Name>Mono.Debugger.Soft</Name> + <Private>False</Private> </ProjectReference> </ItemGroup> <ItemGroup> diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExpressionEvaluatorDialog.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExpressionEvaluatorDialog.cs index 553f9baf24..1897da9614 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExpressionEvaluatorDialog.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ExpressionEvaluatorDialog.cs @@ -26,16 +26,28 @@ // using System; +using MonoDevelop.Ide.CodeCompletion; +using Gtk; namespace MonoDevelop.Debugger { - public partial class ExpressionEvaluatorDialog : Gtk.Dialog + public partial class ExpressionEvaluatorDialog : Gtk.Dialog, ICompletionWidget { + Mono.Debugging.Client.CompletionData currentCompletionData; + public ExpressionEvaluatorDialog() { this.Build(); valueTree.Frame = DebuggingService.CurrentFrame; valueTree.AllowExpanding = true; + entry.KeyPressEvent += OnEditKeyPress; + CompletionWindowManager.WindowClosed += HandleCompletionWindowClosed; + } + + protected override void OnDestroyed () + { + CompletionWindowManager.WindowClosed -= HandleCompletionWindowClosed; + base.OnDestroyed (); } public string Expression { @@ -58,5 +70,157 @@ namespace MonoDevelop.Debugger { UpdateExpression (); } + + private void HandleCompletionWindowClosed (object sender, EventArgs e) + { + currentCompletionData = null; + } + + [GLib.ConnectBeforeAttribute] + void OnEditKeyPress (object s, Gtk.KeyPressEventArgs args) + { + Gtk.Entry entry = (Gtk.Entry)s; + + if (currentCompletionData != null) { + bool ret = CompletionWindowManager.PreProcessKeyEvent (args.Event.Key, (char)args.Event.Key, args.Event.State); + CompletionWindowManager.PostProcessKeyEvent (args.Event.Key, (char)args.Event.Key, args.Event.State); + args.RetVal = ret; + } + + Gtk.Application.Invoke (delegate { + char c = (char)Gdk.Keyval.ToUnicode (args.Event.KeyValue); + if (currentCompletionData == null && IsCompletionChar (c)) { + string exp = entry.Text.Substring (0, entry.CursorPosition); + currentCompletionData = GetCompletionData (exp); + if (currentCompletionData != null) { + DebugCompletionDataList dataList = new DebugCompletionDataList (currentCompletionData); + CodeCompletionContext ctx = ((ICompletionWidget)this).CreateCodeCompletionContext (entry.CursorPosition - currentCompletionData.ExpressionLenght); + CompletionWindowManager.ShowWindow (null, c, dataList, this, ctx); + } else + currentCompletionData = null; + } + }); + } + + bool IsCompletionChar (char c) + { + return (char.IsLetterOrDigit (c) || char.IsPunctuation (c) || char.IsSymbol (c) || char.IsWhiteSpace (c)); + } + + Mono.Debugging.Client.CompletionData GetCompletionData (string exp) + { + if (valueTree.Frame != null) + return valueTree.Frame.GetExpressionCompletionData (exp); + else + return null; + } + + #region ICompletionWidget implementation + + CodeCompletionContext ICompletionWidget.CurrentCodeCompletionContext { + get { + return ((ICompletionWidget)this).CreateCodeCompletionContext (entry.Position); + } + } + + EventHandler completionContextChanged; + + event EventHandler ICompletionWidget.CompletionContextChanged { + add { completionContextChanged += value; } + remove { completionContextChanged -= value; } + } + + string ICompletionWidget.GetText (int startOffset, int endOffset) + { + if (startOffset < 0) startOffset = 0; + if (endOffset > entry.Text.Length) endOffset = entry.Text.Length; + return entry.Text.Substring (startOffset, endOffset - startOffset); + } + + void ICompletionWidget.Replace (int offset, int count, string text) + { + if (count > 0) + entry.Text = entry.Text.Remove (offset, count); + if (!string.IsNullOrEmpty (text)) + entry.Text = entry.Text.Insert (offset, text); + } + + int ICompletionWidget.CaretOffset { + get { + return entry.Position; + } + } + + char ICompletionWidget.GetChar (int offset) + { + string txt = entry.Text; + if (offset >= txt.Length) + return (char)0; + else + return txt [offset]; + } + + CodeCompletionContext ICompletionWidget.CreateCodeCompletionContext (int triggerOffset) + { + CodeCompletionContext c = new CodeCompletionContext (); + c.TriggerLine = 0; + c.TriggerOffset = triggerOffset; + c.TriggerLineOffset = c.TriggerOffset; + c.TriggerTextHeight = entry.SizeRequest ().Height; + c.TriggerWordLength = currentCompletionData.ExpressionLenght; + + int x, y; + int tx, ty; + entry.GdkWindow.GetOrigin (out x, out y); + entry.GetLayoutOffsets (out tx, out ty); + int cp = entry.TextIndexToLayoutIndex (entry.Position); + Pango.Rectangle rect = entry.Layout.IndexToPos (cp); + tx += Pango.Units.ToPixels (rect.X) + x; + y += entry.Allocation.Height; + + c.TriggerXCoord = tx; + c.TriggerYCoord = y; + return c; + } + + string ICompletionWidget.GetCompletionText (CodeCompletionContext ctx) + { + return entry.Text.Substring (ctx.TriggerOffset, ctx.TriggerWordLength); + } + + void ICompletionWidget.SetCompletionText (CodeCompletionContext ctx, string partial_word, string complete_word) + { + int sp = entry.Position - partial_word.Length; + entry.DeleteText (sp, sp + partial_word.Length); + entry.InsertText (complete_word, ref sp); + entry.Position = sp; // sp is incremented by InsertText + } + + void ICompletionWidget.SetCompletionText (CodeCompletionContext ctx, string partial_word, string complete_word, int offset) + { + int sp = entry.Position - partial_word.Length; + entry.DeleteText (sp, sp + partial_word.Length); + entry.InsertText (complete_word, ref sp); + entry.Position = sp + offset; // sp is incremented by InsertText + } + + int ICompletionWidget.TextLength { + get { + return entry.Text.Length; + } + } + + int ICompletionWidget.SelectedLength { + get { + return 0; + } + } + + Style ICompletionWidget.GtkStyle { + get { + return entry.Style; + } + } + #endregion } } diff --git a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs index 828869a8c7..8a28349596 100644 --- a/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs +++ b/main/src/addins/VersionControl/MonoDevelop.VersionControl/MonoDevelop.VersionControl/VersionControlService.cs @@ -603,12 +603,12 @@ namespace MonoDevelop.VersionControl { if (configuration == null) { if (File.Exists (ConfigFile)) { - XmlDataSerializer ser = new XmlDataSerializer (dataContext); - XmlTextReader reader = new XmlTextReader (new StreamReader (ConfigFile)); try { - configuration = (VersionControlConfiguration) ser.Deserialize (reader, typeof (VersionControlConfiguration)); - } finally { - reader.Close (); + XmlDataSerializer ser = new XmlDataSerializer (dataContext); + using (var reader = File.OpenText (ConfigFile)) + configuration = (VersionControlConfiguration) ser.Deserialize (reader, typeof (VersionControlConfiguration)); + } catch { + ((FilePath) ConfigFile).Delete (); } } if (configuration == null) @@ -621,12 +621,9 @@ namespace MonoDevelop.VersionControl { if (configuration != null) { XmlDataSerializer ser = new XmlDataSerializer (dataContext); - XmlTextWriter tw = new XmlTextWriter (new StreamWriter (ConfigFile)); - tw.Formatting = Formatting.Indented; - try { + using (var tw = new XmlTextWriter (File.CreateText (ConfigFile))) { + tw.Formatting = Formatting.Indented; ser.Serialize (tw, configuration, typeof (VersionControlConfiguration)); - } finally { - tw.Close (); } } } diff --git a/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/LiteralValueReference.cs b/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/LiteralValueReference.cs index c410cbe801..c92aca9cde 100644 --- a/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/LiteralValueReference.cs +++ b/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/LiteralValueReference.cs @@ -44,6 +44,17 @@ namespace Mono.Debugging.Evaluation { } + public static LiteralValueReference CreateTargetBaseObjectLiteral (EvaluationContext ctx, string name, object value) + { + LiteralValueReference val = new LiteralValueReference (ctx); + var type = ctx.Adapter.GetValueType (ctx, value); + val.name = name; + val.value = value; + val.type = ctx.Adapter.GetBaseType (ctx, type); + val.objCreated = true; + return val; + } + public static LiteralValueReference CreateTargetObjectLiteral (EvaluationContext ctx, string name, object value) { LiteralValueReference val = new LiteralValueReference (ctx); diff --git a/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/NRefactoryEvaluator.cs b/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/NRefactoryEvaluator.cs index c94b552b59..d86e2f3fc6 100644 --- a/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/NRefactoryEvaluator.cs +++ b/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/NRefactoryEvaluator.cs @@ -1,9 +1,10 @@ // NRefactoryEvaluator.cs // -// Author: -// Lluis Sanchez Gual <lluis@novell.com> +// Authors: Lluis Sanchez Gual <lluis@novell.com> +// Jeffrey Stedfast <jeff@xamarin.com> // // Copyright (c) 2008 Novell, Inc (http://www.novell.com) +// Copyright (c) 2012 Xamarin Inc. (http://www.xamarin.com) // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -427,7 +428,15 @@ namespace Mono.Debugging.Evaluation public override object VisitObjectCreateExpression (ICSharpCode.OldNRefactory.Ast.ObjectCreateExpression objectCreateExpression, object data) { - throw CreateNotSupportedError (); + var type = objectCreateExpression.CreateType.AcceptVisitor (this, data) as TypeValueReference; + var args = new List<object> (); + + foreach (var param in objectCreateExpression.Parameters) { + ValueReference val = param.AcceptVisitor (this, data) as ValueReference; + args.Add (val != null ? val.Value : null); + } + + return LiteralValueReference.CreateTargetObjectLiteral (ctx, name, ctx.Adapter.CreateValue (ctx, type.Type, args.ToArray ())); } public override object VisitInvocationExpression (ICSharpCode.OldNRefactory.Ast.InvocationExpression invocationExpression, object data) @@ -863,12 +872,8 @@ namespace Mono.Debugging.Evaluation public override object VisitBaseReferenceExpression (ICSharpCode.OldNRefactory.Ast.BaseReferenceExpression baseReferenceExpression, object data) { ValueReference thisobj = ctx.Adapter.GetThisReference (ctx); - if (thisobj != null) { - object baseob = ctx.Adapter.GetBaseValue (ctx, thisobj.Value); - if (baseob == null) - throw CreateParseError ("'base' reference not available."); - return LiteralValueReference.CreateTargetObjectLiteral (ctx, name, baseob); - } + if (thisobj != null) + return LiteralValueReference.CreateTargetBaseObjectLiteral (ctx, name, thisobj.Value); else throw CreateParseError ("'base' reference not available in static methods."); } diff --git a/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ValueReference.cs b/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ValueReference.cs index 135380b0a9..c9dcbc84c5 100644 --- a/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ValueReference.cs +++ b/main/src/core/Mono.Debugging/Mono.Debugging.Evaluation/ValueReference.cs @@ -271,7 +271,7 @@ namespace Mono.Debugging.Evaluation } if (ctx.Adapter.IsClassInstance (Context, obj)) { - ValueReference val = ctx.Adapter.GetMember (GetChildrenContext (options), this, obj, name); + ValueReference val = ctx.Adapter.GetMember (GetChildrenContext (options), this, Type, obj, name); return val; } diff --git a/main/src/core/Mono.Debugging/Mono.Debugging.csproj b/main/src/core/Mono.Debugging/Mono.Debugging.csproj index 40da76c16e..699950e230 100644 --- a/main/src/core/Mono.Debugging/Mono.Debugging.csproj +++ b/main/src/core/Mono.Debugging/Mono.Debugging.csproj @@ -118,6 +118,7 @@ <ProjectReference Include="..\..\..\contrib\NRefactory\Project\NRefactory.csproj"> <Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project> <Name>NRefactory</Name> + <Private>False</Private> </ProjectReference> </ItemGroup> </Project> diff --git a/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs b/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs index 267f227e62..93fe16ed78 100644 --- a/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs +++ b/main/src/core/Mono.Texteditor/Mono.TextEditor/Gui/TextViewMargin.cs @@ -2596,7 +2596,7 @@ namespace Mono.TextEditor break; } - offset = folding.EndLine.Offset + folding.EndColumn; + offset = folding.EndLine.Offset + folding.EndColumn - 1; DocumentLocation foldingEndLocation = margin.Document.OffsetToLocation (offset); lineNumber = foldingEndLocation.Line; column = foldingEndLocation.Column; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs index 09e4109ff7..2fcfec5d92 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService.cs @@ -1190,18 +1190,20 @@ namespace MonoDevelop.Ide.TypeSystem { if (DecLoadCount (project) != 0) return; - if (referenceCounter.ContainsKey (project) && --referenceCounter [project] <= 0) { - project.FileAddedToProject -= OnFileAdded; - project.FileRemovedFromProject -= OnFileRemoved; - project.FileRenamedInProject -= OnFileRenamed; - project.Modified -= OnProjectModified; - - var wrapper = projectContents [project]; - projectContents.Remove (project); - referenceCounter.Remove (project); - StoreProjectCache (project, wrapper); - - OnProjectUnloaded (new ProjectUnloadEventArgs (project, wrapper)); + lock (projectWrapperUpdateLock) { + if (referenceCounter.ContainsKey (project) && --referenceCounter [project] <= 0) { + project.FileAddedToProject -= OnFileAdded; + project.FileRemovedFromProject -= OnFileRemoved; + project.FileRenamedInProject -= OnFileRenamed; + project.Modified -= OnProjectModified; + + var wrapper = projectContents [project]; + projectContents.Remove (project); + referenceCounter.Remove (project); + + StoreProjectCache (project, wrapper); + OnProjectUnloaded (new ProjectUnloadEventArgs (project, wrapper)); + } } } @@ -1548,7 +1550,7 @@ namespace MonoDevelop.Ide.TypeSystem var loader = new CecilLoader (); loader.IncludeInternalMembers = true; loader.DocumentationProvider = new CombinedDocumentationProvider (fileName); - assembly = loader.LoadAssembly (asm, fileName); + assembly = loader.LoadAssembly (asm); } catch (Exception e) { LoggingService.LogError ("Can't convert assembly: " + fileName, e); return null; diff --git a/version-checks b/version-checks index 45c0fc93f9..d07e13c6f9 100755 --- a/version-checks +++ b/version-checks @@ -17,7 +17,7 @@ DEP[0]=md-addins DEP_NAME[0]=MDADDINS DEP_PATH[0]=${top_srcdir}/../md-addins DEP_MODULE[0]=git@github.com:xamarin/md-addins.git -DEP_NEEDED_VERSION[0]=9f85b4f45d2b121a7d182b50585349979436ef2b +DEP_NEEDED_VERSION[0]=1c4e5f6219d63b6ec52d910a587ad99e1823ebec DEP_BRANCH_AND_REMOTE[0]="master origin/master" # heap-shot DEP[1]=heap-shot |