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); } } }