Skip to content

Commit 001dd2d

Browse files
committed
[lldb] Adapt error handling API in ReflectionContext.
1 parent f2bf1e4 commit 001dd2d

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

lldb/source/Plugins/LanguageRuntime/Swift/ReflectionContext.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ class TargetReflectionContext : public ReflectionContextInterface {
100100
std::shared_ptr<swift::reflection::MemoryReader> reader,
101101
SwiftMetadataCache *swift_metadata_cache)
102102
: m_reflection_ctx(reader, swift_metadata_cache, &m_forwader),
103-
m_type_converter(m_reflection_ctx.getBuilder()) {}
103+
m_type_converter(m_reflection_ctx.getBuilder()) {
104+
m_type_converter.enableErrorCache();
105+
}
104106

105107
std::optional<uint32_t> AddImage(
106108
llvm::function_ref<std::pair<swift::remote::RemoteRef<void>, uint64_t>(
@@ -180,8 +182,7 @@ class TargetReflectionContext : public ReflectionContextInterface {
180182
auto *rti =
181183
m_type_converter.getClassInstanceTypeInfo(&type_ref, *start, provider);
182184
if (!rti)
183-
return llvm::createStringError(
184-
"converter returned nullptr typeinfo but no error");
185+
return llvm::createStringError(m_type_converter.takeLastError());
185186
return *rti;
186187
}
187188

@@ -201,23 +202,21 @@ class TargetReflectionContext : public ReflectionContextInterface {
201202
provider ? provider->getId() : 0, ss.str());
202203
}
203204

204-
auto type_info = m_reflection_ctx.getTypeInfo(&type_ref, provider);
205-
if (!type_info) {
206-
std::stringstream ss;
207-
ss << "Could not find type info for ";
208-
type_ref.dump(ss);
209-
ss << " in reflection metadata";
210-
return llvm::createStringError(ss.str());
211-
}
205+
auto type_info_or_err = m_reflection_ctx.getTypeInfo(type_ref, provider);
206+
if (!type_info_or_err)
207+
return llvm::joinErrors(
208+
llvm::createStringError(
209+
"Could not find reflection metadata for type"),
210+
type_info_or_err.takeError());
212211

213212
if (log && log->GetVerbose()) {
214213
std::stringstream ss;
215-
type_info->dump(ss);
214+
type_info_or_err->dump(ss);
216215
LLDB_LOG(log,
217216
"[TargetReflectionContext::getTypeInfo] Found type info {0}",
218217
ss.str());
219218
}
220-
return *type_info;
219+
return *type_info_or_err;
221220
}
222221

223222
llvm::Expected<const swift::reflection::TypeInfo &> GetTypeInfoFromInstance(

0 commit comments

Comments
 (0)