Ejemplo n.º 1
0
        /// <inheritdoc />
        public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
        {
            writer.WriteByte((byte)ElementType.FnPtr);
            Signature.Write(buffer, writer);

            base.Write(buffer, writer);
        }
Ejemplo n.º 2
0
        public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
        {
            if (!Validate())
            {
                throw new InvalidOperationException();
            }

            writer.WriteByte((byte)ElementType);
            BaseType.Write(buffer, writer);
            writer.WriteCompressedUInt32((uint)Dimensions.Count);

            var sizedDimensions = Dimensions.Where(x => x.Size.HasValue).ToArray();

            writer.WriteCompressedUInt32((uint)sizedDimensions.Length);
            foreach (var sizedDimension in sizedDimensions)
            {
                writer.WriteCompressedUInt32((uint)sizedDimension.Size.Value);
            }

            var boundedDimensions = Dimensions.Where(x => x.LowerBound.HasValue).ToArray();

            writer.WriteCompressedUInt32((uint)boundedDimensions.Length);
            foreach (var boundedDimension in boundedDimensions)
            {
                writer.WriteCompressedUInt32((uint)boundedDimension.LowerBound.Value);
            }

            base.Write(buffer, writer);
        }
Ejemplo n.º 3
0
 /// <inheritdoc />
 public override void Prepare(MetadataBuffer buffer)
 {
     foreach (var variable in Variables)
     {
         variable.Prepare(buffer);
     }
 }
        public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
        {
            writer.WriteByte((byte)NativeType);
            writer.WriteByte((byte)ElementType);

            base.Write(buffer, writer);
        }
Ejemplo n.º 5
0
 /// <inheritdoc />
 public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
 {
     if (ExtraData != null)
     {
         writer.WriteBytes(ExtraData);
     }
 }
Ejemplo n.º 6
0
 public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
 {
     writer.WriteByte((byte)ArgumentMemberType);
     ArgumentType.Write(buffer, writer); // TODO: write FieldOrPropType instead.
     writer.WriteSerString(MemberName);
     Argument.Write(buffer, writer);
 }
Ejemplo n.º 7
0
 /// <inheritdoc />
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return((uint)(sizeof(byte) +
                   GenericArguments.Count.GetCompressedSize() +
                   GenericArguments.Sum(x => x.GetPhysicalLength(buffer)))
            + base.GetPhysicalLength(buffer));
 }
Ejemplo n.º 8
0
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return((uint)
            (ArgumentType.ElementType != ElementType.SzArray
             ? Elements[0].GetPhysicalLength(buffer)
             : sizeof(uint) + Elements.Sum(x => x.GetPhysicalLength(buffer))));
 }
Ejemplo n.º 9
0
 /// <inheritdoc />
 public override void Prepare(MetadataBuffer buffer)
 {
     foreach (var attribute in Attributes)
     {
         attribute.Prepare(buffer);
     }
 }
Ejemplo n.º 10
0
        public IDictionary <IMetadataMember, MetadataToken> UnlockMetadata()
        {
            var buffer = new MetadataBuffer(Image);

            buffer.TableStreamBuffer.AddAssembly(Image.Assembly);
            NetDirectory.ResourcesManifest = buffer.ResourcesBuffer.CreateDirectory();

            var buffers = new MetadataStreamBuffer[]
            {
                buffer.TableStreamBuffer,
                buffer.BlobStreamBuffer,
                buffer.GuidStreamBuffer,
                buffer.StringStreamBuffer,
                buffer.UserStringStreamBuffer
            };

            foreach (var streamBuffer in buffers)
            {
                var header = StreamHeaders.FirstOrDefault(x => x.Name == streamBuffer.Name)
                             ?? new MetadataStreamHeader(streamBuffer.Name);
                header.Stream = streamBuffer.CreateStream();
            }

            Image = null;

            return(buffer.TableStreamBuffer.GetNewTokenMapping());
        }
Ejemplo n.º 11
0
        /// <inheritdoc />
        public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
        {
            writer.WriteByte(0x06);
            FieldType.Write(buffer, writer);

            base.Write(buffer, writer);
        }
Ejemplo n.º 12
0
 /// <inheritdoc />
 public override void Prepare(MetadataBuffer buffer)
 {
     foreach (var argument in GenericArguments)
     {
         argument.Prepare(buffer);
     }
 }
 /// <inheritdoc />
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return(sizeof(byte) +
            ArgumentType.GetPhysicalLength(buffer) +
            (MemberName?.GetSerStringSize() ?? sizeof(byte)) +
            Argument.GetPhysicalLength(buffer));
 }
Ejemplo n.º 14
0
        public override uint GetPhysicalLength(MetadataBuffer buffer)
        {
            if (!Validate())
            {
                throw new InvalidOperationException();
            }

            uint numSizes               = 0u;
            uint numLoBounds            = 0u;
            uint sizesAndLoBoundsLength = 0u;

            foreach (var dimension in Dimensions)
            {
                if (dimension.Size.HasValue)
                {
                    numSizes++;
                    sizesAndLoBoundsLength += dimension.Size.Value.GetCompressedSize();
                }
                if (dimension.LowerBound.HasValue)
                {
                    numLoBounds++;
                    sizesAndLoBoundsLength += dimension.LowerBound.Value.GetCompressedSize();
                }
            }

            return(sizeof(byte) +
                   BaseType.GetPhysicalLength(buffer) +
                   Dimensions.Count.GetCompressedSize() +
                   numSizes.GetCompressedSize() +
                   numLoBounds.GetCompressedSize() +
                   sizesAndLoBoundsLength +
                   base.GetPhysicalLength(buffer));
        }
Ejemplo n.º 15
0
        public void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
        {
            if (IsFat)
            {
                writer.WriteUInt32((uint)HandlerType);
                writer.WriteUInt32((uint)TryStart.Offset);
                writer.WriteUInt32((uint)(TryEnd.Offset - TryStart.Offset));
                writer.WriteUInt32((uint)HandlerStart.Offset);
                writer.WriteUInt32((uint)(HandlerEnd.Offset - HandlerStart.Offset));
            }
            else
            {
                writer.WriteUInt16((ushort)HandlerType);
                writer.WriteUInt16((ushort)TryStart.Offset);
                writer.WriteByte((byte)(TryEnd.Offset - TryStart.Offset));
                writer.WriteUInt16((ushort)HandlerStart.Offset);
                writer.WriteByte((byte)(HandlerEnd.Offset - HandlerStart.Offset));
            }

            switch (HandlerType)
            {
            case ExceptionHandlerType.Exception:
                writer.WriteUInt32(buffer.TableStreamBuffer.GetTypeToken(CatchType).ToUInt32());
                break;

            case ExceptionHandlerType.Filter:
                writer.WriteUInt32((uint)FilterStart.Offset);
                break;

            default:
                writer.WriteUInt32(0);
                break;
            }
        }
Ejemplo n.º 16
0
 /// <inheritdoc />
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return(sizeof(byte) +
            NumberOfElements.GetCompressedSize() +
            sizeof(byte) +
            base.GetPhysicalLength(buffer));
 }
        /// <inheritdoc />
        public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
        {
            writer.WriteByte((byte)ElementType);
            writer.WriteCompressedUInt32((uint)Index);

            base.Write(buffer, writer);
        }
Ejemplo n.º 18
0
 /// <inheritdoc />
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return((uint)(sizeof(byte) +
                   Parameters.Count.GetCompressedSize() +
                   PropertyType.GetPhysicalLength(buffer) +
                   Parameters.Sum(x => x.GetPhysicalLength(buffer)))
            + base.GetPhysicalLength(buffer));
 }
Ejemplo n.º 19
0
 /// <inheritdoc />
 public override void Prepare(MetadataBuffer buffer)
 {
     foreach (var parameter in Parameters)
     {
         parameter.Prepare(buffer);
     }
     ReturnType.Prepare(buffer);
 }
Ejemplo n.º 20
0
 /// <inheritdoc />
 public override void Prepare(MetadataBuffer buffer)
 {
     PropertyType.Prepare(buffer);
     foreach (var parameter in Parameters)
     {
         parameter.Prepare(buffer);
     }
 }
Ejemplo n.º 21
0
 /// <inheritdoc />
 public override void Prepare(MetadataBuffer buffer)
 {
     buffer.TableStreamBuffer.GetTypeToken(GenericType);
     foreach (var argument in GenericArguments)
     {
         argument.Prepare(buffer);
     }
 }
Ejemplo n.º 22
0
 /// <inheritdoc />
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return((uint)(sizeof(ushort) +
                   FixedArguments.Sum(x => x.GetPhysicalLength(buffer)) +
                   sizeof(ushort) +
                   NamedArguments.Sum(x => x.GetPhysicalLength(buffer)))
            + base.GetPhysicalLength(buffer));
 }
Ejemplo n.º 23
0
 public override void Prepare(MetadataBuffer buffer)
 {
     ArgumentType.Prepare(buffer);
     foreach (var element in Elements)
     {
         element.Prepare(buffer);
     }
 }
Ejemplo n.º 24
0
 public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
 {
     writer.WriteByte((byte)NativeType);
     writer.WriteSerString(Guid.ToString("B"));
     writer.WriteSerString(UnmanagedType);
     writer.WriteSerString(ManagedType);
     writer.WriteSerString(Cookie);
 }
        /// <inheritdoc />
        public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
        {
            writer.WriteByte((byte)ElementType);
            WriteTypeDefOrRef(buffer, writer, ModifierType);
            BaseType.Write(buffer, writer);

            base.Write(buffer, writer);
        }
Ejemplo n.º 26
0
 public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
 {
     writer.WriteByte(0x0A);
     writer.WriteCompressedUInt32((uint)GenericArguments.Count);
     foreach (var argument in GenericArguments)
     {
         argument.Write(buffer, writer);
     }
 }
Ejemplo n.º 27
0
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return(sizeof(byte) +
            sizeof(byte) + 38 +
            UnmanagedType.GetSerStringSize() +
            ManagedType.GetSerStringSize() +
            Cookie.GetSerStringSize() +
            base.GetPhysicalLength(buffer));
 }
Ejemplo n.º 28
0
 public override void Write(MetadataBuffer buffer, IBinaryStreamWriter writer)
 {
     writer.WriteByte(0x07);
     writer.WriteCompressedUInt32((uint)Variables.Count);
     foreach (var variable in Variables)
     {
         variable.Write(buffer, writer);
     }
 }
Ejemplo n.º 29
0
        /// <inheritdoc />
        public override uint GetPhysicalLength(MetadataBuffer buffer)
        {
            var encoder = buffer.TableStreamBuffer
                          .GetIndexEncoder(CodedIndex.TypeDefOrRef);

            return(sizeof(byte) +
                   encoder.EncodeToken(buffer.TableStreamBuffer.GetTypeToken(Type)).GetCompressedSize() +
                   base.GetPhysicalLength(buffer));
        }
Ejemplo n.º 30
0
 /// <inheritdoc />
 public override uint GetPhysicalLength(MetadataBuffer buffer)
 {
     return(2 * sizeof(byte) +
            (ParameterIndex.HasValue
                ? ParameterIndex.Value.GetCompressedSize() +
             (NumberOfElements.HasValue ? NumberOfElements.Value.GetCompressedSize() : 0)
                : 0)
            + base.GetPhysicalLength(buffer));
 }