diff options
Diffstat (limited to 'gdb/python')
-rw-r--r-- | gdb/python/py-value.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c index 1b880fa..9abcf92 100644 --- a/gdb/python/py-value.c +++ b/gdb/python/py-value.c @@ -1497,6 +1497,12 @@ valpy_int (PyObject *self) TRY { + if (is_floating_value (value)) + { + type = builtin_type_pylong; + value = value_cast (type, value); + } + if (!is_integral_type (type)) error (_("Cannot convert value to int.")); @@ -1522,6 +1528,12 @@ valpy_long (PyObject *self) TRY { + if (is_floating_value (value)) + { + type = builtin_type_pylong; + value = value_cast (type, value); + } + type = check_typedef (type); if (!is_integral_type (type) @@ -1554,10 +1566,17 @@ valpy_float (PyObject *self) { type = check_typedef (type); - if (TYPE_CODE (type) != TYPE_CODE_FLT || !is_floating_value (value)) + if (TYPE_CODE (type) == TYPE_CODE_FLT && is_floating_value (value)) + d = target_float_to_host_double (value_contents (value), type); + else if (TYPE_CODE (type) == TYPE_CODE_INT) + { + /* Note that valpy_long accepts TYPE_CODE_PTR and some + others here here -- but casting a pointer or bool to a + float seems wrong. */ + d = value_as_long (value); + } + else error (_("Cannot convert value to float.")); - - d = target_float_to_host_double (value_contents (value), type); } CATCH (except, RETURN_MASK_ALL) { |