Example #1
0
 public void AssertPublicMembersThrow(ArrayBuilder <string?> builder, string?[] array)
 {
     // Public methods & properties except for IsClosed
     Assert.Throws <ObjectDisposedException>(() => builder.Capacity -= 1);
     Assert.Throws <ObjectDisposedException>(() => builder[0]        = "closed");
     Assert.Throws <ObjectDisposedException>(() => builder.Add("closed"));
     Assert.Throws <ObjectDisposedException>(() => builder.AddRange(Enumerable.Repeat("closed", 2)));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.BinarySearch(0, 4, "element", StringComparer.Ordinal));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.BinarySearch("element"));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.BinarySearch("element", StringComparer.Ordinal));
     Assert.Throws <ObjectDisposedException>(() => builder.Clear());
     Assert.Throws <ObjectDisposedException>(() => _ = builder.Close());
     Assert.Throws <ObjectDisposedException>(() => _ = builder.CloseAndSlice());
     Assert.Throws <ObjectDisposedException>(() => _ = builder.CloseAndSlice(1));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.CloseAndSlice(1, 1));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.Contains("element"));
     Assert.Throws <ObjectDisposedException>(() => builder.CopyTo(array));
     Assert.Throws <ObjectDisposedException>(() => builder.CopyTo(0, array, 0, 4));
     Assert.Throws <ObjectDisposedException>(() => builder.CopyTo(array, 0));
     Assert.Throws <ObjectDisposedException>(() => builder.EnsureCapacity(12));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.GetEnumerator());
     Assert.Throws <ObjectDisposedException>(() => _ = builder.IndexOf("element"));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.IndexOf("element", 0));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.IndexOf("element", 0, 4));
     Assert.Throws <ObjectDisposedException>(() => builder.Insert(0, "closed"));
     Assert.Throws <ObjectDisposedException>(() => builder.InsertRange(0, Enumerable.Repeat("closed", 2)));
     Assert.Throws <ObjectDisposedException>(() => builder.Remove("element"));
     Assert.Throws <ObjectDisposedException>(() => builder.RemoveAt(2));
     Assert.Throws <ObjectDisposedException>(() => builder.RemoveRange(0, 3));
     Assert.Throws <ObjectDisposedException>(() => _ = builder.TrimAndClose());
     Assert.Throws <ObjectDisposedException>(() => builder.TrimExcess());
 }
        // Shared helper for MakeObjectCreationWithInitializer and MakeNewT
        private BoundExpression MakeObjectCreationWithInitializer(
            CSharpSyntaxNode syntax,
            BoundExpression rewrittenObjectCreation,
            BoundExpression initializerExpression,
            TypeSymbol type)
        {
            Debug.Assert(!inExpressionLambda);
            Debug.Assert(initializerExpression != null && !initializerExpression.HasErrors);

            // Create a temp and assign it with the object creation expression.
            BoundAssignmentOperator boundAssignmentToTemp;
            BoundLocal boundTemp = this.factory.StoreToTemp(rewrittenObjectCreation, out boundAssignmentToTemp);

            // Rewrite object/collection initializer expressions
            ArrayBuilder <BoundExpression> dynamicSiteInitializers = null;
            ArrayBuilder <BoundExpression> loweredInitializers     = ArrayBuilder <BoundExpression> .GetInstance();

            AddObjectOrCollectionInitializers(ref dynamicSiteInitializers, loweredInitializers, boundTemp, initializerExpression);

            int dynamicSiteCount = (dynamicSiteInitializers != null) ? dynamicSiteInitializers.Count : 0;

            var sideEffects = new BoundExpression[1 + dynamicSiteCount + loweredInitializers.Count];

            sideEffects[0] = boundAssignmentToTemp;

            if (dynamicSiteCount > 0)
            {
                dynamicSiteInitializers.CopyTo(sideEffects, 1);
                dynamicSiteInitializers.Free();
            }

            loweredInitializers.CopyTo(sideEffects, 1 + dynamicSiteCount);
            loweredInitializers.Free();

            return(new BoundSequence(
                       syntax: syntax,
                       locals: ImmutableArray.Create(boundTemp.LocalSymbol),
                       sideEffects: sideEffects.AsImmutableOrNull(),
                       value: boundTemp,
                       type: type));
        }