Skip to content

Commit 85ba17b

Browse files
committed
Reserve a larger range for enumerated metadata kinds.
0...128 is pretty meager, and it would be pretty embarrassing to run out.
1 parent 4b06bb1 commit 85ba17b

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

include/swift/ABI/MetadataKind.def

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,8 @@ METADATAKIND(HeapGenericLocalVariable, 65)
8383
/// A native error object.
8484
METADATAKIND(ErrorObject, 128)
8585

86-
/// All metadata kinds in this range are non-isa metadata. Any "metadata" values
87-
/// outside of this range are objective-c class isa pointers. These isa pointers
88-
/// are of course not "true" swift metadata.
89-
ABSTRACTMETADATAKIND(NonIsaMetadata, Class, ErrorObject)
86+
// getEnumeratedMetadataKind assumes that all the enumerated values here
87+
// will be <= LastEnumeratedMetadataKind.
9088

9189
#undef ABSTRACTMETADATAKIND
9290
#undef NOMINALTYPEMETADATAKIND

include/swift/ABI/MetadataValues.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ enum class MetadataKind : uint32_t {
3939
#include "MetadataKind.def"
4040
};
4141

42+
const unsigned LastEnumeratedMetadataKind = 2047;
43+
4244
/// Try to translate the 'isa' value of a type/heap metadata into a value
4345
/// of the MetadataKind enum.
44-
template <typename StoredPointer>
45-
MetadataKind getEnumeratedMetadataKind(StoredPointer kind) {
46-
if (kind > static_cast<StoredPointer>(MetadataKind::NonIsaMetadata_End) ||
47-
kind < static_cast<StoredPointer>(MetadataKind::NonIsaMetadata_Start))
46+
inline MetadataKind getEnumeratedMetadataKind(uint64_t kind) {
47+
if (kind > LastEnumeratedMetadataKind)
4848
return MetadataKind::Class;
4949
return MetadataKind(kind);
5050
}

0 commit comments

Comments
 (0)