Ejemplo n.º 1
0
        private static ReadOnlyCollection <byte>?GetDynamicTransforms(
            this CSharpCompilation compilation,
            TypeSymbol type,
            int customModifiersCount,
            RefKind refKind
            )
        {
            var builder = ArrayBuilder <bool> .GetInstance();

            CSharpCompilation.DynamicTransformsEncoder.Encode(
                type,
                customModifiersCount,
                refKind,
                builder,
                addCustomModifierFlags: true
                );
            var bytes =
                builder.Count > 0 &&
                compilation.HasDynamicEmitAttributes(
                    BindingDiagnosticBag.Discarded,
                    Location.None
                    )
                    ? DynamicFlagsCustomTypeInfo.ToBytes(builder)
                    : null;

            builder.Free();
            return(bytes);
        }
        private static void ValidateIndexer(params bool[] dynamicFlags)
        {
            if (dynamicFlags == null)
            {
                Assert.False(DynamicFlagsCustomTypeInfo.GetFlag(null, 0));
            }
            else
            {
                var builder = ArrayBuilder <bool> .GetInstance(dynamicFlags.Length);

                builder.AddRange(dynamicFlags);
                var customTypeInfo = DynamicFlagsCustomTypeInfo.ToBytes(builder);
                builder.Free();

                AssertEx.All(
                    dynamicFlags.Select(
                        (f, i) => f == DynamicFlagsCustomTypeInfo.GetFlag(customTypeInfo, i)
                        ),
                    x => x
                    );
                Assert.False(
                    DynamicFlagsCustomTypeInfo.GetFlag(customTypeInfo, dynamicFlags.Length)
                    );
            }
        }
Ejemplo n.º 3
0
        internal static ReadOnlyCollection <byte> ToBytes(this ImmutableArray <bool> dynamicFlags)
        {
            Debug.Assert(!dynamicFlags.IsDefaultOrEmpty);

            var builder = ArrayBuilder <bool> .GetInstance(dynamicFlags.Length);

            builder.AddRange(dynamicFlags);
            var bytes = DynamicFlagsCustomTypeInfo.ToBytes(builder);

            builder.Free();
            return(CustomTypeInfo.Encode(bytes, null));
        }
        private static void ValidateToBytes(bool[] dynamicFlags, params byte[] expectedBytes)
        {
            Assert.NotNull(dynamicFlags);
            Assert.NotNull(expectedBytes);

            var builder = ArrayBuilder <bool> .GetInstance(dynamicFlags.Length);

            builder.AddRange(dynamicFlags);
            var actualBytes = DynamicFlagsCustomTypeInfo.ToBytes(builder);

            builder.Free();
            ValidateBytes(actualBytes, expectedBytes);
        }