+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.
+
2018-09-23 Tom Tromey <tom@tromey.com>
* ctf.c (ctf_start): Use gdb_fopen_cloexec.
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."));
TRY
{
+ if (is_floating_value (value))
+ {
+ type = builtin_type_pylong;
+ value = value_cast (type, value);
+ }
+
type = check_typedef (type);
if (!is_integral_type (type)
{
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)
{
+2018-09-23 Tom Tromey <tom@tromey.com>
+
+ PR python/18352;
+ * gdb.python/py-value.exp (test_float_conversion): New proc.
+ Use it.
+
2018-09-20 Hafiz Abid Qadeer <abidh@codesourcery.com>
gdb.base/reggroups.exp (fetch_reggroups): Add '_' in match pattern.
gdb_test "python print (one.__hash__() == hash(one))" "True" "test inbuilt hash"
}
+proc test_float_conversion {} {
+ global gdb_py_is_py3k
+ gdb_test "python print(int(gdb.Value(0)))" "0"
+ gdb_test "python print(int(gdb.Value(2.5)))" "2"
+ if {!$gdb_py_is_py3k} {
+ gdb_test "python print(long(gdb.Value(0)))" "0"
+ gdb_test "python print(long(gdb.Value(2.5)))" "2"
+ }
+ gdb_test "python print(float(gdb.Value(2.5)))" "2\\.5"
+ gdb_test "python print(float(gdb.Value(0)))" "0\\.0"
+}
+
# Build C version of executable. C++ is built later.
if { [build_inferior "${binfile}" "c"] < 0 } {
return -1
test_objfiles
test_parse_and_eval
test_value_hash
+test_float_conversion
# The following tests require execution.