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 << '}'; }