Merge pull request #29345 from nate-chandler/generic-metadata-prespecialization-components/enums

Generic metadata prespecialization: enums
This commit is contained in:
nate-chandler
2020-02-12 13:09:59 -08:00
committed by GitHub
40 changed files with 5931 additions and 70 deletions

View File

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