/** * TODO: * - Implement TargetProtocolRequirement * - Implement TargetEnumDescriptor * - Use a cleaner property-caching approach */ import { ContextDescriptorKind, MetadataKind, TargetValueWitnessFlags, TypeContextDescriptorFlags, MethodDescriptorFlags, TypeReferenceKind, ConformanceFlags, ProtocolContextDescriptorFlags } from "./metadatavalues.js"; import { RelativeDirectPointer, RelativeIndirectablePointer } from "../basic/relativepointer.js"; export type OpaqueValue = NativePointer; export interface TypeLayout { size: number; stride: number; flags: number; extraInhabitantCount: number; } export declare class TargetValueBuffer { readonly privateData: NativePointer; constructor(privateData: NativePointer); } type ValueBuffer = TargetValueBuffer; export declare abstract class TargetMetadata { #private; readonly handle: NativePointer; static readonly OFFSETOF_KIND = 0; constructor(handle: NativePointer); getKind(): MetadataKind; isClassObject(): boolean; getValueWitnesses(): TargetValueWitnessTable; getTypeLayout(): TypeLayout; vw_initializeWithCopy(dest: NativePointer, src: NativePointer): NativePointer; vw_getEnumTag(object: NativePointer): number; vw_destructiveInjectEnumTag(object: NativePointer, tag: number): void; abstract getDescription(): TargetTypeContextDescriptor; allocateBoxForExistentialIn(buffer: ValueBuffer): OpaqueValue; getFullTypeName(): string; static from(handle: NativePointer): TargetMetadata; toJSON(): { handle: NativePointer; name: string; }; } export declare class TargetValueMetadata extends TargetMetadata { #private; static readonly OFFSETOF_DESCRIPTION: number; get description(): NativePointer; getDescription(): TargetValueTypeDescriptor; } export declare class TargetClassMetadata extends TargetMetadata { #private; static readonly OFFSTETOF_DESCRIPTION: number; get description(): NativePointer; getDescription(): TargetClassDescriptor; } export declare class TargetStructMetadata extends TargetValueMetadata { getDescription(): TargetStructDescriptor; } export declare class TargetEnumMetadata extends TargetValueMetadata { getDescription(): TargetEnumDescriptor; } declare class TargetValueWitnessTable { protected handle: NativePointer; static readonly OFFSETOF_INTIALIZE_WITH_COPY = 16; static readonly OFFSETOF_SIZE = 64; static readonly OFFSETOF_STRIDE = 72; static readonly OFFSETOF_FLAGS = 80; static readonly OFFSETOF_EXTRA_INHABITANT_COUNT = 84; readonly initializeWithCopy: (dest: NativePointer, src: NativePointer, self: NativePointer) => NativePointer; readonly size: number; readonly stride: number; readonly flags: TargetValueWitnessFlags; readonly extraInhabitantCount: number; constructor(handle: NativePointer); isValueInline(): boolean; getSize(): number; getStride(): number; getAlignmentMask(): number; getFlags(): TargetValueWitnessFlags; getExtraInhabitantCount(): number; asEVWT(): EnumValueWitnessTable; } /** Implemented in include/Swift/Runtime/Metadata.h */ export declare class EnumValueWitnessTable extends TargetValueWitnessTable { static readonly OFFSETOF_GET_ENUM_TAG = 88; static readonly OFFSETOF_DESTRUCTIVE_INJECT_ENUM_TAG = 104; readonly getEnumTag: (object: NativePointer) => number; readonly destructiveInjectEnumTag: (object: NativePointer, tag: number) => void; constructor(handle: NativePointer); } export declare class TargetContextDescriptor { #private; readonly handle: NativePointer; static readonly OFFSETOF_FLAGS = 0; static readonly OFFSETOF_PARENT = 4; constructor(handle: NativePointer); get flags(): ContextDescriptorFlags; get parent(): RelativeIndirectablePointer; isGeneric(): boolean; getKind(): ContextDescriptorKind; getModuleContext(): TargetModuleContextDescriptor; } export declare class TargetModuleContextDescriptor extends TargetContextDescriptor { #private; private static OFFSETOF_NAME; get name(): string; } export declare class TargetTypeContextDescriptor extends TargetContextDescriptor { #private; static readonly OFFSETOF_NAME = 8; static readonly OFFSETOF_ACCESS_FUNCTION_PTR = 12; static readonly OFFSETOF_FIELDS = 16; getTypeContextDescriptorFlags(): TypeContextDescriptorFlags; get name(): string; get accessFunctionPointer(): NativePointer; get fields(): RelativeDirectPointer; isReflectable(): boolean; getAccessFunction(): NativeFunction; getFullTypeName(): string; } declare class TargetValueTypeDescriptor extends TargetTypeContextDescriptor { } export declare class TargetClassDescriptor extends TargetTypeContextDescriptor { static readonly OFFSETOF_TARGET_VTABLE_DESCRIPTOR_HEADER = 44; static readonly OFFSETOF_METHOD_DESCRIPTORS = 52; hasVTable(): boolean; hasResilientSuperClass(): boolean; hasOverrideTable(): boolean; hasSingletonMetadataInitialization(): boolean; hasForeignMetadataInitialization(): boolean; getVTableDescriptor(): VTableDescriptorHeader; getMethodDescriptors(): TargetMethodDescriptor[]; } declare class VTableDescriptorHeader { #private; private handle; static readonly OFFSETOF_VTABLE_OFFSET = 0; static readonly OFFSETOF_VTABLE_SIZE = 4; constructor(handle: NativePointer); get vtableSize(): number; } declare class TargetMethodDescriptor { #private; private handle; static readonly OFFSETOF_FLAGS = 0; static readonly OFFSETOF_IMPL = 4; static sizeof: number; constructor(handle: NativePointer); get flags(): MethodDescriptorFlags; get impl(): RelativeDirectPointer; } export declare class TargetStructDescriptor extends TargetTypeContextDescriptor { #private; static readonly OFFSETOF_NUM_FIELDS = 24; static readonly OFFSETOF_FIELD_OFFSET_VECTOR_OFFSET = 28; hasFieldOffsetVector(): boolean; get numFields(): number; get fieldOffsetVectorOffset(): number; } export declare class TargetEnumDescriptor extends TargetTypeContextDescriptor { #private; static readonly OFFSETOF_NUM_PAYLOAD_CASES_AND_PAYLOAD_SIZE_OFFSET = 20; static readonly OFFSETOF_NUM_EMPTY_CASES = 24; get numPayloadCasesAndPayloaadSizeOffset(): number; get numEmptyCases(): number; getNumPayloadCases(): number; getNumEmptyCases(): number; getNumCases(): number; isPayloadTag(tag: number): boolean; } export declare class TargetProtocolDescriptor extends TargetContextDescriptor { #private; static readonly OFFSETOF_NAME = 8; static readonly OFFSETOF_NUM_REQUIREMENTS = 16; constructor(handle: NativePointer); get name(): string; get numRequirements(): number; getProtocolContextDescriptorFlags(): ProtocolContextDescriptorFlags; getFullProtocolName(): string; } declare class TargetTypeReference { private readonly handle; constructor(handle: NativePointer); getTypeDescriptor(kind: TypeReferenceKind): NativePointer; } export declare class TargetProtocolConformanceDescriptor { #private; readonly handle: NativePointer; static readonly OFFSETOF_PROTOTCOL = 0; static readonly OFFSETOF_TYPE_REF = 4; static readonly OFFSTEOF_WITNESS_TABLE_PATTERN = 8; static readonly OFFSETOF_FLAGS = 12; static readonly OFFSETOF_WITNESS_TABLE_PATTERN = 16; constructor(handle: NativePointer); get protocol(): NativePointer; get typeRef(): TargetTypeReference; get witnessTablePattern(): NativePointer; get flags(): ConformanceFlags; getTypeKind(): TypeReferenceKind; getTypeDescriptor(): NativePointer; } declare class ContextDescriptorFlags { readonly value: number; constructor(value: number); getKind(): ContextDescriptorKind; isGeneric(): boolean; getIntValue(): number; getKindSpecificFlags(): number; } export {};