Allow more Python scalar conversions
PR python/18352 points out that the gdb Python code can't convert an integer-valued gdb.Value to a Python float. While writing the test I noticed that, similarly, converting integer gdb.Values to float does not work. However, all of these cases seem reasonable. gdb/ChangeLog 2018-09-23 Tom Tromey <tom@tromey.com> PR python/18352; * python/py-value.c (valpy_float): Allow conversions from int or char. (valpy_int, valpy_long): Allow conversions from float. gdb/testsuite/ChangeLog 2018-09-23 Tom Tromey <tom@tromey.com> PR python/18352; * gdb.python/py-value.exp (test_float_conversion): New proc. Use it.
This commit is contained in:
parent
e6b5f1e9f5
commit
fb4fa9469c
4 changed files with 48 additions and 3 deletions
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue