aboutsummaryrefslogtreecommitdiff
path: root/gdb/python
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2023-03-23 11:54:46 -0600
committerTom Tromey <tromey@adacore.com>2023-05-23 10:09:27 -0600
commitd5ad08d77c92e50f24798f357dd688b9060c6f68 (patch)
treeea717a62e9f5589444451867ca963f8a488c1ac2 /gdb/python
parent6aebb6e100fb3c5e2acf19f8b0432b3b4fd750e0 (diff)
downloadfsf-binutils-gdb-d5ad08d77c92e50f24798f357dd688b9060c6f68.zip
fsf-binutils-gdb-d5ad08d77c92e50f24798f357dd688b9060c6f68.tar.gz
fsf-binutils-gdb-d5ad08d77c92e50f24798f357dd688b9060c6f68.tar.bz2
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.
Diffstat (limited to 'gdb/python')
-rw-r--r--gdb/python/py-micmd.c15
-rw-r--r--gdb/python/python-internal.h2
2 files changed, 17 insertions, 0 deletions
diff --git a/gdb/python/py-micmd.c b/gdb/python/py-micmd.c
index e86807d..d7d9591 100644
--- a/gdb/python/py-micmd.c
+++ b/gdb/python/py-micmd.c
@@ -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 ();
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index dbd3357..1142e0e 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -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 */