From 54a1c8213c900abd04e7d7a7dac3e1b73868005f Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 19 Dec 2025 13:48:20 -0500 Subject: [PATCH] Add lldb dumping for RequireImplsId and RequireImplsBlockId (#6524) The dump of a block looks like: ``` (lldb) dump context require_impls_block_id require_block60000001 - require0: {self_id: inst60000019, facet_type_inst_id: inst6000001D, extend_self: true, parent_scope: name_scope60000002} ``` The dump of an individual RequireImplsId is shown above for `require0`. --- scripts/lldbinit.py | 2 ++ toolchain/check/dump.cpp | 12 ++++++++++++ toolchain/sem_ir/dump.cpp | 31 +++++++++++++++++++++++++++++++ toolchain/sem_ir/dump.h | 3 +++ toolchain/sem_ir/require_impls.h | 2 +- 5 files changed, 49 insertions(+), 1 deletion(-) diff --git a/scripts/lldbinit.py b/scripts/lldbinit.py index ea7242c68794..87f7c22036dc 100644 --- a/scripts/lldbinit.py +++ b/scripts/lldbinit.py @@ -93,6 +93,8 @@ Example usage: "name": "SemIR::MakeNameId", "name_scope": "SemIR::MakeNameScopeId", "identified_facet_type": "SemIR::MakeIdentifiedFacetTypeId", + "require_block": "SemIR::MakeRequireImplsBlockId", + "require": "SemIR::MakeRequireImplsId", "specific": "SemIR::MakeSpecificId", "specific_interface": "SemIR::MakeSpecificInterfaceId", "struct_type_fields": "SemIR::MakeStructTypeFieldsId", diff --git a/toolchain/check/dump.cpp b/toolchain/check/dump.cpp index 4257ace96f92..d987646f7015 100644 --- a/toolchain/check/dump.cpp +++ b/toolchain/check/dump.cpp @@ -121,6 +121,18 @@ LLVM_DUMP_METHOD static auto Dump(const Context& context, return SemIR::Dump(context.sem_ir(), named_constraint_id); } +LLVM_DUMP_METHOD static auto Dump( + const Context& context, SemIR::RequireImplsBlockId require_impls_block_id) + -> std::string { + return SemIR::Dump(context.sem_ir(), require_impls_block_id); +} + +LLVM_DUMP_METHOD static auto Dump(const Context& context, + SemIR::RequireImplsId require_impls_id) + -> std::string { + return SemIR::Dump(context.sem_ir(), require_impls_id); +} + LLVM_DUMP_METHOD static auto Dump(const Context& context, SemIR::SpecificId specific_id) -> std::string { diff --git a/toolchain/sem_ir/dump.cpp b/toolchain/sem_ir/dump.cpp index d8bc4931f73d..63e59645d7d1 100644 --- a/toolchain/sem_ir/dump.cpp +++ b/toolchain/sem_ir/dump.cpp @@ -377,6 +377,30 @@ LLVM_DUMP_METHOD auto Dump(const File& file, return out.TakeStr(); } +LLVM_DUMP_METHOD auto Dump(const File& file, + RequireImplsBlockId require_impls_block_id) + -> std::string { + RawStringOstream out; + out << require_impls_block_id; + if (require_impls_block_id.has_value()) { + for (auto require_id : + file.require_impls_blocks().Get(require_impls_block_id)) { + out << "\n - " << Dump(file, require_id); + } + } + return out.TakeStr(); +} + +LLVM_DUMP_METHOD auto Dump(const File& file, RequireImplsId require_impls_id) + -> std::string { + RawStringOstream out; + out << require_impls_id; + if (require_impls_id.has_value()) { + out << ": " << file.require_impls().Get(require_impls_id); + } + return out.TakeStr(); +} + LLVM_DUMP_METHOD auto Dump(const File& file, SpecificId specific_id) -> std::string { RawStringOstream out; @@ -483,6 +507,13 @@ LLVM_DUMP_METHOD static auto MakeNamedConstraintId(int id) -> NamedConstraintId { return NamedConstraintId(id); } +LLVM_DUMP_METHOD static auto MakeRequireImplsBlockId(int id) + -> RequireImplsBlockId { + return RequireImplsBlockId(id); +} +LLVM_DUMP_METHOD static auto MakeRequireImplsId(int id) -> RequireImplsId { + return RequireImplsId(id); +} LLVM_DUMP_METHOD static auto MakeSpecificId(int id) -> SpecificId { return SpecificId(id); } diff --git a/toolchain/sem_ir/dump.h b/toolchain/sem_ir/dump.h index d51718b51954..bedae7f56cc3 100644 --- a/toolchain/sem_ir/dump.h +++ b/toolchain/sem_ir/dump.h @@ -37,6 +37,9 @@ auto Dump(const File& file, NameId name_id) -> std::string; auto Dump(const File& file, NameScopeId name_scope_id) -> std::string; auto Dump(const File& file, NamedConstraintId named_constraint_id) -> std::string; +auto Dump(const File& file, RequireImplsBlockId require_impls_block_id) + -> std::string; +auto Dump(const File& file, RequireImplsId require_impls_id) -> std::string; auto Dump(const File& file, SpecificId specific_id) -> std::string; auto Dump(const File& file, SpecificInterfaceId specific_interface_id) -> std::string; diff --git a/toolchain/sem_ir/require_impls.h b/toolchain/sem_ir/require_impls.h index 95cce40a09ff..de649f0f0457 100644 --- a/toolchain/sem_ir/require_impls.h +++ b/toolchain/sem_ir/require_impls.h @@ -37,7 +37,7 @@ struct RequireImpls : Printable { out << '{'; out << "self_id: " << self_id << ", facet_type_inst_id: " << facet_type_inst_id - << ", extend_self: " << extend_self + << ", extend_self: " << (extend_self ? "true" : "false") << ", parent_scope: " << parent_scope_id; out << '}'; }