public static TryCatch Trycatch(Func<object> func) { var has = false; var ret = new TryCatch(); try { ret.Func = func; ret.Result = func(); } catch (Exception exception) { has = true; ret.Exception = exception; } ret.HasException = has; return ret; }
public FlowBranchingTryCatch (FlowBranching parent, TryCatch stmt) : base (parent, BranchingType.Block, SiblingType.Try, null, stmt.loc) { this.tc = stmt; }
public virtual object Visit (TryCatch tryCatchStatement) { return null; }
void OP_TRYCATCH(out pBaseLangObject outObj, pBaseLangObject parent) { var obj = new TryCatch(parent); outObj = obj; pBaseLangObject blo; Expect(66); Expect(14); while (StartOf(14)) { CODEINSTRUCTION(out blo, obj); obj.addChild(blo); } Expect(15); Expect(67); Expect(10); NEWVARIABLE(out blo, obj); obj.variable = blo; Expect(11); obj.markEnd(); Expect(14); while (StartOf(14)) { CODEINSTRUCTION(out blo, obj); obj.addChild(blo); } Expect(15); }
public virtual object Visit(TryCatch tryCatchStatement) { return(null); }
public override async Task <QueryResponseCore> ExecuteNextAsync(CancellationToken cancellationToken) { if (this.responseMessageException != null) { return(this.responseMessageException.Value); } if (this.exception != null) { throw this.exception; } try { bool isFirstExecute = false; QueryResponseCore response; while (true) { // The retry policy handles the scenario when the name cache is stale. If the cache is stale the entire // execute context has incorrect values and should be recreated. This should only be done for the first // execution. If results have already been pulled an error should be returned to the user since it's // not possible to combine query results from multiple containers. if (this.innerExecutionContext == null) { TryCatch <CosmosQueryExecutionContext> tryCreateItemQueryExecutionContext = await this.TryCreateItemQueryExecutionContextAsync(cancellationToken); if (!tryCreateItemQueryExecutionContext.Succeeded) { // Failed to create pipeline (due to a bad request). return(QueryResponseCore.CreateFailure( HttpStatusCode.BadRequest, subStatusCodes: null, errorMessage: tryCreateItemQueryExecutionContext.Exception.ToString(), requestCharge: 0, activityId: this.CosmosQueryContext.CorrelatedActivityId.ToString(), diagnostics: QueryResponseCore.EmptyDiagnostics)); } this.innerExecutionContext = tryCreateItemQueryExecutionContext.Result; isFirstExecute = true; } response = await this.innerExecutionContext.ExecuteNextAsync(cancellationToken); if (response.IsSuccess) { break; } if (isFirstExecute && (response.StatusCode == HttpStatusCode.Gone) && (response.SubStatusCode == Documents.SubStatusCodes.NameCacheIsStale)) { await this.CosmosQueryContext.QueryClient.ForceRefreshCollectionCacheAsync( this.CosmosQueryContext.ResourceLink.OriginalString, cancellationToken); TryCatch <CosmosQueryExecutionContext> tryCreateItemQueryExecutionContext = await this.TryCreateItemQueryExecutionContextAsync(cancellationToken); if (!tryCreateItemQueryExecutionContext.Succeeded) { // Failed to create pipeline (due to a bad request). return(QueryResponseCore.CreateFailure( HttpStatusCode.BadRequest, subStatusCodes: null, errorMessage: tryCreateItemQueryExecutionContext.Exception.ToString(), requestCharge: 0, activityId: this.CosmosQueryContext.CorrelatedActivityId.ToString(), diagnostics: QueryResponseCore.EmptyDiagnostics)); } this.innerExecutionContext = tryCreateItemQueryExecutionContext.Result; isFirstExecute = false; } else { break; } } if (!response.IsSuccess) { this.responseMessageException = response; } return(response); } catch (Exception e) { this.exception = e; this.Dispose(); throw; } }
public static TryCatch <FeedRangeInternal> MonadicCreateFromCosmosElement(CosmosElement cosmosElement) { if (cosmosElement == null) { throw new ArgumentNullException(nameof(cosmosElement)); } if (!(cosmosElement is CosmosObject cosmosObject)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"Expected object for feed range: {cosmosElement}."))); } if (!cosmosObject.TryGetValue(TypePropertyName, out CosmosString typeProperty)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"expected string type property for feed range: {cosmosElement}."))); } if (!cosmosObject.TryGetValue(ValuePropertyName, out CosmosElement valueProperty)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"expected value property for feed range: {cosmosElement}."))); } FeedRangeInternal feedRange; switch (typeProperty.Value) { case LogicalPartitionKey: { if (!(valueProperty is CosmosString stringValueProperty)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"expected string value property for logical partition key feed range: {cosmosElement}."))); } if (!PartitionKey.TryParseJsonString(stringValueProperty.Value, out PartitionKey partitionKey)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"failed to parse logical partition key value: {stringValueProperty.Value}."))); } feedRange = new FeedRangePartitionKey(partitionKey); } break; case PhysicalPartitionKeyRangeId: { if (!(valueProperty is CosmosString stringValueProperty)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"expected string value property for physical partition key feed range: {cosmosElement}."))); } feedRange = new FeedRangePartitionKeyRange(stringValueProperty.Value); } break; case EffectivePartitionKeyRange: { if (!(valueProperty is CosmosObject objectValueProperty)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"expected object value property for effective partition key range feed range: {cosmosElement}."))); } if (!objectValueProperty.TryGetValue(MinPropertyName, out CosmosString minPartitionKeyValue)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"expected string value property for min effective partition key value: {cosmosElement}."))); } if (!objectValueProperty.TryGetValue(MaxPropertyName, out CosmosString maxPartitionKeyValue)) { return(TryCatch <FeedRangeInternal> .FromException( new FormatException($"expected string value property for max effective partition key value: {cosmosElement}."))); } feedRange = new FeedRangeEpk( new Documents.Routing.Range <string>( min: minPartitionKeyValue.Value, max: maxPartitionKeyValue.Value, isMinInclusive: true, isMaxInclusive: false)); } break; default: throw new InvalidOperationException($"unexpected feed range type: {typeProperty.Value}"); } return(TryCatch <FeedRangeInternal> .FromResult(feedRange)); }
public static TryCatch <PartitionMapping <PartitionedToken> > MonadicGetPartitionMapping <PartitionedToken>( IReadOnlyList <FeedRangeEpk> partitionKeyRanges, IReadOnlyList <PartitionedToken> partitionedContinuationTokens) where PartitionedToken : IPartitionedToken { if (partitionKeyRanges == null) { throw new ArgumentNullException(nameof(partitionKeyRanges)); } if (partitionedContinuationTokens == null) { throw new ArgumentNullException(nameof(partitionedContinuationTokens)); } if (partitionKeyRanges.Count < 1) { throw new ArgumentException(nameof(partitionKeyRanges)); } if (partitionedContinuationTokens.Count < 1) { throw new ArgumentException(nameof(partitionKeyRanges)); } if (partitionedContinuationTokens.Count > partitionKeyRanges.Count) { throw new ArgumentException($"{nameof(partitionedContinuationTokens)} can not have more elements than {nameof(partitionKeyRanges)}."); } // Find the continuation token for the partition we left off on: PartitionedToken firstContinuationToken = partitionedContinuationTokens .OrderBy((partitionedToken) => partitionedToken.Range.Min) .First(); // Segment the ranges based off that: ReadOnlyMemory <FeedRangeEpk> sortedRanges = partitionKeyRanges .OrderBy((partitionKeyRange) => partitionKeyRange.Range.Min) .ToArray(); FeedRangeEpk firstContinuationRange = new FeedRangeEpk( new Documents.Routing.Range <string>( min: firstContinuationToken.Range.Min, max: firstContinuationToken.Range.Max, isMinInclusive: true, isMaxInclusive: false)); int matchedIndex = sortedRanges.Span.BinarySearch( firstContinuationRange, Comparer <FeedRangeEpk> .Create((range1, range2) => string.CompareOrdinal(range1.Range.Min, range2.Range.Min))); if (matchedIndex < 0) { return(TryCatch <PartitionMapping <PartitionedToken> > .FromException( new MalformedContinuationTokenException( $"{RMResources.InvalidContinuationToken} - Could not find continuation token: {firstContinuationToken}"))); } ReadOnlyMemory <FeedRangeEpk> partitionsLeftOfTarget = matchedIndex == 0 ? ReadOnlyMemory <FeedRangeEpk> .Empty : sortedRanges.Slice(start: 0, length: matchedIndex); ReadOnlyMemory <FeedRangeEpk> targetPartition = sortedRanges.Slice(start: matchedIndex, length: 1); ReadOnlyMemory <FeedRangeEpk> partitionsRightOfTarget = matchedIndex == sortedRanges.Length - 1 ? ReadOnlyMemory <FeedRangeEpk> .Empty : sortedRanges.Slice(start: matchedIndex + 1); // Create the continuation token mapping for each region. IReadOnlyDictionary <FeedRangeEpk, PartitionedToken> mappingForPartitionsLeftOfTarget = MatchRangesToContinuationTokens( partitionsLeftOfTarget, partitionedContinuationTokens); IReadOnlyDictionary <FeedRangeEpk, PartitionedToken> mappingForTargetPartition = MatchRangesToContinuationTokens( targetPartition, partitionedContinuationTokens); IReadOnlyDictionary <FeedRangeEpk, PartitionedToken> mappingForPartitionsRightOfTarget = MatchRangesToContinuationTokens( partitionsRightOfTarget, partitionedContinuationTokens); return(TryCatch <PartitionMapping <PartitionedToken> > .FromResult( new PartitionMapping <PartitionedToken>( partitionsLeftOfTarget : mappingForPartitionsLeftOfTarget, targetPartition : mappingForTargetPartition, partitionsRightOfTarget : mappingForPartitionsRightOfTarget))); }
public static TryCatch <OrderByContinuationToken> TryCreateFromCosmosElement(CosmosElement cosmosElement) { if (!(cosmosElement is CosmosObject cosmosObject)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is not an object: {cosmosElement}"))); } if (!cosmosObject.TryGetValue(CompositeTokenName, out CosmosElement compositeContinuationTokenElement)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{CompositeTokenName}': {cosmosElement}"))); } TryCatch <CompositeContinuationToken> tryCompositeContinuation = CompositeContinuationToken.TryCreateFromCosmosElement(compositeContinuationTokenElement); if (!tryCompositeContinuation.Succeeded) { return(TryCatch <OrderByContinuationToken> .FromException(tryCompositeContinuation.Exception)); } CompositeContinuationToken compositeContinuationToken = tryCompositeContinuation.Result; if (!cosmosObject.TryGetValue(OrderByItemsName, out CosmosArray orderByItemsRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{OrderByItemsName}': {cosmosElement}"))); } List <OrderByItem> orderByItems = orderByItemsRaw.Select(x => OrderByItem.FromCosmosElement(x)).ToList(); if (!cosmosObject.TryGetValue(RidName, out CosmosString ridRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{RidName}': {cosmosElement}"))); } string rid = ridRaw.Value; if (!cosmosObject.TryGetValue(SkipCountName, out CosmosNumber64 skipCountRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{SkipCountName}': {cosmosElement}"))); } int skipCount = (int)Number64.ToLong(skipCountRaw.GetValue()); if (!cosmosObject.TryGetValue(FilterName, out CosmosElement filterRaw)) { return(TryCatch <OrderByContinuationToken> .FromException( new MalformedContinuationTokenException($"{nameof(OrderByContinuationToken)} is missing field: '{FilterName}': {cosmosElement}"))); } string filter; if (filterRaw is CosmosString filterStringRaw) { filter = filterStringRaw.Value; } else { filter = null; } OrderByContinuationToken orderByContinuationToken = new OrderByContinuationToken( compositeContinuationToken, orderByItems, rid, skipCount, filter); return(TryCatch <OrderByContinuationToken> .FromResult(orderByContinuationToken)); }
private static Task <TryCatch <IDocumentQueryExecutionComponent> > FailToCreateSource(string continuationToken) { return(Task.FromResult(TryCatch <IDocumentQueryExecutionComponent> .FromException(new Exception()))); }
private static Task <TryCatch <IDocumentQueryExecutionComponent> > CreateSource(string continuationToken) { return(Task.FromResult(TryCatch <IDocumentQueryExecutionComponent> .FromResult(new Mock <IDocumentQueryExecutionComponent>().Object))); }
public async Task TestCosmosOrderByQueryExecutionContextWithFailurePageAsync(bool createInitialContinuationToken) { int maxPageSize = 5; List <MockPartitionResponse[]> mockResponsesScenario = MockQueryFactory.GetFailureScenarios(); Mock <CosmosQueryClient> mockQueryClient = new Mock <CosmosQueryClient>(); foreach (MockPartitionResponse[] mockResponse in mockResponsesScenario) { string initialContinuationToken = null; string fullContinuationToken = null; if (createInitialContinuationToken) { ToDoItem itemToRepresentPreviousQuery = ToDoItem.CreateItems( 1, "itemToRepresentPreviousQuery", MockQueryFactory.DefaultCollectionRid).First(); initialContinuationToken = $" - RID:{itemToRepresentPreviousQuery._rid} ==#RT:1#TRC:1"; CompositeContinuationToken compositeContinuation = new CompositeContinuationToken() { Range = new Documents.Routing.Range <string>( min: MockQueryFactory.DefaultPartitionKeyRange.MinInclusive, max: MockQueryFactory.DefaultPartitionKeyRange.MaxExclusive, isMaxInclusive: false, isMinInclusive: true), Token = initialContinuationToken }; List <OrderByItem> orderByItems = new List <OrderByItem>() { new OrderByItem(CosmosObject.CreateFromBuffer(Encoding.UTF8.GetBytes("{\"item\":\"2c4ce711-13c3-4c93-817c-49287b71b6c3\"}"))) }; OrderByContinuationToken orderByContinuationToken = new OrderByContinuationToken( compositeContinuationToken: compositeContinuation, orderByItems: orderByItems, rid: itemToRepresentPreviousQuery._rid, skipCount: 0, filter: null); fullContinuationToken = CosmosArray.Create( new List <CosmosElement>() { OrderByContinuationToken.ToCosmosElement(orderByContinuationToken) }).ToString(); } IList <ToDoItem> allItems = MockQueryFactory.GenerateAndMockResponse( mockQueryClient, isOrderByQuery: true, sqlQuerySpec: MockQueryFactory.DefaultQuerySpec, containerRid: MockQueryFactory.DefaultCollectionRid, initContinuationToken: initialContinuationToken, maxPageSize: maxPageSize, mockResponseForSinglePartition: mockResponse, cancellationTokenForMocks: this.cancellationToken); // Order by drains the partitions until it finds an item // If there are no items then it's not possible to have a continuation token if (allItems.Count == 0 && createInitialContinuationToken) { continue; } CosmosQueryContext context = MockQueryFactory.CreateContext( mockQueryClient.Object); QueryInfo queryInfo = new QueryInfo() { OrderBy = new SortOrder[] { SortOrder.Ascending }, OrderByExpressions = new string[] { "id" } }; CosmosCrossPartitionQueryExecutionContext.CrossPartitionInitParams initParams = new CosmosCrossPartitionQueryExecutionContext.CrossPartitionInitParams( sqlQuerySpec: MockQueryFactory.DefaultQuerySpec, collectionRid: MockQueryFactory.DefaultCollectionRid, partitionedQueryExecutionInfo: new PartitionedQueryExecutionInfo() { QueryInfo = queryInfo }, partitionKeyRanges: new List <PartitionKeyRange>() { MockQueryFactory.DefaultPartitionKeyRange }, initialPageSize: maxPageSize, maxConcurrency: null, maxItemCount: maxPageSize, maxBufferedItemCount: null, returnResultsInDeterministicOrder: true, testSettings: new TestInjections(simulate429s: false, simulateEmptyPages: false)); TryCatch <IDocumentQueryExecutionComponent> tryCreate = await CosmosOrderByItemQueryExecutionContext.TryCreateAsync( context, initParams, fullContinuationToken, this.cancellationToken); if (tryCreate.Succeeded) { IDocumentQueryExecutionComponent executionContext = tryCreate.Result; Assert.IsTrue(!executionContext.IsDone); // Read all the pages from both splits List <ToDoItem> itemsRead = new List <ToDoItem>(); QueryResponseCore?failure = null; while (!executionContext.IsDone) { QueryResponseCore queryResponse = await executionContext.DrainAsync( maxPageSize, this.cancellationToken); if (queryResponse.IsSuccess) { string responseContinuationToken = queryResponse.ContinuationToken; foreach (CosmosElement element in queryResponse.CosmosElements) { string jsonValue = element.ToString(); ToDoItem item = JsonConvert.DeserializeObject <ToDoItem>(jsonValue); itemsRead.Add(item); } } else { Assert.IsNull(failure, "There should only be one error"); failure = queryResponse; } } Assert.IsNotNull(failure); Assert.AreEqual((HttpStatusCode)429, failure.Value.StatusCode); Assert.IsNotNull(failure.Value.CosmosException.ToString()); Assert.AreEqual(0 /*We don't get any items, since we don't buffer the failure anymore*/, itemsRead.Count); //CollectionAssert.AreEqual(allItems.ToList(), itemsRead, new ToDoItemComparer()); } else { QueryResponseCore queryResponseCore = QueryResponseFactory.CreateFromException(tryCreate.Exception); Assert.AreEqual((HttpStatusCode)429, queryResponseCore.StatusCode); } } }
internal TryCatch <PartitionedQueryExecutionInfoInternal> TryGetPartitionedQueryExecutionInfoInternal( SqlQuerySpec querySpec, PartitionKeyDefinition partitionKeyDefinition, bool requireFormattableOrderByQuery, bool isContinuationExpected, bool allowNonValueAggregateQuery, bool hasLogicalPartitionKey) { if (querySpec == null || partitionKeyDefinition == null) { return(TryCatch <PartitionedQueryExecutionInfoInternal> .FromResult(DefaultInfoInternal)); } string queryText = JsonConvert.SerializeObject(querySpec); List <string> paths = new List <string>(partitionKeyDefinition.Paths); List <IReadOnlyList <string> > pathPartsList = new List <IReadOnlyList <string> >(paths.Count); uint[] partsLengths = new uint[paths.Count]; int allPartsLength = 0; for (int i = 0; i < paths.Count; i++) { IReadOnlyList <string> pathParts = PathParser.GetPathParts(paths[i]); partsLengths[i] = (uint)pathParts.Count; pathPartsList.Add(pathParts); allPartsLength += pathParts.Count; } string[] allParts = new string[allPartsLength]; int allPartsIndex = 0; foreach (IReadOnlyList <string> pathParts in pathPartsList) { foreach (string part in pathParts) { allParts[allPartsIndex++] = part; } } PartitionKind partitionKind = partitionKeyDefinition.Kind; this.Initialize(); Span <byte> buffer = stackalloc byte[QueryPartitionProvider.InitialBufferSize]; uint errorCode; uint serializedQueryExecutionInfoResultLength; unsafe { fixed(byte *bytePtr = buffer) { errorCode = ServiceInteropWrapper.GetPartitionKeyRangesFromQuery( this.serviceProvider, queryText, requireFormattableOrderByQuery, isContinuationExpected, allowNonValueAggregateQuery, hasLogicalPartitionKey, allParts, partsLengths, (uint)partitionKeyDefinition.Paths.Count, partitionKind, new IntPtr(bytePtr), (uint)buffer.Length, out serializedQueryExecutionInfoResultLength); if (errorCode == DISP_E_BUFFERTOOSMALL) { // Allocate on stack for smaller arrays, otherwise use heap. buffer = serializedQueryExecutionInfoResultLength < 4096 ? stackalloc byte[(int)serializedQueryExecutionInfoResultLength] : new byte[serializedQueryExecutionInfoResultLength]; fixed(byte *bytePtr2 = buffer) { errorCode = ServiceInteropWrapper.GetPartitionKeyRangesFromQuery( this.serviceProvider, queryText, requireFormattableOrderByQuery, isContinuationExpected, allowNonValueAggregateQuery, hasLogicalPartitionKey, // has logical partition key allParts, partsLengths, (uint)partitionKeyDefinition.Paths.Count, partitionKind, new IntPtr(bytePtr2), (uint)buffer.Length, out serializedQueryExecutionInfoResultLength); } } } } string serializedQueryExecutionInfo = Encoding.UTF8.GetString(buffer.Slice(0, (int)serializedQueryExecutionInfoResultLength)); Exception exception = Marshal.GetExceptionForHR((int)errorCode); if (exception != null) { QueryPartitionProviderException queryPartitionProviderException; if (string.IsNullOrEmpty(serializedQueryExecutionInfo)) { queryPartitionProviderException = new UnexpectedQueryPartitionProviderException( "Query service interop parsing hit an unexpected exception", exception); } else { queryPartitionProviderException = new ExpectedQueryPartitionProviderException( serializedQueryExecutionInfo, exception); } return(TryCatch <PartitionedQueryExecutionInfoInternal> .FromException( queryPartitionProviderException)); } PartitionedQueryExecutionInfoInternal queryInfoInternal = JsonConvert.DeserializeObject <PartitionedQueryExecutionInfoInternal>( serializedQueryExecutionInfo, new JsonSerializerSettings { DateParseHandling = DateParseHandling.None }); return(TryCatch <PartitionedQueryExecutionInfoInternal> .FromResult(queryInfoInternal)); }
public static TryCatch <IQueryPipelineStage> MonadicCreateLimitStage( int limitCount, CosmosElement requestContinuationToken, CancellationToken cancellationToken, MonadicCreatePipelineStage monadicCreatePipelineStage) { if (limitCount < 0) { throw new ArgumentException($"{nameof(limitCount)}: {limitCount} must be a non negative number."); } if (monadicCreatePipelineStage == null) { throw new ArgumentNullException(nameof(monadicCreatePipelineStage)); } LimitContinuationToken limitContinuationToken; if (requestContinuationToken != null) { if (!LimitContinuationToken.TryParse(requestContinuationToken.ToString(), out limitContinuationToken)) { return(TryCatch <IQueryPipelineStage> .FromException( new MalformedContinuationTokenException( $"Malformed {nameof(LimitContinuationToken)}: {requestContinuationToken}."))); } } else { limitContinuationToken = new LimitContinuationToken(limitCount, null); } if (limitContinuationToken.Limit > limitCount) { return(TryCatch <IQueryPipelineStage> .FromException( new MalformedContinuationTokenException( $"{nameof(LimitContinuationToken.Limit)} in {nameof(LimitContinuationToken)}: {requestContinuationToken}: {limitContinuationToken.Limit} can not be greater than the limit count in the query: {limitCount}."))); } CosmosElement sourceToken; if (limitContinuationToken.SourceToken != null) { TryCatch <CosmosElement> tryParse = CosmosElement.Monadic.Parse(limitContinuationToken.SourceToken); if (tryParse.Failed) { return(TryCatch <IQueryPipelineStage> .FromException( new MalformedContinuationTokenException( message : $"Malformed {nameof(LimitContinuationToken)}: {requestContinuationToken}.", innerException : tryParse.Exception))); } sourceToken = tryParse.Result; } else { sourceToken = null; } TryCatch <IQueryPipelineStage> tryCreateSource = monadicCreatePipelineStage(sourceToken, cancellationToken); if (tryCreateSource.Failed) { return(tryCreateSource); } IQueryPipelineStage stage = new ClientTakeQueryPipelineStage( tryCreateSource.Result, cancellationToken, limitContinuationToken.Limit, TakeEnum.Limit); return(TryCatch <IQueryPipelineStage> .FromResult(stage)); }
/** the generated parser. Maintains a state and a value stack, currently with fixed maximum size. @param yyLex scanner. @return result of the last reduction, if any. @throws yyException on irrecoverable parse error. */ internal Object yyparse (yyParser.yyInput yyLex) { if (yyMax <= 0) yyMax = 256; // initial size int yyState = 0; // state stack ptr int [] yyStates; // state stack yyVal = null; yyToken = -1; int yyErrorFlag = 0; // #tks to shift if (use_global_stacks && global_yyStates != null) { yyVals = global_yyVals; yyStates = global_yyStates; } else { yyVals = new object [yyMax]; yyStates = new int [yyMax]; if (use_global_stacks) { global_yyVals = yyVals; global_yyStates = yyStates; } } /*yyLoop:*/ for (yyTop = 0;; ++ yyTop) { if (yyTop >= yyStates.Length) { // dynamically increase global::System.Array.Resize (ref yyStates, yyStates.Length+yyMax); global::System.Array.Resize (ref yyVals, yyVals.Length+yyMax); } yyStates[yyTop] = yyState; yyVals[yyTop] = yyVal; //t if (debug != null) debug.push(yyState, yyVal); /*yyDiscarded:*/ while (true) { // discarding a token does not change stack int yyN; if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN) if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value()); } if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) { //t if (debug != null) //t debug.shift(yyState, yyTable[yyN], yyErrorFlag-1); yyState = yyTable[yyN]; // shift to yyN yyVal = yyLex.value(); yyToken = -1; if (yyErrorFlag > 0) -- yyErrorFlag; goto continue_yyLoop; } if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == yyToken) yyN = yyTable[yyN]; // reduce (yyN) else switch (yyErrorFlag) { case 0: yyExpectingState = yyState; // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState)); //t if (debug != null) debug.error("syntax error"); if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof (); goto case 1; case 1: case 2: yyErrorFlag = 3; do { if ((yyN = yySindex[yyStates[yyTop]]) != 0 && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length && yyCheck[yyN] == Token.yyErrorCode) { //t if (debug != null) //t debug.shift(yyStates[yyTop], yyTable[yyN], 3); yyState = yyTable[yyN]; yyVal = yyLex.value(); goto continue_yyLoop; } //t if (debug != null) debug.pop(yyStates[yyTop]); } while (-- yyTop >= 0); //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error"); case 3: if (yyToken == 0) { //t if (debug != null) debug.reject(); throw new yyParser.yyException("irrecoverable syntax error at end-of-file"); } //t if (debug != null) //t debug.discard(yyState, yyToken, yyname(yyToken), //t yyLex.value()); yyToken = -1; goto continue_yyDiscarded; // leave stack alone } } int yyV = yyTop + 1-yyLen[yyN]; //t if (debug != null) //t debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]); yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]); switch (yyN) { case 1: #line 392 "cs-parser.jay" { Lexer.check_incorrect_doc_comment (); } break; case 2: #line 393 "cs-parser.jay" { Lexer.CompleteOnEOF = false; } break; case 6: case_6(); break; case 7: #line 412 "cs-parser.jay" { module.AddAttributes ((Attributes) yyVals[0+yyTop], current_namespace); } break; case 8: case_8(); break; case 13: case_13(); break; case 14: #line 457 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 17: case_17(); break; case 18: case_18(); break; case 19: case_19(); break; case 20: case_20(); break; case 23: case_23(); break; case 24: case_24(); break; case 25: case_25(); break; case 26: case_26(); break; case 29: case_29(); break; case 30: case_30(); break; case 31: case_31(); break; case 32: case_32(); break; case 45: case_45(); break; case 46: #line 660 "cs-parser.jay" { current_namespace.DeclarationFound = true; } break; case 47: case_47(); break; case 55: case_55(); break; case 56: case_56(); break; case 57: case_57(); break; case 58: case_58(); break; case 59: case_59(); break; case 60: case_60(); break; case 61: case_61(); break; case 62: case_62(); break; case 63: case_63(); break; case 64: case_64(); break; case 65: #line 787 "cs-parser.jay" { yyVal = "event"; PushLocation (GetLocation (yyVals[0+yyTop])); } break; case 66: #line 788 "cs-parser.jay" { yyVal = "return"; PushLocation (GetLocation (yyVals[0+yyTop])); } break; case 67: #line 795 "cs-parser.jay" { yyVal = new List<Attribute> (4) { (Attribute) yyVals[0+yyTop] }; } break; case 68: case_68(); break; case 69: #line 812 "cs-parser.jay" { ++lexer.parsing_block; } break; case 70: case_70(); break; case 72: #line 840 "cs-parser.jay" { yyVal = null; HadAttributeParens = false; } break; case 73: case_73(); break; case 74: #line 852 "cs-parser.jay" { yyVal = null; } break; case 75: case_75(); break; case 76: case_76(); break; case 77: case_77(); break; case 78: case_78(); break; case 79: #line 896 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 81: case_81(); break; case 82: #line 909 "cs-parser.jay" { ++lexer.parsing_block; } break; case 83: case_83(); break; case 84: case_84(); break; case 86: #line 940 "cs-parser.jay" { yyVal = null; } break; case 87: #line 944 "cs-parser.jay" { yyVal = Argument.AType.Ref; } break; case 88: #line 948 "cs-parser.jay" { yyVal = Argument.AType.Out; } break; case 91: case_91(); break; case 92: case_92(); break; case 106: case_106(); break; case 107: case_107(); break; case 108: case_108(); break; case 109: #line 1025 "cs-parser.jay" { } break; case 110: case_110(); break; case 111: case_111(); break; case 112: case_112(); break; case 113: case_113(); break; case 114: case_114(); break; case 115: #line 1075 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 116: case_116(); break; case 117: case_117(); break; case 118: case_118(); break; case 121: #line 1124 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 122: #line 1128 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 123: case_123(); break; case 124: #line 1144 "cs-parser.jay" { ++lexer.parsing_block; } break; case 125: case_125(); break; case 126: case_126(); break; case 129: case_129(); break; case 130: case_130(); break; case 131: case_131(); break; case 132: case_132(); break; case 133: #line 1223 "cs-parser.jay" { report.Error (1641, GetLocation (yyVals[-1+yyTop]), "A fixed size buffer field must have the array size specifier after the field name"); } break; case 135: case_135(); break; case 136: case_136(); break; case 139: #line 1253 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 140: #line 1257 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 141: case_141(); break; case 142: #line 1270 "cs-parser.jay" { ++lexer.parsing_block; } break; case 143: case_143(); break; case 146: #line 1289 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 147: #line 1293 "cs-parser.jay" { current_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 148: case_148(); break; case 149: #line 1309 "cs-parser.jay" { ++lexer.parsing_block; } break; case 150: case_150(); break; case 151: case_151(); break; case 154: case_154(); break; case 155: case_155(); break; case 156: case_156(); break; case 157: #line 1377 "cs-parser.jay" { valid_param_mod = ParameterModifierType.All; } break; case 158: case_158(); break; case 159: case_159(); break; case 160: #line 1416 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 161: case_161(); break; case 162: #line 1426 "cs-parser.jay" { lexer.ConstraintsParsing = true; } break; case 163: case_163(); break; case 164: case_164(); break; case 165: case_165(); break; case 169: #line 1504 "cs-parser.jay" { savedLocation = GetLocation (yyVals[0+yyTop]); yyVal = null; } break; case 170: case_170(); break; case 171: case_171(); break; case 172: #line 1528 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 174: case_174(); break; case 175: case_175(); break; case 176: case_176(); break; case 177: case_177(); break; case 178: case_178(); break; case 179: case_179(); break; case 180: case_180(); break; case 181: #line 1600 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter[] { (Parameter) yyVals[0+yyTop] } ); } break; case 182: #line 1604 "cs-parser.jay" { yyVal = new ParametersCompiled (new Parameter [] { new ArglistParameter (GetLocation (yyVals[0+yyTop])) }, true); } break; case 183: case_183(); break; case 184: case_184(); break; case 185: case_185(); break; case 186: case_186(); break; case 187: case_187(); break; case 188: case_188(); break; case 189: case_189(); break; case 190: #line 1685 "cs-parser.jay" { ++lexer.parsing_block; } break; case 191: case_191(); break; case 192: #line 1726 "cs-parser.jay" { yyVal = Parameter.Modifier.NONE; } break; case 194: #line 1734 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 195: case_195(); break; case 196: case_196(); break; case 197: case_197(); break; case 198: case_198(); break; case 199: case_199(); break; case 200: case_200(); break; case 201: case_201(); break; case 202: case_202(); break; case 203: case_203(); break; case 204: #line 1828 "cs-parser.jay" { Error_DuplicateParameterModifier (GetLocation (yyVals[-1+yyTop]), Parameter.Modifier.PARAMS); } break; case 205: case_205(); break; case 206: case_206(); break; case 207: case_207(); break; case 208: case_208(); break; case 209: case_209(); break; case 210: #line 1878 "cs-parser.jay" { current_property = null; } break; case 211: case_211(); break; case 212: case_212(); break; case 214: case_214(); break; case 215: case_215(); break; case 218: #line 1940 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; case 219: case_219(); break; case 220: case_220(); break; case 221: #line 1986 "cs-parser.jay" { lbag.AppendToMember (current_property, GetLocation (yyVals[-2+yyTop]), GetLocation (yyVals[0+yyTop])); } break; case 222: case_222(); break; case 227: case_227(); break; case 228: case_228(); break; case 229: case_229(); break; case 230: case_230(); break; case 231: case_231(); break; case 233: case_233(); break; case 234: case_234(); break; case 235: #line 2127 "cs-parser.jay" { } break; case 236: case_236(); break; case 237: case_237(); break; case 238: case_238(); break; case 239: case_239(); break; case 240: #line 2167 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 243: case_243(); break; case 244: case_244(); break; case 245: #line 2192 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 246: #line 2196 "cs-parser.jay" { report.Error (525, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain fields or constants"); } break; case 251: #line 2204 "cs-parser.jay" { report.Error (567, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain operators"); } break; case 252: #line 2208 "cs-parser.jay" { report.Error (526, GetLocation (yyVals[0+yyTop]), "Interfaces cannot contain contructors"); } break; case 253: #line 2212 "cs-parser.jay" { report.Error (524, GetLocation (yyVals[0+yyTop]), "Interfaces cannot declare classes, structs, interfaces, delegates, or enumerations"); } break; case 254: #line 2218 "cs-parser.jay" { } break; case 255: case_255(); break; case 257: case_257(); break; case 258: case_258(); break; case 259: case_259(); break; case 261: #line 2312 "cs-parser.jay" { yyVal = Operator.OpType.LogicalNot; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 262: #line 2313 "cs-parser.jay" { yyVal = Operator.OpType.OnesComplement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 263: #line 2314 "cs-parser.jay" { yyVal = Operator.OpType.Increment; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 264: #line 2315 "cs-parser.jay" { yyVal = Operator.OpType.Decrement; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 265: #line 2316 "cs-parser.jay" { yyVal = Operator.OpType.True; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 266: #line 2317 "cs-parser.jay" { yyVal = Operator.OpType.False; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 267: #line 2319 "cs-parser.jay" { yyVal = Operator.OpType.Addition; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 268: #line 2320 "cs-parser.jay" { yyVal = Operator.OpType.Subtraction; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 269: #line 2322 "cs-parser.jay" { yyVal = Operator.OpType.Multiply; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 270: #line 2323 "cs-parser.jay" { yyVal = Operator.OpType.Division; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 271: #line 2324 "cs-parser.jay" { yyVal = Operator.OpType.Modulus; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 272: #line 2325 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseAnd; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 273: #line 2326 "cs-parser.jay" { yyVal = Operator.OpType.BitwiseOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 274: #line 2327 "cs-parser.jay" { yyVal = Operator.OpType.ExclusiveOr; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 275: #line 2328 "cs-parser.jay" { yyVal = Operator.OpType.LeftShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 276: #line 2329 "cs-parser.jay" { yyVal = Operator.OpType.RightShift; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 277: #line 2330 "cs-parser.jay" { yyVal = Operator.OpType.Equality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 278: #line 2331 "cs-parser.jay" { yyVal = Operator.OpType.Inequality; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 279: #line 2332 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 280: #line 2333 "cs-parser.jay" { yyVal = Operator.OpType.LessThan; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 281: #line 2334 "cs-parser.jay" { yyVal = Operator.OpType.GreaterThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 282: #line 2335 "cs-parser.jay" { yyVal = Operator.OpType.LessThanOrEqual; savedOperatorLocation = GetLocation (yyVals[0+yyTop]); } break; case 283: case_283(); break; case 284: #line 2349 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 285: case_285(); break; case 286: #line 2372 "cs-parser.jay" { valid_param_mod = ParameterModifierType.DefaultValue; } break; case 287: case_287(); break; case 288: case_288(); break; case 289: case_289(); break; case 290: case_290(); break; case 291: case_291(); break; case 292: case_292(); break; case 293: case_293(); break; case 295: #line 2496 "cs-parser.jay" { current_block = null; yyVal = null; } break; case 298: #line 2508 "cs-parser.jay" { ++lexer.parsing_block; } break; case 299: case_299(); break; case 300: #line 2518 "cs-parser.jay" { ++lexer.parsing_block; } break; case 301: case_301(); break; case 302: case_302(); break; case 303: case_303(); break; case 304: case_304(); break; case 305: case_305(); break; case 306: case_306(); break; case 307: case_307(); break; case 308: case_308(); break; case 309: case_309(); break; case 310: case_310(); break; case 311: case_311(); break; case 313: #line 2645 "cs-parser.jay" { ++lexer.parsing_block; } break; case 314: case_314(); break; case 317: #line 2663 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 318: #line 2667 "cs-parser.jay" { current_event_field.AddDeclarator ((FieldDeclarator) yyVals[0+yyTop]); } break; case 319: case_319(); break; case 320: #line 2680 "cs-parser.jay" { ++lexer.parsing_block; } break; case 321: case_321(); break; case 322: case_322(); break; case 323: #line 2705 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 326: case_326(); break; case 327: case_327(); break; case 328: case_328(); break; case 329: case_329(); break; case 330: case_330(); break; case 331: case_331(); break; case 332: case_332(); break; case 333: case_333(); break; case 335: case_335(); break; case 336: case_336(); break; case 337: case_337(); break; case 338: case_338(); break; case 339: case_339(); break; case 340: case_340(); break; case 342: case_342(); break; case 343: case_343(); break; case 346: #line 2893 "cs-parser.jay" { lbag.AppendToMember (current_container, GetLocation (yyVals[0+yyTop])); } break; case 348: case_348(); break; case 349: case_349(); break; case 350: case_350(); break; case 351: case_351(); break; case 352: case_352(); break; case 354: #line 2967 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out | ParameterModifierType.Params | ParameterModifierType.DefaultValue; } break; case 355: case_355(); break; case 356: #line 2986 "cs-parser.jay" { lexer.ConstraintsParsing = false; } break; case 357: case_357(); break; case 359: case_359(); break; case 361: case_361(); break; case 362: case_362(); break; case 364: case_364(); break; case 365: case_365(); break; case 366: case_366(); break; case 367: case_367(); break; case 369: case_369(); break; case 370: case_370(); break; case 371: case_371(); break; case 372: case_372(); break; case 373: #line 3111 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 374: case_374(); break; case 375: case_375(); break; case 377: case_377(); break; case 378: case_378(); break; case 379: case_379(); break; case 380: case_380(); break; case 381: case_381(); break; case 382: case_382(); break; case 384: case_384(); break; case 385: case_385(); break; case 386: case_386(); break; case 387: case_387(); break; case 388: case_388(); break; case 390: #line 3236 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[0+yyTop])); } break; case 391: #line 3243 "cs-parser.jay" { lexer.parsing_generic_declaration = true; } break; case 397: case_397(); break; case 399: #line 3273 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 400: case_400(); break; case 401: #line 3292 "cs-parser.jay" { yyVal = new ComposedCast ((ATypeNameExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 403: case_403(); break; case 404: case_404(); break; case 405: #line 3313 "cs-parser.jay" { yyVal = new ComposedCast ((FullNamedExpression) yyVals[-1+yyTop], (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 406: #line 3317 "cs-parser.jay" { yyVal = new ComposedCast (new TypeExpression (compiler.BuiltinTypes.Void, GetLocation (yyVals[-1+yyTop])), (ComposedTypeSpecifier) yyVals[0+yyTop]); } break; case 407: case_407(); break; case 408: case_408(); break; case 409: case_409(); break; case 410: #line 3351 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Object, GetLocation (yyVals[0+yyTop])); } break; case 411: #line 3352 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.String, GetLocation (yyVals[0+yyTop])); } break; case 412: #line 3353 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Bool, GetLocation (yyVals[0+yyTop])); } break; case 413: #line 3354 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Decimal, GetLocation (yyVals[0+yyTop])); } break; case 414: #line 3355 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Float, GetLocation (yyVals[0+yyTop])); } break; case 415: #line 3356 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Double, GetLocation (yyVals[0+yyTop])); } break; case 417: #line 3361 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.SByte, GetLocation (yyVals[0+yyTop])); } break; case 418: #line 3362 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Byte, GetLocation (yyVals[0+yyTop])); } break; case 419: #line 3363 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Short, GetLocation (yyVals[0+yyTop])); } break; case 420: #line 3364 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UShort, GetLocation (yyVals[0+yyTop])); } break; case 421: #line 3365 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Int, GetLocation (yyVals[0+yyTop])); } break; case 422: #line 3366 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.UInt, GetLocation (yyVals[0+yyTop])); } break; case 423: #line 3367 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Long, GetLocation (yyVals[0+yyTop])); } break; case 424: #line 3368 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.ULong, GetLocation (yyVals[0+yyTop])); } break; case 425: #line 3369 "cs-parser.jay" { yyVal = new TypeExpression (compiler.BuiltinTypes.Char, GetLocation (yyVals[0+yyTop])); } break; case 448: case_448(); break; case 452: #line 3413 "cs-parser.jay" { yyVal = new NullLiteral (GetLocation (yyVals[0+yyTop])); } break; case 453: #line 3417 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, true, GetLocation (yyVals[0+yyTop])); } break; case 454: #line 3418 "cs-parser.jay" { yyVal = new BoolLiteral (compiler.BuiltinTypes, false, GetLocation (yyVals[0+yyTop])); } break; case 455: #line 3425 "cs-parser.jay" { yyVal = new InterpolatedString ((StringLiteral) yyVals[-2+yyTop], (List<Expression>) yyVals[-1+yyTop], (StringLiteral) yyVals[0+yyTop]); } break; case 456: #line 3429 "cs-parser.jay" { yyVal = new InterpolatedString ((StringLiteral) yyVals[0+yyTop], null, null); } break; case 457: case_457(); break; case 458: case_458(); break; case 459: #line 3452 "cs-parser.jay" { yyVal = new InterpolatedStringInsert ((Expression) yyVals[0+yyTop]); } break; case 460: case_460(); break; case 461: #line 3462 "cs-parser.jay" { lexer.parsing_interpolation_format = true; } break; case 462: case_462(); break; case 463: #line 3474 "cs-parser.jay" { lexer.parsing_interpolation_format = true; } break; case 464: case_464(); break; case 469: case_469(); break; case 470: #line 3516 "cs-parser.jay" { yyVal = new ParenthesizedExpression ((Expression) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 471: case_471(); break; case 472: case_472(); break; case 473: case_473(); break; case 474: case_474(); break; case 475: case_475(); break; case 476: case_476(); break; case 477: case_477(); break; case 478: case_478(); break; case 479: #line 3577 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null,GetLocation (yyVals[0+yyTop])); } break; case 480: case_480(); break; case 481: #line 3585 "cs-parser.jay" { yyVal = new CompletionMemberAccess ((Expression) yyVals[-2+yyTop], null, lexer.Location); } break; case 482: case_482(); break; case 483: case_483(); break; case 484: case_484(); break; case 485: case_485(); break; case 486: #line 3615 "cs-parser.jay" { yyVal = null; } break; case 488: case_488(); break; case 489: case_489(); break; case 490: #line 3637 "cs-parser.jay" { yyVal = null; } break; case 491: #line 3641 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 492: case_492(); break; case 493: case_493(); break; case 494: case_494(); break; case 495: case_495(); break; case 496: case_496(); break; case 497: #line 3680 "cs-parser.jay" { yyVal = new CompletionElementInitializer (null, GetLocation (yyVals[0+yyTop])); } break; case 498: case_498(); break; case 499: case_499(); break; case 500: case_500(); break; case 501: case_501(); break; case 504: #line 3720 "cs-parser.jay" { yyVal = null; } break; case 506: case_506(); break; case 507: case_507(); break; case 508: case_508(); break; case 509: case_509(); break; case 510: case_510(); break; case 511: #line 3774 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 515: case_515(); break; case 516: #line 3792 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Ref); } break; case 517: case_517(); break; case 518: #line 3801 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop], Argument.AType.Out); } break; case 519: case_519(); break; case 520: case_520(); break; case 521: case_521(); break; case 522: case_522(); break; case 523: case_523(); break; case 525: case_525(); break; case 526: case_526(); break; case 527: case_527(); break; case 528: case_528(); break; case 529: case_529(); break; case 530: case_530(); break; case 531: case_531(); break; case 532: case_532(); break; case 533: #line 3928 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 535: #line 3936 "cs-parser.jay" { yyVal = new This (GetLocation (yyVals[0+yyTop])); } break; case 536: case_536(); break; case 537: case_537(); break; case 538: #line 3956 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostIncrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 539: #line 3963 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PostDecrement, (Expression) yyVals[-1+yyTop], GetLocation (yyVals[0+yyTop])); } break; case 540: case_540(); break; case 541: case_541(); break; case 542: case_542(); break; case 543: case_543(); break; case 544: case_544(); break; case 545: case_545(); break; case 546: case_546(); break; case 547: #line 4030 "cs-parser.jay" { ++lexer.parsing_type; } break; case 548: case_548(); break; case 549: case_549(); break; case 550: #line 4052 "cs-parser.jay" { yyVal = new EmptyCompletion (); } break; case 553: #line 4061 "cs-parser.jay" { yyVal = null; } break; case 555: case_555(); break; case 556: case_556(); break; case 557: #line 4083 "cs-parser.jay" { yyVal = new EmptyCompletion (); } break; case 558: #line 4087 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 559: case_559(); break; case 560: case_560(); break; case 561: case_561(); break; case 562: case_562(); break; case 566: case_566(); break; case 567: case_567(); break; case 568: case_568(); break; case 569: #line 4147 "cs-parser.jay" { yyVal = 2; } break; case 570: #line 4151 "cs-parser.jay" { yyVal = ((int) yyVals[-1+yyTop]) + 1; } break; case 571: #line 4158 "cs-parser.jay" { yyVal = null; } break; case 572: #line 4162 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 573: case_573(); break; case 574: case_574(); break; case 575: case_575(); break; case 576: case_576(); break; case 577: case_577(); break; case 579: case_579(); break; case 580: case_580(); break; case 581: case_581(); break; case 582: case_582(); break; case 583: case_583(); break; case 584: case_584(); break; case 585: case_585(); break; case 586: case_586(); break; case 587: case_587(); break; case 588: case_588(); break; case 589: #line 4295 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], false, GetLocation (yyVals[-1+yyTop])); } break; case 590: case_590(); break; case 591: #line 4308 "cs-parser.jay" { start_anonymous (false, (ParametersCompiled) yyVals[0+yyTop], true, GetLocation (yyVals[-2+yyTop])); } break; case 592: case_592(); break; case 593: #line 4325 "cs-parser.jay" { yyVal = ParametersCompiled.Undefined; } break; case 595: #line 4333 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 596: case_596(); break; case 597: case_597(); break; case 599: #line 4359 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.LogicalNot, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 600: #line 4363 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.OnesComplement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 601: case_601(); break; case 602: case_602(); break; case 603: case_603(); break; case 604: case_604(); break; case 605: case_605(); break; case 606: case_606(); break; case 608: #line 4427 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 609: #line 4431 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 610: #line 4435 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreIncrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 611: #line 4439 "cs-parser.jay" { yyVal = new UnaryMutator (UnaryMutator.Mode.PreDecrement, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 612: #line 4443 "cs-parser.jay" { yyVal = new Indirection ((Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 613: #line 4447 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.AddressOf, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 614: case_614(); break; case 615: case_615(); break; case 616: case_616(); break; case 617: case_617(); break; case 618: case_618(); break; case 619: case_619(); break; case 621: case_621(); break; case 622: case_622(); break; case 623: case_623(); break; case 624: case_624(); break; case 625: case_625(); break; case 626: case_626(); break; case 628: case_628(); break; case 629: case_629(); break; case 630: case_630(); break; case 631: case_631(); break; case 632: #line 4555 "cs-parser.jay" { yyVal = new As ((Expression) yyVals[-2+yyTop], (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 633: case_633(); break; case 634: case_634(); break; case 635: case_635(); break; case 636: case_636(); break; case 637: case_637(); break; case 638: case_638(); break; case 641: #line 4611 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryPlus, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 642: #line 4615 "cs-parser.jay" { yyVal = new Unary (Unary.Operator.UnaryNegation, (Expression) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 645: case_645(); break; case 646: #line 4626 "cs-parser.jay" { yyVal = new WildcardPattern (GetLocation (yyVals[0+yyTop])); } break; case 649: #line 4635 "cs-parser.jay" { yyVal = new RecursivePattern ((ATypeNameExpression) yyVals[-3+yyTop], (Arguments) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 650: #line 4642 "cs-parser.jay" { yyVal = new PropertyPattern ((ATypeNameExpression) yyVals[-3+yyTop], (List<PropertyPatternMember>) yyVals[-1+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 651: case_651(); break; case 652: case_652(); break; case 653: case_653(); break; case 655: case_655(); break; case 656: #line 4684 "cs-parser.jay" { yyVal = new Arguments (0); } break; case 658: case_658(); break; case 659: case_659(); break; case 660: #line 4710 "cs-parser.jay" { yyVal = new Argument ((Expression) yyVals[0+yyTop]); } break; case 661: case_661(); break; case 663: case_663(); break; case 664: case_664(); break; case 665: case_665(); break; case 666: case_666(); break; case 668: case_668(); break; case 669: case_669(); break; case 670: case_670(); break; case 671: case_671(); break; case 672: case_672(); break; case 673: case_673(); break; case 674: case_674(); break; case 675: case_675(); break; case 677: case_677(); break; case 678: case_678(); break; case 679: case_679(); break; case 680: case_680(); break; case 682: case_682(); break; case 683: case_683(); break; case 685: case_685(); break; case 686: case_686(); break; case 688: case_688(); break; case 689: case_689(); break; case 691: case_691(); break; case 692: case_692(); break; case 694: case_694(); break; case 695: case_695(); break; case 697: case_697(); break; case 699: case_699(); break; case 700: case_700(); break; case 701: case_701(); break; case 702: case_702(); break; case 703: case_703(); break; case 704: case_704(); break; case 705: case_705(); break; case 706: case_706(); break; case 707: case_707(); break; case 708: case_708(); break; case 709: case_709(); break; case 710: case_710(); break; case 711: case_711(); break; case 712: case_712(); break; case 713: case_713(); break; case 714: case_714(); break; case 715: case_715(); break; case 716: case_716(); break; case 717: case_717(); break; case 718: case_718(); break; case 719: case_719(); break; case 720: #line 5055 "cs-parser.jay" { yyVal = ParametersCompiled.EmptyReadOnlyParameters; } break; case 721: case_721(); break; case 722: #line 5066 "cs-parser.jay" { start_block (Location.Null); } break; case 723: case_723(); break; case 725: case_725(); break; case 727: case_727(); break; case 728: case_728(); break; case 729: case_729(); break; case 730: case_730(); break; case 731: case_731(); break; case 732: case_732(); break; case 733: case_733(); break; case 734: #line 5133 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 735: case_735(); break; case 736: case_736(); break; case 737: #line 5147 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 738: case_738(); break; case 739: case_739(); break; case 745: #line 5172 "cs-parser.jay" { yyVal = new ArglistAccess (GetLocation (yyVals[0+yyTop])); } break; case 746: case_746(); break; case 747: case_747(); break; case 748: case_748(); break; case 750: #line 5201 "cs-parser.jay" { yyVal = new BooleanExpression ((Expression) yyVals[0+yyTop]); } break; case 751: #line 5208 "cs-parser.jay" { yyVal = null; } break; case 753: case_753(); break; case 754: #line 5229 "cs-parser.jay" { yyVal = null; } break; case 755: #line 5233 "cs-parser.jay" { yyVal = null; } break; case 756: #line 5237 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 757: #line 5241 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 758: case_758(); break; case 759: case_759(); break; case 760: #line 5266 "cs-parser.jay" { } break; case 761: case_761(); break; case 762: case_762(); break; case 763: case_763(); break; case 764: case_764(); break; case 765: #line 5318 "cs-parser.jay" { yyVal = null; } break; case 766: #line 5320 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; StoreModifierLocation (Modifiers.PARTIAL, GetLocation (yyVals[0+yyTop])); } break; case 767: case_767(); break; case 768: #line 5333 "cs-parser.jay" { lexer.parsing_modifiers = false; } break; case 770: case_770(); break; case 771: case_771(); break; case 772: case_772(); break; case 773: case_773(); break; case 774: case_774(); break; case 775: case_775(); break; case 776: case_776(); break; case 777: case_777(); break; case 778: case_778(); break; case 779: case_779(); break; case 780: case_780(); break; case 781: case_781(); break; case 782: case_782(); break; case 783: case_783(); break; case 784: case_784(); break; case 785: case_785(); break; case 788: case_788(); break; case 789: case_789(); break; case 791: #line 5463 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 792: case_792(); break; case 793: case_793(); break; case 794: case_794(); break; case 795: case_795(); break; case 796: case_796(); break; case 797: case_797(); break; case 798: case_798(); break; case 799: case_799(); break; case 800: #line 5556 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Class, GetLocation (yyVals[0+yyTop])); } break; case 801: #line 5560 "cs-parser.jay" { yyVal = new SpecialContraintExpr (SpecialConstraint.Struct, GetLocation (yyVals[0+yyTop])); } break; case 802: #line 5567 "cs-parser.jay" { yyVal = null; } break; case 803: case_803(); break; case 804: case_804(); break; case 805: case_805(); break; case 806: case_806(); break; case 807: #line 5612 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 808: case_808(); break; case 809: case_809(); break; case 810: case_810(); break; case 811: case_811(); break; case 812: case_812(); break; case 813: case_813(); break; case 814: case_814(); break; case 819: #line 5674 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 820: #line 5678 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 822: case_822(); break; case 823: case_823(); break; case 826: #line 5712 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 827: #line 5716 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 856: case_856(); break; case 857: case_857(); break; case 858: case_858(); break; case 859: case_859(); break; case 860: case_860(); break; case 863: case_863(); break; case 864: case_864(); break; case 865: case_865(); break; case 869: case_869(); break; case 870: #line 5857 "cs-parser.jay" { yyVal = ComposedTypeSpecifier.CreatePointer (GetLocation (yyVals[0+yyTop])); } break; case 872: #line 5865 "cs-parser.jay" { yyVal = Error_AwaitAsIdentifier (yyVals[0+yyTop]); } break; case 873: case_873(); break; case 874: case_874(); break; case 875: case_875(); break; case 876: case_876(); break; case 878: case_878(); break; case 880: case_880(); break; case 881: case_881(); break; case 885: case_885(); break; case 888: case_888(); break; case 889: case_889(); break; case 890: #line 5979 "cs-parser.jay" { report.Error (145, lexer.Location, "A const field requires a value to be provided"); } break; case 891: case_891(); break; case 896: case_896(); break; case 898: case_898(); break; case 899: case_899(); break; case 900: case_900(); break; case 901: #line 6029 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 902: case_902(); break; case 903: #line 6039 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 904: #line 6040 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 905: case_905(); break; case 906: case_906(); break; case 907: case_907(); break; case 910: case_910(); break; case 911: case_911(); break; case 912: case_912(); break; case 913: #line 6112 "cs-parser.jay" { start_block (GetLocation (yyVals[0+yyTop])); } break; case 914: case_914(); break; case 915: case_915(); break; case 916: #line 6132 "cs-parser.jay" { report.Warning (1522, 1, current_block.StartLocation, "Empty switch block"); } break; case 920: #line 6142 "cs-parser.jay" { Error_SyntaxError (yyToken); } break; case 922: case_922(); break; case 923: #line 6159 "cs-parser.jay" { current_block.AddStatement ((Statement) yyVals[0+yyTop]); } break; case 924: case_924(); break; case 925: case_925(); break; case 926: #line 6188 "cs-parser.jay" { yyVal = new SwitchLabel (null, GetLocation (yyVals[0+yyTop])); } break; case 931: case_931(); break; case 932: case_932(); break; case 933: case_933(); break; case 934: case_934(); break; case 935: case_935(); break; case 936: case_936(); break; case 937: #line 6249 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 938: case_938(); break; case 939: #line 6264 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 940: case_940(); break; case 941: case_941(); break; case 942: #line 6285 "cs-parser.jay" { yyVal = yyVals[0+yyTop]; } break; case 943: case_943(); break; case 944: case_944(); break; case 945: case_945(); break; case 946: #line 6319 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 948: case_948(); break; case 949: case_949(); break; case 951: #line 6343 "cs-parser.jay" { yyVal = null; } break; case 953: #line 6348 "cs-parser.jay" { yyVal = new EmptyStatement (lexer.Location); } break; case 957: case_957(); break; case 958: case_958(); break; case 959: case_959(); break; case 960: case_960(); break; case 961: case_961(); break; case 962: case_962(); break; case 963: case_963(); break; case 970: case_970(); break; case 971: case_971(); break; case 972: case_972(); break; case 973: case_973(); break; case 974: case_974(); break; case 975: case_975(); break; case 976: case_976(); break; case 977: case_977(); 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; case 983: case_983(); break; case 984: case_984(); break; case 987: #line 6594 "cs-parser.jay" { yyVal = new TryCatch ((Block) yyVals[-1+yyTop], (List<Catch>) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop]), false); } break; case 988: case_988(); break; case 989: case_989(); break; case 990: case_990(); break; case 991: case_991(); break; case 992: case_992(); break; case 995: case_995(); break; case 996: case_996(); break; case 997: case_997(); break; case 998: case_998(); break; case 999: #line 6685 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 1000: case_1000(); break; case 1001: #line 6697 "cs-parser.jay" { lexer.parsing_catch_when = false; } break; case 1002: #line 6701 "cs-parser.jay" { lexer.parsing_catch_when = false; } break; case 1003: case_1003(); break; case 1004: #line 6716 "cs-parser.jay" { yyVal = new Checked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 1005: #line 6723 "cs-parser.jay" { yyVal = new Unchecked ((Block) yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop])); } break; case 1006: case_1006(); break; case 1007: #line 6733 "cs-parser.jay" { yyVal = new Unsafe ((Block) yyVals[0+yyTop], GetLocation (yyVals[-2+yyTop])); } break; case 1008: case_1008(); break; case 1009: case_1009(); break; case 1010: case_1010(); break; case 1011: case_1011(); break; case 1012: case_1012(); break; case 1013: case_1013(); break; case 1014: case_1014(); break; case 1015: case_1015(); break; case 1016: case_1016(); break; case 1017: case_1017(); break; case 1019: case_1019(); break; case 1020: #line 6838 "cs-parser.jay" { Error_MissingInitializer (lexer.Location); } break; case 1021: case_1021(); break; case 1022: case_1022(); break; case 1023: case_1023(); break; case 1024: case_1024(); break; case 1025: case_1025(); break; case 1026: case_1026(); break; case 1027: case_1027(); break; case 1028: case_1028(); break; case 1029: case_1029(); break; case 1030: #line 6943 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 1031: case_1031(); break; case 1032: #line 6958 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 1033: case_1033(); break; case 1034: case_1034(); break; case 1035: case_1035(); break; case 1037: case_1037(); break; case 1038: case_1038(); break; case 1039: #line 7022 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 1040: case_1040(); break; case 1041: case_1041(); break; case 1042: case_1042(); break; case 1043: case_1043(); break; case 1044: #line 7061 "cs-parser.jay" { yyVal = new object[] { yyVals[0+yyTop], GetLocation (yyVals[-1+yyTop]) }; } break; case 1045: case_1045(); break; case 1047: case_1047(); break; case 1053: #line 7090 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 1054: case_1054(); break; case 1055: #line 7109 "cs-parser.jay" { current_block = new Linq.QueryBlock (current_block, lexer.Location); } break; case 1056: case_1056(); break; case 1057: case_1057(); break; case 1058: case_1058(); break; case 1059: case_1059(); break; case 1060: case_1060(); break; case 1061: case_1061(); break; case 1062: case_1062(); break; case 1063: case_1063(); break; case 1064: case_1064(); break; case 1066: case_1066(); break; case 1067: case_1067(); break; case 1068: case_1068(); break; case 1070: case_1070(); break; case 1071: case_1071(); break; case 1073: case_1073(); break; case 1074: case_1074(); break; case 1075: #line 7310 "cs-parser.jay" { yyVal = new Linq.OrderByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 1076: case_1076(); break; case 1077: case_1077(); break; case 1078: #line 7327 "cs-parser.jay" { yyVal = new Linq.ThenByAscending ((Linq.QueryBlock) current_block, (Expression)yyVals[0+yyTop]); } break; case 1079: case_1079(); break; case 1080: case_1080(); break; case 1082: case_1082(); break; case 1083: case_1083(); break; case 1086: case_1086(); break; case 1087: case_1087(); break; case 1095: #line 7452 "cs-parser.jay" { module.DocumentationBuilder.ParsedName = (MemberName) yyVals[0+yyTop]; } break; case 1096: #line 7459 "cs-parser.jay" { module.DocumentationBuilder.ParsedParameters = (List<DocumentationParameter>)yyVals[0+yyTop]; } break; case 1097: case_1097(); break; case 1098: case_1098(); break; case 1099: case_1099(); break; case 1100: #line 7482 "cs-parser.jay" { yyVal = new MemberName ((MemberName) yyVals[-2+yyTop], MemberCache.IndexerNameAlias, Location.Null); } break; case 1101: #line 7486 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 1102: case_1102(); break; case 1103: case_1103(); break; case 1104: case_1104(); break; case 1105: case_1105(); break; case 1107: #line 7522 "cs-parser.jay" { yyVal = new MemberName (((MemberName) yyVals[-2+yyTop]), (MemberName) yyVals[0+yyTop]); } break; case 1109: #line 7530 "cs-parser.jay" { valid_param_mod = ParameterModifierType.Ref | ParameterModifierType.Out; } break; case 1110: #line 7534 "cs-parser.jay" { yyVal = yyVals[-1+yyTop]; } break; case 1111: #line 7541 "cs-parser.jay" { yyVal = new List<DocumentationParameter> (0); } break; case 1113: case_1113(); break; case 1114: case_1114(); break; case 1115: case_1115(); break; #line default } yyTop -= yyLen[yyN]; yyState = yyStates[yyTop]; int yyM = yyLhs[yyN]; if (yyState == 0 && yyM == 0) { //t if (debug != null) debug.shift(0, yyFinal); yyState = yyFinal; if (yyToken < 0) { yyToken = yyLex.advance() ? yyLex.token() : 0; //t if (debug != null) //t debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value()); } if (yyToken == 0) { //t if (debug != null) debug.accept(yyVal); return yyVal; } goto continue_yyLoop; } if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0) && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState)) yyState = yyTable[yyN]; else yyState = yyDgoto[yyM]; //t if (debug != null) debug.shift(yyStates[yyTop], yyState); goto continue_yyLoop; continue_yyDiscarded: ; // implements the named-loop continue: 'continue yyDiscarded' } continue_yyLoop: ; // implements the named-loop continue: 'continue yyLoop' } }
private async Task <TryCatch <CosmosQueryExecutionContext> > TryCreateItemQueryExecutionContextAsync( CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); string continuationToken = this.inputParameters.InitialUserContinuationToken; if (this.inputParameters.InitialUserContinuationToken != null) { if (!PipelineContinuationToken.TryParse( continuationToken, out PipelineContinuationToken pipelineContinuationToken)) { return(TryCatch <CosmosQueryExecutionContext> .FromException( new Exception($"Malformed {nameof(PipelineContinuationToken)}: {continuationToken}."))); } if (PipelineContinuationToken.IsTokenFromTheFuture(pipelineContinuationToken)) { return(TryCatch <CosmosQueryExecutionContext> .FromException( new Exception( $"{nameof(PipelineContinuationToken)} Continuation token is from a newer version of the SDK. " + $"Upgrade the SDK to avoid this issue." + $"{continuationToken}."))); } if (!PipelineContinuationToken.TryConvertToLatest( pipelineContinuationToken, out PipelineContinuationTokenV1_1 latestVersionPipelineContinuationToken)) { return(TryCatch <CosmosQueryExecutionContext> .FromException( new Exception($"{nameof(PipelineContinuationToken)}: '{continuationToken}' is no longer supported."))); } continuationToken = latestVersionPipelineContinuationToken.SourceContinuationToken; this.inputParameters.InitialUserContinuationToken = continuationToken; if (latestVersionPipelineContinuationToken.QueryPlan != null) { this.inputParameters.PartitionedQueryExecutionInfo = latestVersionPipelineContinuationToken.QueryPlan; } } CosmosQueryClient cosmosQueryClient = this.CosmosQueryContext.QueryClient; ContainerQueryProperties containerQueryProperties = await cosmosQueryClient.GetCachedContainerQueryPropertiesAsync( this.CosmosQueryContext.ResourceLink, this.inputParameters.PartitionKey, cancellationToken); this.CosmosQueryContext.ContainerResourceId = containerQueryProperties.ResourceId; PartitionedQueryExecutionInfo partitionedQueryExecutionInfo; if (this.inputParameters.PartitionedQueryExecutionInfo != null) { partitionedQueryExecutionInfo = this.inputParameters.PartitionedQueryExecutionInfo; } else { if (this.CosmosQueryContext.QueryClient.ByPassQueryParsing()) { // For non-Windows platforms(like Linux and OSX) in .NET Core SDK, we cannot use ServiceInterop, so need to bypass in that case. // We are also now bypassing this for 32 bit host process running even on Windows as there are many 32 bit apps that will not work without this partitionedQueryExecutionInfo = await QueryPlanRetriever.GetQueryPlanThroughGatewayAsync( this.CosmosQueryContext.QueryClient, this.inputParameters.SqlQuerySpec, this.CosmosQueryContext.ResourceLink, cancellationToken); } else { //todo:elasticcollections this may rely on information from collection cache which is outdated //if collection is deleted/created with same name. //need to make it not rely on information from collection cache. Documents.PartitionKeyDefinition partitionKeyDefinition; object partitionKeyDefinitionObject; if (this.inputParameters.Properties != null && this.inputParameters.Properties.TryGetValue(InternalPartitionKeyDefinitionProperty, out partitionKeyDefinitionObject)) { if (partitionKeyDefinitionObject is Documents.PartitionKeyDefinition definition) { partitionKeyDefinition = definition; } else { throw new ArgumentException( "partitionkeydefinition has invalid type", nameof(partitionKeyDefinitionObject)); } } else { partitionKeyDefinition = containerQueryProperties.PartitionKeyDefinition; } partitionedQueryExecutionInfo = await QueryPlanRetriever.GetQueryPlanWithServiceInteropAsync( this.CosmosQueryContext.QueryClient, this.inputParameters.SqlQuerySpec, partitionKeyDefinition, this.inputParameters.PartitionKey != null, cancellationToken); } } this.partitionedQueryExecutionInfo = partitionedQueryExecutionInfo; return(await this.TryCreateFromPartitionedQuerExecutionInfoAsync( partitionedQueryExecutionInfo, containerQueryProperties, cancellationToken)); }
void case_990() #line 6606 "cs-parser.jay" { Error_SyntaxError (1524, yyToken); yyVal = new TryCatch ((Block) yyVals[-1+yyTop], null, GetLocation (yyVals[-2+yyTop]), false); }
public static async Task <TryCatch <CosmosQueryExecutionContext> > TryCreateSpecializedDocumentQueryExecutionContextAsync( CosmosQueryContext cosmosQueryContext, InputParameters inputParameters, PartitionedQueryExecutionInfo partitionedQueryExecutionInfo, List <Documents.PartitionKeyRange> targetRanges, string collectionRid, CancellationToken cancellationToken) { if (!string.IsNullOrEmpty(partitionedQueryExecutionInfo.QueryInfo?.RewrittenQuery)) { inputParameters.SqlQuerySpec = new SqlQuerySpec( partitionedQueryExecutionInfo.QueryInfo.RewrittenQuery, inputParameters.SqlQuerySpec.Parameters); } // Figure out the optimal page size. long initialPageSize = inputParameters.MaxItemCount.GetValueOrDefault(ParallelQueryConfig.GetConfig().ClientInternalPageSize); if (initialPageSize < -1 || initialPageSize == 0) { return(TryCatch <CosmosQueryExecutionContext> .FromException( new Exception($"Invalid MaxItemCount {initialPageSize}"))); } QueryInfo queryInfo = partitionedQueryExecutionInfo.QueryInfo; bool getLazyFeedResponse = queryInfo.HasTop; // We need to compute the optimal initial page size for order-by queries if (queryInfo.HasOrderBy) { int top; if (queryInfo.HasTop && (top = partitionedQueryExecutionInfo.QueryInfo.Top.Value) > 0) { // All partitions should initially fetch about 1/nth of the top value. long pageSizeWithTop = (long)Math.Min( Math.Ceiling(top / (double)targetRanges.Count) * PageSizeFactorForTop, top); if (initialPageSize > 0) { initialPageSize = Math.Min(pageSizeWithTop, initialPageSize); } else { initialPageSize = pageSizeWithTop; } } else if (cosmosQueryContext.IsContinuationExpected) { if (initialPageSize < 0) { if (inputParameters.MaxBufferedItemCount.HasValue) { // Max of what the user is willing to buffer and the default (note this is broken if MaxBufferedItemCount = -1) initialPageSize = Math.Max(inputParameters.MaxBufferedItemCount.Value, ParallelQueryConfig.GetConfig().DefaultMaximumBufferSize); } else { initialPageSize = ParallelQueryConfig.GetConfig().DefaultMaximumBufferSize; } } initialPageSize = (long)Math.Min( Math.Ceiling(initialPageSize / (double)targetRanges.Count) * PageSizeFactorForTop, initialPageSize); } } Debug.Assert(initialPageSize > 0 && initialPageSize <= int.MaxValue, string.Format(CultureInfo.InvariantCulture, "Invalid MaxItemCount {0}", initialPageSize)); CosmosCrossPartitionQueryExecutionContext.CrossPartitionInitParams initParams = new CosmosCrossPartitionQueryExecutionContext.CrossPartitionInitParams( sqlQuerySpec: inputParameters.SqlQuerySpec, collectionRid: collectionRid, partitionedQueryExecutionInfo: partitionedQueryExecutionInfo, partitionKeyRanges: targetRanges, initialPageSize: (int)initialPageSize, maxConcurrency: inputParameters.MaxConcurrency, maxItemCount: inputParameters.MaxItemCount, maxBufferedItemCount: inputParameters.MaxBufferedItemCount); return(await PipelinedDocumentQueryExecutionContext.TryCreateAsync( inputParameters.ExecutionEnvironment, cosmosQueryContext, initParams, inputParameters.InitialUserContinuationToken, cancellationToken)); }
public override object Visit (TryCatch tryCatchStatement) { var result = new TryCatchStatement (); result.AddChild (new CSharpTokenNode (Convert (tryCatchStatement.loc), TryCatchStatement.TryKeywordRole), TryCatchStatement.TryKeywordRole); if (tryCatchStatement.Block != null) result.AddChild ((BlockStatement)tryCatchStatement.Block.Accept (this), TryCatchStatement.TryBlockRole); if (tryCatchStatement.Clauses != null) { foreach (var ctch in tryCatchStatement.Clauses) { result.AddChild (ConvertCatch (ctch), TryCatchStatement.CatchClauseRole); } } // if (tryCatchStatement.General != null) // result.AddChild (ConvertCatch (tryCatchStatement.General), TryCatchStatement.CatchClauseRole); return result; }
public Task <List <PartitionKeyRange> > GetFeedRangesAsync( CancellationToken cancellationToken) => TryCatch <List <PartitionKeyRange> > .UnsafeGetResultAsync( this.MonadicGetFeedRangesAsync( cancellationToken), cancellationToken);