コード例 #1
0
        public ASTrait(ABCFile abc, FlashReader input)
            : this(abc)
        {
            QNameIndex = input.ReadInt30();

            byte bitContainer = input.ReadByte();
            Kind       = (TraitKind)(bitContainer & 0x0F);
            Attributes = (TraitAttributes)(bitContainer >> 4);

            Id = input.ReadInt30();
            switch (Kind)
            {
            case TraitKind.Slot:
            case TraitKind.Constant:
            {
                TypeIndex  = input.ReadInt30();
                ValueIndex = input.ReadInt30();
                if (ValueIndex != 0)
                {
                    ValueKind = (ConstantKind)input.ReadByte();
                }
                break;
            }

            case TraitKind.Method:
            case TraitKind.Getter:
            case TraitKind.Setter:
            {
                MethodIndex  = input.ReadInt30();
                Method.Trait = this;
                break;
            }

            case TraitKind.Class:
            {
                ClassIndex = input.ReadInt30();
                break;
            }

            case TraitKind.Function:
            {
                FunctionIndex = input.ReadInt30();
                break;
            }
            }

            if (Attributes.HasFlag(TraitAttributes.Metadata))
            {
                MetadataIndices.Capacity = input.ReadInt30();
                for (int i = 0; i < MetadataIndices.Capacity; i++)
                {
                    int metadatumIndex = input.ReadInt30();
                    MetadataIndices.Add(metadatumIndex);
                }
            }
        }