Skip to content

Commit de75f0a

Browse files
authored
Merge pull request #71769 from augusto2112/gen-class-enum
Generate full debug info for generic enums and classes, and emit spare bits mask of MPE enums
2 parents cdf1da8 + 3938492 commit de75f0a

File tree

7 files changed

+325
-82
lines changed

7 files changed

+325
-82
lines changed

include/swift/RemoteInspection/DescriptorFinder.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,26 @@ struct FieldDescriptorBase {
9393
getFieldRecords() = 0;
9494
};
9595

96+
struct MultiPayloadEnumDescriptorBase {
97+
virtual ~MultiPayloadEnumDescriptorBase(){};
98+
99+
virtual llvm::StringRef getMangledTypeName() = 0;
100+
101+
virtual uint32_t getContentsSizeInWords() const = 0;
102+
103+
virtual size_t getSizeInBytes() const = 0;
104+
105+
virtual uint32_t getFlags() const = 0;
106+
107+
virtual bool usesPayloadSpareBits() const = 0;
108+
109+
virtual uint32_t getPayloadSpareBitMaskByteOffset() const = 0;
110+
111+
virtual uint32_t getPayloadSpareBitMaskByteCount() const = 0;
112+
113+
virtual const uint8_t *getPayloadSpareBits() const = 0;
114+
115+
};
96116
/// Interface for finding type descriptors. Implementors may provide descriptors
97117
/// that live inside or outside reflection metadata.
98118
struct DescriptorFinder {
@@ -104,6 +124,9 @@ struct DescriptorFinder {
104124

105125
virtual std::unique_ptr<FieldDescriptorBase>
106126
getFieldDescriptor(const TypeRef *TR) = 0;
127+
128+
virtual std::unique_ptr<MultiPayloadEnumDescriptorBase>
129+
getMultiPayloadEnumDescriptor(const TypeRef *TR) = 0;
107130
};
108131

109132
} // namespace reflection

include/swift/RemoteInspection/TypeRefBuilder.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,8 @@ class TypeRefBuilder {
490490
ClosureContextInfo getClosureContextInfo(RemoteRef<CaptureDescriptor> CD);
491491

492492
/// Get the multipayload enum projection information for a given TR
493-
RemoteRef<MultiPayloadEnumDescriptor>
494-
getMultiPayloadEnumInfo(const TypeRef *TR);
493+
std::unique_ptr<MultiPayloadEnumDescriptorBase>
494+
getMultiPayloadEnumDescriptor(const TypeRef *TR) override;
495495

496496
const TypeRef *lookupTypeWitness(const std::string &MangledTypeName,
497497
const std::string &Member,
@@ -515,6 +515,8 @@ class TypeRefBuilder {
515515
/// Load unsubstituted field types for a nominal type.
516516
RemoteRef<FieldDescriptor> getFieldTypeInfo(const TypeRef *TR);
517517

518+
RemoteRef<MultiPayloadEnumDescriptor> getMultiPayloadEnumInfo(const TypeRef *TR);
519+
518520
void populateFieldTypeInfoCacheWithReflectionAtIndex(size_t Index);
519521

520522
llvm::Optional<RemoteRef<FieldDescriptor>>
@@ -1565,15 +1567,16 @@ class TypeRefBuilder {
15651567
}
15661568

15671569
/// Get the multipayload enum projection information for a given TR
1568-
RemoteRef<MultiPayloadEnumDescriptor>
1569-
getMultiPayloadEnumInfo(const TypeRef *TR) {
1570-
return RDF.getMultiPayloadEnumInfo(TR);
1571-
}
1570+
std::unique_ptr<MultiPayloadEnumDescriptorBase>
1571+
getMultiPayloadEnumDescriptor(const TypeRef *TR);
15721572

15731573
private:
15741574
/// Get the primitive type lowering for a builtin type.
15751575
RemoteRef<BuiltinTypeDescriptor> getBuiltinTypeInfo(const TypeRef *TR);
15761576

1577+
RemoteRef<MultiPayloadEnumDescriptor>
1578+
getMultiPayloadEnumInfo(const TypeRef *TR);
1579+
15771580
llvm::Optional<uint64_t> multiPayloadEnumPointerMask;
15781581

15791582
public:

0 commit comments

Comments
 (0)