================
@@ -1891,6 +1893,12 @@ bool CommandInterpreter::HandleCommand(const char 
*command_line,
 
   m_transcript_stream << "(lldb) " << command_line << '\n';
 
+  // The same `transcript_item` will be used below to add output and error of
+  // the command.
+  auto transcript_item = std::make_shared<StructuredData::Dictionary>();
----------------
royitaqi wrote:

Two reasons for using the `shared_ptr`:
1. `m_transcript` holds a `shared_ptr` anyways. The 
`m_transcript->AddItem(transcript_item)` call below this line also requires a 
`shared_ptr`.
2. Many lines below this line, the `transcript_item` is used again in order to 
add the command's output and error.

If we use `unique_ptr` instead, then the code will look like:
```
  auto transcript_item = std::make_unique<StructuredData::Dictionary>();
  transcript_item->AddStringItem("command", command_line);
  m_transcript->AddItem(std::move(transcript_item));

  ...

  auto last_transcript_item = m_transcript.last();
  last_transcript_item->AddStringItem("output", result.GetOutputData());
  last_transcript_item->AddStringItem("error", result.GetErrorData());
```

I feel the last part is weird (i.e. first creating `transcript_item` and move 
into `m_transcript`, then getting it again from `m_transcript`). I feel a 
`shared_ptr` is more readable and performant (since `m_transcript` holds a 
`shared_ptr` anyways, rather than adding then getting).

WDYT?

https://github.com/llvm/llvm-project/pull/90703
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to