Ver código fonte

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`.
Dana Jansens 4 meses atrás
pai
commit
54a1c8213c

+ 2 - 0
scripts/lldbinit.py

@@ -93,6 +93,8 @@ Example usage:
         "name": "SemIR::MakeNameId",
         "name": "SemIR::MakeNameId",
         "name_scope": "SemIR::MakeNameScopeId",
         "name_scope": "SemIR::MakeNameScopeId",
         "identified_facet_type": "SemIR::MakeIdentifiedFacetTypeId",
         "identified_facet_type": "SemIR::MakeIdentifiedFacetTypeId",
+        "require_block": "SemIR::MakeRequireImplsBlockId",
+        "require": "SemIR::MakeRequireImplsId",
         "specific": "SemIR::MakeSpecificId",
         "specific": "SemIR::MakeSpecificId",
         "specific_interface": "SemIR::MakeSpecificInterfaceId",
         "specific_interface": "SemIR::MakeSpecificInterfaceId",
         "struct_type_fields": "SemIR::MakeStructTypeFieldsId",
         "struct_type_fields": "SemIR::MakeStructTypeFieldsId",

+ 12 - 0
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);
   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,
 LLVM_DUMP_METHOD static auto Dump(const Context& context,
                                   SemIR::SpecificId specific_id)
                                   SemIR::SpecificId specific_id)
     -> std::string {
     -> std::string {

+ 31 - 0
toolchain/sem_ir/dump.cpp

@@ -377,6 +377,30 @@ LLVM_DUMP_METHOD auto Dump(const File& file,
   return out.TakeStr();
   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)
 LLVM_DUMP_METHOD auto Dump(const File& file, SpecificId specific_id)
     -> std::string {
     -> std::string {
   RawStringOstream out;
   RawStringOstream out;
@@ -483,6 +507,13 @@ LLVM_DUMP_METHOD static auto MakeNamedConstraintId(int id)
     -> NamedConstraintId {
     -> NamedConstraintId {
   return NamedConstraintId(id);
   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 {
 LLVM_DUMP_METHOD static auto MakeSpecificId(int id) -> SpecificId {
   return SpecificId(id);
   return SpecificId(id);
 }
 }

+ 3 - 0
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, NameScopeId name_scope_id) -> std::string;
 auto Dump(const File& file, NamedConstraintId named_constraint_id)
 auto Dump(const File& file, NamedConstraintId named_constraint_id)
     -> std::string;
     -> 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, SpecificId specific_id) -> std::string;
 auto Dump(const File& file, SpecificInterfaceId specific_interface_id)
 auto Dump(const File& file, SpecificInterfaceId specific_interface_id)
     -> std::string;
     -> std::string;

+ 1 - 1
toolchain/sem_ir/require_impls.h

@@ -37,7 +37,7 @@ struct RequireImpls : Printable<RequireImpls> {
     out << '{';
     out << '{';
     out << "self_id: " << self_id
     out << "self_id: " << self_id
         << ", facet_type_inst_id: " << facet_type_inst_id
         << ", facet_type_inst_id: " << facet_type_inst_id
-        << ", extend_self: " << extend_self
+        << ", extend_self: " << (extend_self ? "true" : "false")
         << ", parent_scope: " << parent_scope_id;
         << ", parent_scope: " << parent_scope_id;
     out << '}';
     out << '}';
   }
   }