[Lldb-commits] [lldb] [lldb] Implement bytecode based SyntheticChildren (PR #179832)

Michael Buch via lldb-commits lldb-commits at lists.llvm.org
Thu Feb 12 04:49:01 PST 2026


================
@@ -251,3 +254,150 @@ std::string ScriptedSyntheticChildren::GetDescription() {
 
   return std::string(sstr.GetString());
 }
+
+BytecodeSyntheticChildren::FrontEnd::FrontEnd(
+    ValueObject &backend,
+    FormatterBytecode::SyntheticProviderDefinition &definition)
+    : SyntheticChildrenFrontEnd(backend), m_definition(definition) {
+  FormatterBytecode::DataStack data(backend.GetSP());
+  if (!m_definition.init) {
+    m_self = std::move(data);
+    return;
+  }
+
+  FormatterBytecode::ControlStack control = {m_definition.init->getBuffer()};
+  llvm::Error error =
+      FormatterBytecode::Interpret(control, data, FormatterBytecode::sig_init);
+  if (error) {
+    LLDB_LOG_ERROR(GetLog(LLDBLog::DataFormatters), std::move(error),
+                   "@init failed: {0}");
+    return;
+  }
+
+  if (data.size() > 0)
+    m_self = std::move(data);
+}
+
+lldb::ChildCacheState BytecodeSyntheticChildren::FrontEnd::Update() {
+  if (!m_definition.update)
+    return ChildCacheState::eRefetch;
+
+  FormatterBytecode::ControlStack control = {m_definition.update->getBuffer()};
+  FormatterBytecode::DataStack data = m_self;
+  llvm::Error error = FormatterBytecode::Interpret(
+      control, data, FormatterBytecode::sig_update);
+  if (error) {
+    LLDB_LOG_ERROR(GetLog(LLDBLog::DataFormatters), std::move(error),
+                   "@update failed: {0}");
+    return ChildCacheState::eRefetch;
+  }
+
+  if (data.size() > 0)
+    m_self = std::move(data);
+
+  return ChildCacheState::eRefetch;
+}
+
+llvm::Expected<uint32_t>
----------------
Michael137 wrote:

Sorry for not coming back to this earlier. Thanks for the additional context. Having re-read my comment, I *think* my point was probably moot? Thinking about the Python->byte-code compiler, if the user took care to only do expensive calls in `update`, the resulting byte-code would do the same. So re-interpreting the byte code *should* be cheap if the user to care to not make them expensive (which is the recommended way to write formatters anyway?). So even with your implementation here, it's really still mostly up to the user how expensive the resulting byte code interpretation is.

https://github.com/llvm/llvm-project/pull/179832


More information about the lldb-commits mailing list