================
@@ -305,22 +305,46 @@ template <>
lldb::ValueObjectListSP
ScriptedPythonInterface::ExtractValueFromPythonObject<lldb::ValueObjectListSP>(
python::PythonObject &p, Status &error) {
- lldb::SBValueList *sb_value_list = reinterpret_cast<lldb::SBValueList *>(
- python::LLDBSWIGPython_CastPyObjectToSBValueList(p.get()));
-
- if (!sb_value_list) {
- error = Status::FromErrorStringWithFormat(
- "couldn't cast lldb::SBValueList to lldb::ValueObjectListSP");
- return {};
+ // Two Python return shapes are accepted here so callers can go through
+ // Dispatch<ValueObjectListSP>() uniformly: an `SBValueList` wrapper
+ // (what most extension methods return) and a plain Python `list` of
+ // `SBValue` (what `get_recognized_arguments` is documented to return).
+ lldb::ValueObjectListSP out = std::make_shared<ValueObjectList>();
+ if (auto *sb_value_list = reinterpret_cast<lldb::SBValueList *>(
+ python::LLDBSWIGPython_CastPyObjectToSBValueList(p.get()))) {
+ for (uint32_t i = 0, e = sb_value_list->GetSize(); i < e; ++i) {
+ SBValue value = sb_value_list->GetValueAtIndex(i);
+ out->Append(m_interpreter.GetOpaqueTypeFromSBValue(value));
+ }
+ return out;
}
- lldb::ValueObjectListSP out = std::make_shared<ValueObjectList>();
- for (uint32_t i = 0, e = sb_value_list->GetSize(); i < e; ++i) {
- SBValue value = sb_value_list->GetValueAtIndex(i);
- out->Append(m_interpreter.GetOpaqueTypeFromSBValue(value));
+ // Fallback: a plain Python `list` of `SBValue`. Round-trip through
+ // `CreateStructuredObject` so we don't touch the `PyList_*` C API
+ // directly; unknown-shape items surface as `StructuredData::Generic`
+ // holding their opaque `PyObject*`, which we hand back to SWIG to
+ // recover the SBValue wrapper.
+ StructuredData::ObjectSP structured = p.CreateStructuredObject();
+ StructuredData::Array *arr = structured ? structured->GetAsArray() : nullptr;
+ if (arr) {
+ arr->ForEach([&](StructuredData::Object *item) {
+ StructuredData::Generic *generic = item ? item->GetAsGeneric() : nullptr;
+ if (!generic)
----------------
jimingham wrote:
How would this happen? Is it an error we should surface? Or maybe just log.
https://github.com/llvm/llvm-project/pull/209805
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits