gdb/python: implement DisassemblerResult.__str__ method

Add the DisassemblerResult.__str__ method.  This gives the same result
as the DisassemblerResult.string attribute, but can be useful
sometimes depending on how the user is trying to print the object.

There's a test for the new functionality.
This commit is contained in:
Andrew Burgess
2023-01-24 15:12:34 +00:00
parent 15ccb5e393
commit 6a66780739
3 changed files with 30 additions and 9 deletions

View File

@ -608,6 +608,21 @@ gdbpy_disassembler::read_memory_func (bfd_vma memaddr, gdb_byte *buff,
return 0;
}
/* Implement __str__ for the DisassemblerResult type. */
static PyObject *
disasmpy_result_str (PyObject *self)
{
disasm_result_object *obj = (disasm_result_object *) self;
gdb_assert (obj->content != nullptr);
gdb_assert (obj->content->size () > 0);
gdb_assert (obj->length > 0);
return PyUnicode_Decode (obj->content->c_str (),
obj->content->size (),
host_charset (), nullptr);
}
/* Implement DisassemblerResult.length attribute, return the length of the
disassembled instruction. */
@ -624,14 +639,7 @@ disasmpy_result_length (PyObject *self, void *closure)
static PyObject *
disasmpy_result_string (PyObject *self, void *closure)
{
disasm_result_object *obj = (disasm_result_object *) self;
gdb_assert (obj->content != nullptr);
gdb_assert (obj->content->size () > 0);
gdb_assert (obj->length > 0);
return PyUnicode_Decode (obj->content->c_str (),
obj->content->size (),
host_charset (), nullptr);
return disasmpy_result_str (self);
}
/* Implement DisassemblerResult.__init__. Takes two arguments, an
@ -1147,7 +1155,7 @@ PyTypeObject disasm_result_object_type = {
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
disasmpy_result_str, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/