Пример #1
0
        internal CustomAttrib.NamedArg ReadNamedArg(byte [] data, BinaryReader br, ref bool read, bool resolve)
        {
            CustomAttrib.NamedArg na = new CustomAttrib.NamedArg();
            byte kind = br.ReadByte();

            if (kind == 0x53)               // field
            {
                na.Field    = true;
                na.Property = false;
            }
            else if (kind == 0x54)                 // property
            {
                na.Field    = false;
                na.Property = true;
            }
            else
            {
                throw new MetadataFormatException("Wrong kind of namedarg found: 0x" + kind.ToString("x2"));
            }

            TypeReference elemType = ReadTypeReference(data, br, out na.FieldOrPropType);

            na.FieldOrPropName = ReadUTF8String(data, br);
            na.FixedArg        = ReadFixedArg(data, br, elemType, ref read, resolve);

            return(na);
        }
        void Write(CustomAttrib.NamedArg na, MemoryBinaryWriter writer)
        {
            if (na.Field)
            {
                writer.Write((byte)0x53);
            }
            else if (na.Property)
            {
                writer.Write((byte)0x54);
            }
            else
            {
                throw new MetadataFormatException("Unknown kind of namedarg");
            }

            if (na.FixedArg.SzArray)
            {
                writer.Write((byte)ElementType.SzArray);
            }

            writer.Write((byte)na.FieldOrPropType);

            if (na.FieldOrPropType == ElementType.Enum)
            {
                Write(na.FixedArg.Elems [0].ElemType.FullName);
            }

            Write(na.FieldOrPropName);

            Write(na.FixedArg, writer);
        }
        internal CustomAttrib.NamedArg ReadNamedArg(byte [] data, BinaryReader br, ref bool read)
        {
            CustomAttrib.NamedArg na = new CustomAttrib.NamedArg();
            byte kind = br.ReadByte();

            if (kind == 0x53)               // field
            {
                na.Field    = true;
                na.Property = false;
            }
            else if (kind == 0x54)                 // property
            {
                na.Field    = false;
                na.Property = true;
            }
            else
            {
                throw new MetadataFormatException("Wrong kind of namedarg found: 0x" + kind.ToString("x2"));
            }

            bool array = false;

            na.FieldOrPropType = (ElementType)br.ReadByte();
            if (na.FieldOrPropType == ElementType.SzArray)
            {
                na.FieldOrPropType = (ElementType)br.ReadByte();
                array = true;
            }

            int next, length;

            if (na.FieldOrPropType == ElementType.Enum)
            {
                read = false;
                return(na);
            }

            length = Utilities.ReadCompressedInteger(data, (int)br.BaseStream.Position, out next);
            br.BaseStream.Position = next;

            // COMPACT FRAMEWORK NOTE: Encoding.GetString(byte[]) is not supported.
            byte [] bytes = br.ReadBytes(length);
            na.FieldOrPropName = Encoding.UTF8.GetString(bytes, 0, bytes.Length);

            na.FixedArg = ReadFixedArg(data, br, array, na.FieldOrPropType, ref read);

            return(na);
        }
Пример #4
0
        CustomAttrib.NamedArg CreateNamedArg(TypeReference type, string name,
            object value, bool field)
        {
            CustomAttrib.NamedArg na = new CustomAttrib.NamedArg ();
            na.Field = field;
            na.Property = !field;

            na.FieldOrPropName = name;
            na.FieldOrPropType = GetCorrespondingType (type.FullName);
            na.FixedArg = CreateFixedArg (type, value);

            return na;
        }
Пример #5
0
        internal CustomAttrib.NamedArg ReadNamedArg(byte [] data, BinaryReader br, ref bool read, bool resolve)
        {
            CustomAttrib.NamedArg na = new CustomAttrib.NamedArg ();
            byte kind = br.ReadByte ();
            if (kind == 0x53) { // field
                na.Field = true;
                na.Property = false;
            } else if (kind == 0x54) { // property
                na.Field = false;
                na.Property = true;
            } else
                throw new MetadataFormatException ("Wrong kind of namedarg found: 0x" + kind.ToString("x2"));

            TypeReference elemType = ReadTypeReference (data, br, out na.FieldOrPropType);
            na.FieldOrPropName = ReadUTF8String (data, br);
            na.FixedArg = ReadFixedArg (data, br, elemType, ref read, resolve);

            return na;
        }
Пример #6
0
        internal CustomAttrib.NamedArg ReadNamedArg(byte [] data, BinaryReader br, ref bool read)
        {
            CustomAttrib.NamedArg na = new CustomAttrib.NamedArg ();
            byte kind = br.ReadByte ();
            if (kind == 0x53) { // field
                na.Field = true;
                na.Property = false;
            } else if (kind == 0x54) { // property
                na.Field = false;
                na.Property = true;
            } else
                throw new MetadataFormatException ("Wrong kind of namedarg found: 0x" + kind.ToString("x2"));

            bool array = false;
            na.FieldOrPropType = (ElementType) br.ReadByte ();
            if (na.FieldOrPropType == ElementType.SzArray) {
                na.FieldOrPropType = (ElementType) br.ReadByte ();
                array = true;
            }

            int next, length;

            if (na.FieldOrPropType == ElementType.Enum) {
                read = false;
                return na;
            }

            length = Utilities.ReadCompressedInteger (data, (int) br.BaseStream.Position, out next);
            br.BaseStream.Position = next;

            // COMPACT FRAMEWORK NOTE: Encoding.GetString(byte[]) is not supported.
            byte [] bytes = br.ReadBytes (length);
            na.FieldOrPropName = Encoding.UTF8.GetString (bytes, 0, bytes.Length);

            na.FixedArg = ReadFixedArg (data, br, array, na.FieldOrPropType, ref read);

            return na;
        }