Use field_signed from Python MI commands

If an MI command written in Python includes a number in its output,
currently that is simply emitted as a string.  However, it's
convenient for a later patch if these are emitted using field_signed.
This does not make a difference to ordinary MI clients.
This commit is contained in:
Tom Tromey 2023-03-23 11:54:46 -06:00
parent 6aebb6e100
commit d5ad08d77c
2 changed files with 17 additions and 0 deletions

View file

@ -293,6 +293,21 @@ serialize_mi_result_1 (PyObject *result, const char *field_name)
}
else
{
if (PyLong_Check (result))
{
int overflow = 0;
gdb_py_longest val = gdb_py_long_as_long_and_overflow (result,
&overflow);
if (PyErr_Occurred () != nullptr)
gdbpy_handle_exception ();
if (overflow == 0)
{
uiout->field_signed (field_name, val);
return;
}
/* Fall through to the string case on overflow. */
}
gdb::unique_xmalloc_ptr<char> string (gdbpy_obj_to_string (result));
if (string == nullptr)
gdbpy_handle_exception ();

View file

@ -110,6 +110,7 @@
typedef PY_LONG_LONG gdb_py_longest;
typedef unsigned PY_LONG_LONG gdb_py_ulongest;
#define gdb_py_long_as_ulongest PyLong_AsUnsignedLongLong
#define gdb_py_long_as_long_and_overflow PyLong_AsLongLongAndOverflow
#else /* HAVE_LONG_LONG */
@ -118,6 +119,7 @@ typedef unsigned PY_LONG_LONG gdb_py_ulongest;
typedef long gdb_py_longest;
typedef unsigned long gdb_py_ulongest;
#define gdb_py_long_as_ulongest PyLong_AsUnsignedLong
#define gdb_py_long_as_long_and_overflow PyLong_AsLongAndOverflow
#endif /* HAVE_LONG_LONG */