static void DumpGenericInfo(TextWriter writer, SwiftNominalTypeDescriptor desc) { if (!desc.IsGeneric()) { return; } writer.WriteLine($"Generic parameters: {desc.GetGenericParamCount ()} ({desc.GetPrimaryGenericParamCount ()} primary)"); }
internal static unsafe SwiftMetatype ExistentialContainerMetadata(SwiftNominalTypeDescriptor descriptor) { var arr = stackalloc IntPtr [1]; arr [0] = descriptor.Handle; var result = swift_getExistentialTypeMetadata(1, IntPtr.Zero, 1, new IntPtr(arr)); return(new SwiftMetatype(result)); }
static string NameFromClassObject(SwiftClassObject classObj) { if (classObj.IsNominalTypeDescriptorValid) { SwiftNominalTypeDescriptor nom = classObj.NominalTypeDescriptor; return(nom.GetMangledName()); } else { return(null); } }
static void DumpNominalTypeDescriptor(TextWriter writer, SwiftNominalTypeDescriptor desc) { // In this code, desc.GetKind() will always be for a class, but you never know. switch (desc.GetKind()) { case NominalTypeDescriptorKind.Class: DumpClassTypeDescriptor(writer, desc); break; case NominalTypeDescriptorKind.Enum: DumpEnumTypeDescriptor(writer, desc); break; case NominalTypeDescriptorKind.Struct: DumpStructTypeDescriptor(writer, desc); break; case NominalTypeDescriptorKind.None: writer.WriteLine("Unknown descriptor type."); break; } }
public static SwiftProtocolWitnessTable ConformsToSwiftProtocol(SwiftMetatype metadata, SwiftNominalTypeDescriptor protocolDescriptor) { return(new SwiftProtocolWitnessTable(swift_conformsToProtocol(metadata, protocolDescriptor))); }
static extern IntPtr swift_conformsToProtocol(SwiftMetatype metadata, SwiftNominalTypeDescriptor protocolDescriptor);
static void DumpStructTypeDescriptor(TextWriter writer, SwiftNominalTypeDescriptor desc) { DumpLabeledList(writer, "Fields", desc.GetFieldNames()); DumpGenericInfo(writer, desc); }
static void DumpEnumTypeDescriptor(TextWriter writer, SwiftNominalTypeDescriptor desc) { DumpLabeledList(writer, $"Cases ({desc.GetPayloadCaseCount ()} with payloads, {desc.GetEmptyCaseCount ()} empty)", desc.GetCaseNames()); DumpGenericInfo(writer, desc); }