Skip to content

Commit d709fba

Browse files
Merge pull request #1466 from adrian-prantl/GetTypeInfo
Implement TypeSystemSwiftTypeRef::GetTypeInfo() (NFC)
2 parents 6019688 + 5873328 commit d709fba

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
@@ -772,6 +772,10 @@ SwiftLanguage::GetHardcodedSynthetics() {
772772
CompilerType type(valobj.GetCompilerType());
773773
Flags type_flags(type.GetTypeInfo());
774774
if (type_flags.AllSet(eTypeIsSwift | eTypeIsEnumeration)) {
775+
// FIXME: The classification of clang-imported enums may
776+
// change based on whether a Swift module is present or not.
777+
if (!valobj.GetValueAsCString())
778+
return nullptr;
775779
if (!swift_enum_synth)
776780
swift_enum_synth = lldb::SyntheticChildrenSP(new CXXSyntheticChildren(
777781
SyntheticChildren::Flags()

lldb/source/Symbol/SwiftASTContext.cpp

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

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

0 commit comments

Comments
 (0)