mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Merge pull request #29345 from nate-chandler/generic-metadata-prespecialization-components/enums
Generic metadata prespecialization: enums
This commit is contained in:
@@ -1426,6 +1426,32 @@ struct TargetEnumMetadata : public TargetValueMetadata<Runtime> {
|
||||
return *asWords;
|
||||
}
|
||||
|
||||
bool isCanonicalStaticallySpecializedGenericMetadata() const {
|
||||
auto *description = getDescription();
|
||||
if (!description->isGeneric())
|
||||
return false;
|
||||
|
||||
auto *trailingFlags = getTrailingFlags();
|
||||
if (trailingFlags == nullptr)
|
||||
return false;
|
||||
|
||||
return trailingFlags->isCanonicalStaticSpecialization();
|
||||
}
|
||||
|
||||
const MetadataTrailingFlags *getTrailingFlags() const {
|
||||
auto description = getDescription();
|
||||
auto flags = description->getFullGenericContextHeader()
|
||||
.DefaultInstantiationPattern->PatternFlags;
|
||||
if (!flags.hasTrailingFlags())
|
||||
return nullptr;
|
||||
auto offset =
|
||||
getGenericArgumentOffset() +
|
||||
description->getFullGenericContextHeader().Base.getNumArguments() +
|
||||
(hasPayloadSize() ? 1 : 0);
|
||||
auto asWords = reinterpret_cast<const void *const *>(this);
|
||||
return reinterpret_cast<const MetadataTrailingFlags *>(asWords + offset);
|
||||
}
|
||||
|
||||
static constexpr int32_t getGenericArgumentOffset() {
|
||||
return sizeof(TargetEnumMetadata<Runtime>) / sizeof(StoredPointer);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user