Skip to content

Commit c2c463a

Browse files
committed
[LLDB] Simplify task formatter typesystem creation
and add missing nullptr checks. In this case there is no need to create a new scratch typesystem, we can just reuse the ValueObject's typesystem.
1 parent d604b9b commit c2c463a

File tree

1 file changed

+27
-37
lines changed

1 file changed

+27
-37
lines changed

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

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -796,19 +796,7 @@ static std::string mangledTypenameForTasksTuple(size_t count) {
796796
class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
797797
public:
798798
TaskSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp)
799-
: SyntheticChildrenFrontEnd(*valobj_sp.get()) {
800-
auto target_sp = m_backend.GetTargetSP();
801-
auto ts_or_err =
802-
target_sp->GetScratchTypeSystemForLanguage(eLanguageTypeSwift);
803-
if (auto err = ts_or_err.takeError()) {
804-
LLDB_LOG_ERROR(GetLog(LLDBLog::DataFormatters | LLDBLog::Types),
805-
std::move(err),
806-
"could not get Swift type system for Task synthetic "
807-
"provider: {0}");
808-
return;
809-
}
810-
m_ts = llvm::dyn_cast_or_null<TypeSystemSwiftTypeRef>(ts_or_err->get());
811-
}
799+
: SyntheticChildrenFrontEnd(*valobj_sp.get()) {}
812800

813801
constexpr static StringLiteral TaskChildren[] = {
814802
// clang-format off
@@ -840,11 +828,19 @@ class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
840828
}
841829

842830
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override {
843-
auto target_sp = m_backend.GetTargetSP();
831+
CompilerType type = m_backend.GetCompilerType();
832+
auto ts = type.GetTypeSystem().dyn_cast_or_null<TypeSystemSwift>();
833+
if (!ts) {
834+
LLDB_LOG(
835+
GetLog(LLDBLog::DataFormatters | LLDBLog::Types),
836+
"could not get Swift type system for Task synthetic provider: {0}",
837+
type.GetMangledTypeName());
838+
return {};
839+
}
844840

845841
// TypeMangling for "Swift.Bool"
846842
CompilerType bool_type =
847-
m_ts->GetTypeFromMangledTypename(ConstString("$sSbD"));
843+
ts->GetTypeFromMangledTypename(ConstString("$sSbD"));
848844

849845
#define RETURN_CHILD(FIELD, NAME, TYPE) \
850846
if (!FIELD) { \
@@ -861,7 +857,7 @@ class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
861857
if (!m_address_sp) {
862858
// TypeMangling for "Swift.UnsafeRawPointer"
863859
CompilerType raw_pointer_type =
864-
m_ts->GetTypeFromMangledTypename(ConstString("$sSVD"));
860+
ts->GetTypeFromMangledTypename(ConstString("$sSVD"));
865861

866862
addr_t value = m_task_ptr;
867863
if (auto process_sp = m_backend.GetProcessSP())
@@ -877,13 +873,13 @@ class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
877873
case 1: {
878874
// TypeMangling for "Swift.UInt64"
879875
CompilerType uint64_type =
880-
m_ts->GetTypeFromMangledTypename(ConstString("$ss6UInt64VD"));
876+
ts->GetTypeFromMangledTypename(ConstString("$ss6UInt64VD"));
881877
RETURN_CHILD(m_id_sp, id, uint64_type);
882878
}
883879
case 2: {
884880
// TypeMangling for "Swift.TaskPriority"
885881
CompilerType priority_type =
886-
m_ts->GetTypeFromMangledTypename(ConstString("$sScPD"));
882+
ts->GetTypeFromMangledTypename(ConstString("$sScPD"));
887883
RETURN_CHILD(m_enqueue_priority_sp, enqueuePriority, priority_type);
888884
}
889885
case 3: {
@@ -894,7 +890,7 @@ class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
894890

895891
// TypeMangling for "Swift.Optional<Swift.UnsafeRawPointer>"
896892
CompilerType raw_pointer_type =
897-
m_ts->GetTypeFromMangledTypename(ConstString("$sSVSgD"));
893+
ts->GetTypeFromMangledTypename(ConstString("$sSVSgD"));
898894

899895
addr_t parent_addr = 0;
900896
if (m_task_info.isChildTask) {
@@ -937,7 +933,7 @@ class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
937933
std::string mangled_typename =
938934
mangledTypenameForTasksTuple(tasks.size());
939935
CompilerType tasks_tuple_type =
940-
m_ts->GetTypeFromMangledTypename(ConstString(mangled_typename));
936+
ts->GetTypeFromMangledTypename(ConstString(mangled_typename));
941937
DataExtractor data{tasks.data(), tasks.size() * sizeof(task_type),
942938
endian::InlHostByteOrder(), sizeof(void *)};
943939
m_child_tasks_sp = ValueObject::CreateValueObjectFromData(
@@ -1026,7 +1022,6 @@ class TaskSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
10261022
return {};
10271023
}
10281024

1029-
TypeSystemSwiftTypeRef *m_ts = nullptr;
10301025
addr_t m_task_ptr = LLDB_INVALID_ADDRESS;
10311026
ReflectionContextInterface::AsyncTaskInfo m_task_info;
10321027
ValueObjectSP m_address_sp;
@@ -1418,20 +1413,6 @@ class ActorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
14181413
SwiftLanguageRuntime::FindConcurrencyDebugVersion(*process_sp);
14191414

14201415
m_is_supported_target = is_64bit && concurrency_version.value_or(0) == 1;
1421-
if (!m_is_supported_target)
1422-
return;
1423-
1424-
auto target_sp = m_backend.GetTargetSP();
1425-
auto ts_or_err =
1426-
target_sp->GetScratchTypeSystemForLanguage(eLanguageTypeSwift);
1427-
if (auto err = ts_or_err.takeError()) {
1428-
LLDB_LOG_ERROR(GetLog(LLDBLog::DataFormatters | LLDBLog::Types),
1429-
std::move(err),
1430-
"could not get Swift type system for Task synthetic "
1431-
"provider: {0}");
1432-
return;
1433-
}
1434-
m_ts = llvm::dyn_cast_or_null<TypeSystemSwiftTypeRef>(ts_or_err->get());
14351416
}
14361417

14371418
llvm::Expected<uint32_t> CalculateNumChildren() override {
@@ -1442,11 +1423,21 @@ class ActorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
14421423
if (!m_is_supported_target || idx != 0)
14431424
return {};
14441425

1426+
CompilerType type = m_backend.GetCompilerType();
1427+
auto ts = type.GetTypeSystem().dyn_cast_or_null<TypeSystemSwift>();
1428+
if (!ts) {
1429+
LLDB_LOG(
1430+
GetLog(LLDBLog::DataFormatters | LLDBLog::Types),
1431+
"could not get Swift type system for Actor synthetic provider: {0}",
1432+
type.GetMangledTypeName());
1433+
return {};
1434+
}
1435+
14451436
if (!m_unprioritised_jobs_sp) {
14461437
std::string mangled_typename =
14471438
mangledTypenameForTasksTuple(m_job_addrs.size());
14481439
CompilerType tasks_tuple_type =
1449-
m_ts->GetTypeFromMangledTypename(ConstString(mangled_typename));
1440+
ts->GetTypeFromMangledTypename(ConstString(mangled_typename));
14501441
DataExtractor data{m_job_addrs.data(),
14511442
m_job_addrs.size() * sizeof(addr_t),
14521443
endian::InlHostByteOrder(), sizeof(void *)};
@@ -1556,7 +1547,6 @@ class ActorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
15561547

15571548
private:
15581549
bool m_is_supported_target = false;
1559-
TypeSystemSwiftTypeRef *m_ts = nullptr;
15601550
std::vector<addr_t> m_job_addrs;
15611551
CompilerType m_task_type;
15621552
ValueObjectSP m_unprioritised_jobs_sp;

0 commit comments

Comments
 (0)