Skip to content

Generate full debug info for generic enums and classes, and emit spare bits mask of MPE enums #71769

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Feb 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions include/swift/RemoteInspection/DescriptorFinder.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,26 @@ struct FieldDescriptorBase {
getFieldRecords() = 0;
};

struct MultiPayloadEnumDescriptorBase {
virtual ~MultiPayloadEnumDescriptorBase(){};

virtual llvm::StringRef getMangledTypeName() = 0;

virtual uint32_t getContentsSizeInWords() const = 0;

virtual size_t getSizeInBytes() const = 0;

virtual uint32_t getFlags() const = 0;

virtual bool usesPayloadSpareBits() const = 0;

virtual uint32_t getPayloadSpareBitMaskByteOffset() const = 0;

virtual uint32_t getPayloadSpareBitMaskByteCount() const = 0;

virtual const uint8_t *getPayloadSpareBits() const = 0;

};
/// Interface for finding type descriptors. Implementors may provide descriptors
/// that live inside or outside reflection metadata.
struct DescriptorFinder {
Expand All @@ -104,6 +124,9 @@ struct DescriptorFinder {

virtual std::unique_ptr<FieldDescriptorBase>
getFieldDescriptor(const TypeRef *TR) = 0;

virtual std::unique_ptr<MultiPayloadEnumDescriptorBase>
getMultiPayloadEnumDescriptor(const TypeRef *TR) = 0;
};

} // namespace reflection
Expand Down
15 changes: 9 additions & 6 deletions include/swift/RemoteInspection/TypeRefBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -490,8 +490,8 @@ class TypeRefBuilder {
ClosureContextInfo getClosureContextInfo(RemoteRef<CaptureDescriptor> CD);

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

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

RemoteRef<MultiPayloadEnumDescriptor> getMultiPayloadEnumInfo(const TypeRef *TR);

void populateFieldTypeInfoCacheWithReflectionAtIndex(size_t Index);

llvm::Optional<RemoteRef<FieldDescriptor>>
Expand Down Expand Up @@ -1565,15 +1567,16 @@ class TypeRefBuilder {
}

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

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

RemoteRef<MultiPayloadEnumDescriptor>
getMultiPayloadEnumInfo(const TypeRef *TR);

llvm::Optional<uint64_t> multiPayloadEnumPointerMask;

public:
Expand Down
Loading