static void _addImageProtocolConformancesBlock(const uint8_t *conformances, size_t conformancesSize) { assert(conformancesSize % sizeof(ProtocolConformanceRecord) == 0 && "weird-sized conformances section?!"); // If we have a section, enqueue the conformances for lookup. auto recordsBegin = reinterpret_cast<const ProtocolConformanceRecord*>(conformances); auto recordsEnd = reinterpret_cast<const ProtocolConformanceRecord*> (conformances + conformancesSize); // Conformance cache should always be sufficiently initialized by this point. _registerProtocolConformances(Conformances.unsafeGetAlreadyInitialized(), recordsBegin, recordsEnd); }
static void _addImageTypeMetadataRecordsBlock(const uint8_t *records, size_t recordsSize) { assert(recordsSize % sizeof(TypeMetadataRecord) == 0 && "weird-sized type metadata section?!"); // If we have a section, enqueue the type metadata for lookup. auto recordsBegin = reinterpret_cast<const TypeMetadataRecord*>(records); auto recordsEnd = reinterpret_cast<const TypeMetadataRecord*> (records + recordsSize); // type metadata cache should always be sufficiently initialized by this point. _registerTypeMetadataRecords(TypeMetadataRecords.unsafeGetAlreadyInitialized(), recordsBegin, recordsEnd); }
void swift::addImageTypeMetadataRecordBlockCallback(const void *records, uintptr_t recordsSize) { assert(recordsSize % sizeof(TypeMetadataRecord) == 0 && "weird-sized type metadata section?!"); // If we have a section, enqueue the type metadata for lookup. auto recordBytes = reinterpret_cast<const char *>(records); auto recordsBegin = reinterpret_cast<const TypeMetadataRecord*>(records); auto recordsEnd = reinterpret_cast<const TypeMetadataRecord*>(recordBytes + recordsSize); // Type metadata cache should always be sufficiently initialized by this // point. Attempting to go through get() may also lead to an infinite loop, // since we register records during the initialization of // TypeMetadataRecords. _registerTypeMetadataRecords(TypeMetadataRecords.unsafeGetAlreadyInitialized(), recordsBegin, recordsEnd); }