Skip to content

Commit 7449a58

Browse files
committed
Implement TypeSystemSwiftTypeRef::GetTypeInf() (NFC)
This should enable a lot of additional functionality. (cherry picked from commit 5873328) (cherry picked from commit aafa942)
1 parent 1478fb4 commit 7449a58

File tree

4 files changed

+406
-78
lines changed

4 files changed

+406
-78
lines changed

lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,10 @@ SwiftLanguage::GetHardcodedSynthetics() {
774774
CompilerType type(valobj.GetCompilerType());
775775
Flags type_flags(type.GetTypeInfo());
776776
if (type_flags.AllSet(eTypeIsSwift | eTypeIsEnumeration)) {
777+
// FIXME: The classification of clang-imported enums may
778+
// change based on whether a Swift module is present or not.
779+
if (!valobj.GetValueAsCString())
780+
return nullptr;
777781
if (!swift_enum_synth)
778782
swift_enum_synth = lldb::SyntheticChildrenSP(new CXXSyntheticChildren(
779783
SyntheticChildren::Flags()

lldb/source/Symbol/SwiftASTContext.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5512,19 +5512,22 @@ SwiftASTContext::GetTypeInfo(opaque_compiler_type_t type,
55125512
LLVM_FALLTHROUGH;
55135513
case swift::TypeKind::Enum: {
55145514
SwiftEnumDescriptor *cached_enum_info = GetCachedEnumInfo(type);
5515-
if (cached_enum_info) {
5516-
if (cached_enum_info->GetNumElementsWithPayload() == 0)
5517-
swift_flags |= eTypeHasValue | eTypeIsEnumeration;
5518-
else
5519-
swift_flags |= eTypeHasValue | eTypeIsEnumeration | eTypeHasChildren;
5520-
} else
5515+
if (cached_enum_info)
5516+
swift_flags |= eTypeHasValue | eTypeIsEnumeration | eTypeHasChildren;
5517+
else
55215518
swift_flags |= eTypeIsEnumeration;
55225519
} break;
55235520

55245521
case swift::TypeKind::BoundGenericStruct:
55255522
swift_flags |= eTypeIsGeneric | eTypeIsBound;
55265523
LLVM_FALLTHROUGH;
55275524
case swift::TypeKind::Struct:
5525+
if (auto *ndecl = swift_can_type.getAnyNominal())
5526+
if (llvm::dyn_cast_or_null<clang::EnumDecl>(ndecl->getClangDecl())) {
5527+
swift_flags |= eTypeHasChildren | eTypeIsEnumeration | eTypeHasValue;
5528+
break;
5529+
}
5530+
55285531
swift_flags |= eTypeHasChildren | eTypeIsStructUnion;
55295532
break;
55305533

0 commit comments

Comments
 (0)