Skip to content

Commit a397e1f

Browse files
authored
Merge pull request #3604 from augusto2112/tss-get-format
[lldb] Implement GetFormat in terms of GetTypeInfo
2 parents 00a5ff7 + a5c2622 commit a397e1f

File tree

6 files changed

+26
-100
lines changed

6 files changed

+26
-100
lines changed

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.cpp

Lines changed: 0 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -6339,96 +6339,6 @@ lldb::Encoding SwiftASTContext::GetEncoding(opaque_compiler_type_t type,
63396339
return lldb::eEncodingInvalid;
63406340
}
63416341

6342-
lldb::Format SwiftASTContext::GetFormat(opaque_compiler_type_t type) {
6343-
VALID_OR_RETURN_CHECK_TYPE(type, lldb::eFormatInvalid);
6344-
6345-
swift::CanType swift_can_type(GetCanonicalSwiftType(type));
6346-
6347-
const swift::TypeKind type_kind = swift_can_type->getKind();
6348-
switch (type_kind) {
6349-
case swift::TypeKind::BuiltinDefaultActorStorage:
6350-
case swift::TypeKind::BuiltinExecutor:
6351-
case swift::TypeKind::BuiltinJob:
6352-
case swift::TypeKind::BuiltinRawUnsafeContinuation:
6353-
case swift::TypeKind::Error:
6354-
case swift::TypeKind::Module:
6355-
case swift::TypeKind::InOut:
6356-
case swift::TypeKind::VariadicSequence:
6357-
case swift::TypeKind::Placeholder:
6358-
case swift::TypeKind::SILBlockStorage:
6359-
case swift::TypeKind::SILBox:
6360-
case swift::TypeKind::SILFunction:
6361-
case swift::TypeKind::SILToken:
6362-
case swift::TypeKind::TypeVariable:
6363-
case swift::TypeKind::Unresolved:
6364-
break;
6365-
case swift::TypeKind::BuiltinIntegerLiteral:
6366-
case swift::TypeKind::BuiltinInteger:
6367-
return eFormatDecimal; // TODO: detect if an integer is unsigned
6368-
case swift::TypeKind::BuiltinFloat:
6369-
return eFormatFloat; // TODO: detect if an integer is unsigned
6370-
6371-
case swift::TypeKind::BuiltinRawPointer:
6372-
case swift::TypeKind::BuiltinNativeObject:
6373-
case swift::TypeKind::BuiltinUnsafeValueBuffer:
6374-
case swift::TypeKind::BuiltinBridgeObject:
6375-
case swift::TypeKind::PrimaryArchetype:
6376-
case swift::TypeKind::OpenedArchetype:
6377-
case swift::TypeKind::OpaqueTypeArchetype:
6378-
case swift::TypeKind::NestedArchetype:
6379-
case swift::TypeKind::GenericTypeParam:
6380-
case swift::TypeKind::DependentMember:
6381-
return eFormatAddressInfo;
6382-
6383-
// Classes are always pointers in swift.
6384-
case swift::TypeKind::Class:
6385-
case swift::TypeKind::BoundGenericClass:
6386-
return eFormatHex;
6387-
6388-
case swift::TypeKind::BuiltinVector:
6389-
break;
6390-
case swift::TypeKind::Tuple:
6391-
break;
6392-
case swift::TypeKind::UnmanagedStorage:
6393-
case swift::TypeKind::UnownedStorage:
6394-
case swift::TypeKind::WeakStorage:
6395-
return ToCompilerType(swift_can_type->getReferenceStorageReferent())
6396-
.GetFormat();
6397-
break;
6398-
6399-
case swift::TypeKind::Enum:
6400-
case swift::TypeKind::BoundGenericEnum:
6401-
return eFormatUnsigned;
6402-
6403-
case swift::TypeKind::GenericFunction:
6404-
case swift::TypeKind::Function:
6405-
return lldb::eFormatAddressInfo;
6406-
6407-
case swift::TypeKind::Struct:
6408-
case swift::TypeKind::Protocol:
6409-
case swift::TypeKind::Metatype:
6410-
case swift::TypeKind::ProtocolComposition:
6411-
break;
6412-
case swift::TypeKind::LValue:
6413-
return lldb::eFormatHex;
6414-
case swift::TypeKind::UnboundGeneric:
6415-
case swift::TypeKind::BoundGenericStruct:
6416-
case swift::TypeKind::ExistentialMetatype:
6417-
case swift::TypeKind::DynamicSelf:
6418-
break;
6419-
6420-
case swift::TypeKind::Optional:
6421-
case swift::TypeKind::TypeAlias:
6422-
case swift::TypeKind::Paren:
6423-
case swift::TypeKind::Dictionary:
6424-
case swift::TypeKind::ArraySlice:
6425-
assert(false && "Not a canonical type");
6426-
break;
6427-
}
6428-
// We don't know hot to display this type.
6429-
return lldb::eFormatBytes;
6430-
}
6431-
64326342
uint32_t SwiftASTContext::GetNumChildren(opaque_compiler_type_t type,
64336343
bool omit_empty_base_classes,
64346344
const ExecutionContext *exe_ctx) {

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -614,8 +614,6 @@ class SwiftASTContext : public TypeSystemSwift {
614614
lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
615615
uint64_t &count) override;
616616

617-
lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
618-
619617
uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
620618
bool omit_empty_base_classes,
621619
const ExecutionContext *exe_ctx) override;

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwift.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,27 @@ uint32_t TypeSystemSwift::GetIndexOfChildWithName(
122122
type, name, exe_ctx, omit_empty_base_classes, child_indexes);
123123
return num_child_indexes == 1 ? child_indexes.front() : UINT32_MAX;
124124
}
125+
126+
lldb::Format TypeSystemSwift::GetFormat(opaque_compiler_type_t type) {
127+
auto swift_flags = GetTypeInfo(type, nullptr);
128+
129+
if (swift_flags & eTypeIsInteger)
130+
return eFormatDecimal;
131+
132+
if (swift_flags & eTypeIsFloat)
133+
return eFormatFloat;
134+
135+
if (swift_flags & eTypeIsPointer || swift_flags & eTypeIsClass)
136+
return eFormatAddressInfo;
137+
138+
if (swift_flags & eTypeIsClass)
139+
return eFormatHex;
140+
141+
if (swift_flags & eTypeIsGeneric)
142+
return eFormatUnsigned;
143+
144+
if (swift_flags & eTypeIsFuncPrototype || swift_flags & eTypeIsBlock)
145+
return eFormatAddressInfo;
146+
147+
return eFormatBytes;
148+
}

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwift.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ class TypeSystemSwift : public TypeSystem {
166166
bool show_types, bool show_summary, bool verbose,
167167
uint32_t depth) override;
168168

169+
lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
170+
169171
/// Unavailable hardcoded functions that don't make sense for Swift.
170172
/// \{
171173
ConstString DeclContextGetName(void *opaque_decl_ctx) override { return {}; }

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2514,13 +2514,6 @@ lldb::Encoding TypeSystemSwiftTypeRef::GetEncoding(opaque_compiler_type_t type,
25142514
(ReconstructType(type), count));
25152515
}
25162516

2517-
lldb::Format TypeSystemSwiftTypeRef::GetFormat(opaque_compiler_type_t type) {
2518-
LLDB_SCOPED_TIMER();
2519-
if (auto *swift_ast_context = GetSwiftASTContext())
2520-
return swift_ast_context->GetFormat(ReconstructType(type));
2521-
return {};
2522-
}
2523-
25242517
uint32_t
25252518
TypeSystemSwiftTypeRef::GetNumChildren(opaque_compiler_type_t type,
25262519
bool omit_empty_base_classes,

lldb/source/Plugins/TypeSystem/Swift/TypeSystemSwiftTypeRef.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,6 @@ class TypeSystemSwiftTypeRef : public TypeSystemSwift {
164164
ExecutionContextScope *exe_scope) override;
165165
lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type,
166166
uint64_t &count) override;
167-
lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
168167
uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
169168
bool omit_empty_base_classes,
170169
const ExecutionContext *exe_ctx) override;

0 commit comments

Comments
 (0)