Skip to content

Commit d98dba3

Browse files
committed
Update the static python bindings.
1 parent e5c1c75 commit d98dba3

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

lldb/bindings/python/static-binding/LLDBWrapPython.cpp

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5639,6 +5639,79 @@ lldb_private::python::SWIGBridge::LLDBSwigPythonGetRepeatCommandForScriptedComma
56395639
return result.Str().GetString().str();
56405640
}
56415641

5642+
StructuredData::DictionarySP
5643+
lldb_private::python::SWIGBridge::LLDBSwigPythonHandleArgumentCompletionForScriptedCommand(PyObject *implementor,
5644+
std::vector<llvm::StringRef> &args_vec, size_t args_pos, size_t pos_in_arg) {
5645+
5646+
PyErr_Cleaner py_err_cleaner(true);
5647+
5648+
PythonObject self(PyRefType::Borrowed, implementor);
5649+
auto pfunc = self.ResolveName<PythonCallable>("handle_argument_completion");
5650+
// If this isn't implemented, return an empty dict to signal falling back to default completion:
5651+
if (!pfunc.IsAllocated())
5652+
return {};
5653+
5654+
PythonList args_list(PyInitialValue::Empty);
5655+
for (auto elem : args_vec)
5656+
args_list.AppendItem(PythonString(elem));
5657+
5658+
PythonObject result = pfunc(args_list, PythonInteger(args_pos), PythonInteger(pos_in_arg));
5659+
// Returning None means do the ordinary completion
5660+
if (result.IsNone())
5661+
return {};
5662+
5663+
// Convert the return dictionary to a DictionarySP.
5664+
StructuredData::ObjectSP result_obj_sp = result.CreateStructuredObject();
5665+
if (!result_obj_sp)
5666+
return {};
5667+
5668+
StructuredData::DictionarySP dict_sp(new StructuredData::Dictionary(result_obj_sp));
5669+
if (dict_sp->GetType() == lldb::eStructuredDataTypeInvalid)
5670+
return {};
5671+
return dict_sp;
5672+
}
5673+
5674+
StructuredData::DictionarySP
5675+
lldb_private::python::SWIGBridge::LLDBSwigPythonHandleOptionArgumentCompletionForScriptedCommand(PyObject *implementor,
5676+
llvm::StringRef &long_option, size_t pos_in_arg) {
5677+
5678+
PyErr_Cleaner py_err_cleaner(true);
5679+
5680+
PythonObject self(PyRefType::Borrowed, implementor);
5681+
auto pfunc = self.ResolveName<PythonCallable>("handle_option_argument_completion");
5682+
// If this isn't implemented, return an empty dict to signal falling back to default completion:
5683+
if (!pfunc.IsAllocated())
5684+
return {};
5685+
5686+
PythonObject result = pfunc(PythonString(long_option), PythonInteger(pos_in_arg));
5687+
// Returning None means do the ordinary completion
5688+
if (result.IsNone())
5689+
return {};
5690+
5691+
// Returning a boolean:
5692+
// True means the completion was handled, but there were no completions
5693+
// False means that the completion was not handled, again, do the ordinary completion:
5694+
if (result.GetObjectType() == PyObjectType::Boolean) {
5695+
if (!result.IsTrue())
5696+
return {};
5697+
// Make up a completion dictionary with the right element:
5698+
StructuredData::DictionarySP dict_sp(new StructuredData::Dictionary());
5699+
dict_sp->AddBooleanItem("no-completion", true);
5700+
return dict_sp;
5701+
}
5702+
5703+
5704+
// Convert the return dictionary to a DictionarySP.
5705+
StructuredData::ObjectSP result_obj_sp = result.CreateStructuredObject();
5706+
if (!result_obj_sp)
5707+
return {};
5708+
5709+
StructuredData::DictionarySP dict_sp(new StructuredData::Dictionary(result_obj_sp));
5710+
if (dict_sp->GetType() == lldb::eStructuredDataTypeInvalid)
5711+
return {};
5712+
return dict_sp;
5713+
}
5714+
56425715
#include "lldb/Interpreter/CommandReturnObject.h"
56435716

56445717
bool lldb_private::python::SWIGBridge::LLDBSwigPythonCallParsedCommandObject(

0 commit comments

Comments
 (0)