From e6fcee3a73ddab55e3b35b7705b01035383e5417 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Mon, 23 Nov 2020 21:49:13 -0500 Subject: [PATCH] Make function fixed_point_scaling_factor a method of struct type This logically connects this function to the object it inspects. gdb/ChangeLog: * gdbtypes.h (struct type) : New method, replacing fixed_point_scaling_factor. All callers updated throughout this project. (fixed_point_scaling_factor): Delete declaration. * gdbtypes.c (type::fixed_point_scaling_factor): Replaces fixed_point_scaling_factor. Adjust implementation accordingly. --- gdb/ChangeLog | 9 +++++++++ gdb/gdbtypes.c | 6 +++--- gdb/gdbtypes.h | 8 +++++--- gdb/typeprint.c | 2 +- gdb/valarith.c | 6 +++--- gdb/valops.c | 6 +++--- gdb/valprint.c | 2 +- gdb/value.c | 2 +- 8 files changed, 26 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3db63657919..d1a1b9584f4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2020-11-24 Joel Brobecker + + * gdbtypes.h (struct type) : New method, + replacing fixed_point_scaling_factor. All callers updated + throughout this project. + (fixed_point_scaling_factor): Delete declaration. + * gdbtypes.c (type::fixed_point_scaling_factor): Replaces + fixed_point_scaling_factor. Adjust implementation accordingly. + 2020-11-24 Joel Brobecker * gdbtypes.h (struct type) New method, diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index fa4e8f01f29..4eaefa5ee65 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -4927,7 +4927,7 @@ static void print_fixed_point_type_info (struct type *type, int spaces) { printfi_filtered (spaces + 2, "scaling factor: %s\n", - fixed_point_scaling_factor (type).str ().c_str ()); + type->fixed_point_scaling_factor ().str ().c_str ()); } static struct obstack dont_print_type_obstack; @@ -5881,9 +5881,9 @@ type::fixed_point_type_base_type () /* See gdbtypes.h. */ const gdb_mpq & -fixed_point_scaling_factor (struct type *type) +type::fixed_point_scaling_factor () { - type = type->fixed_point_type_base_type (); + struct type *type = this->fixed_point_type_base_type (); return type->fixed_point_info ().scaling_factor; } diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 88fb0e7a393..eecd874cfae 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1224,6 +1224,11 @@ struct type struct type *fixed_point_type_base_type (); + /* * Assuming that THIS is a TYPE_CODE_FIXED_POINT, return its scaling + factor. */ + + const gdb_mpq &fixed_point_scaling_factor (); + /* * Return the dynamic property of the requested KIND from this type's list of dynamic properties. */ dynamic_prop *dyn_prop (dynamic_prop_node_kind kind) const; @@ -2596,9 +2601,6 @@ extern int type_not_associated (const struct type *type); a range type whose base type is a TYPE_CODE_FIXED_POINT. */ extern bool is_fixed_point_type (struct type *type); -/* Given TYPE, which is a fixed point type, return its scaling factor. */ -extern const gdb_mpq &fixed_point_scaling_factor (struct type *type); - /* Allocate a fixed-point type info for TYPE. This should only be called by INIT_FIXED_POINT_SPECIFIC. */ extern void allocate_fixed_point_type_info (struct type *type); diff --git a/gdb/typeprint.c b/gdb/typeprint.c index 0dd3b1c4821..a3fc9ccff30 100644 --- a/gdb/typeprint.c +++ b/gdb/typeprint.c @@ -667,7 +667,7 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream) void print_type_fixed_point (struct type *type, struct ui_file *stream) { - std::string small_img = fixed_point_scaling_factor (type).str (); + std::string small_img = type->fixed_point_scaling_factor ().str (); fprintf_filtered (stream, "%s-byte fixed point (small = %s)", pulongest (TYPE_LENGTH (type)), small_img.c_str ()); diff --git a/gdb/valarith.c b/gdb/valarith.c index 7ab183cbdc4..29ac46b4492 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -911,11 +911,11 @@ fixed_point_binop (struct value *arg1, struct value *arg2, enum exp_opcode op) v1.read_fixed_point (gdb::make_array_view (value_contents (arg1), TYPE_LENGTH (type1)), type_byte_order (type1), type1->is_unsigned (), - fixed_point_scaling_factor (type1)); + type1->fixed_point_scaling_factor ()); v2.read_fixed_point (gdb::make_array_view (value_contents (arg2), TYPE_LENGTH (type2)), type_byte_order (type2), type2->is_unsigned (), - fixed_point_scaling_factor (type2)); + type2->fixed_point_scaling_factor ()); #define INIT_VAL_WITH_FIXED_POINT_VAL(RESULT) \ do { \ @@ -924,7 +924,7 @@ fixed_point_binop (struct value *arg1, struct value *arg2, enum exp_opcode op) (gdb::make_array_view (value_contents_raw (val), \ TYPE_LENGTH (type1)), \ type_byte_order (type1), type1->is_unsigned (), \ - fixed_point_scaling_factor (type1)); \ + type1->fixed_point_scaling_factor ()); \ } while (0) switch (op) diff --git a/gdb/valops.c b/gdb/valops.c index 3e2d5d36c8a..4d0e002b20d 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -363,7 +363,7 @@ value_cast_to_fixed_point (struct type *to_type, struct value *from_val) mpq_set_z (vq.val, vz.val); if (is_fixed_point_type (from_type)) - mpq_mul (vq.val, vq.val, fixed_point_scaling_factor (from_type).val); + mpq_mul (vq.val, vq.val, from_type->fixed_point_scaling_factor ().val); } else @@ -373,7 +373,7 @@ value_cast_to_fixed_point (struct type *to_type, struct value *from_val) /* Divide that value by the scaling factor to obtain the unscaled value, first in rational form, and then in integer form. */ - mpq_div (vq.val, vq.val, fixed_point_scaling_factor (to_type).val); + mpq_div (vq.val, vq.val, to_type->fixed_point_scaling_factor ().val); gdb_mpz unscaled = vq.get_rounded (); /* Finally, create the result value, and pack the unscaled value @@ -527,7 +527,7 @@ value_cast (struct type *type, struct value *arg2) fp_val.read_fixed_point (gdb::make_array_view (value_contents (arg2), TYPE_LENGTH (type2)), type_byte_order (type2), type2->is_unsigned (), - fixed_point_scaling_factor (type2)); + type2->fixed_point_scaling_factor ()); struct value *v = allocate_value (to_type); target_float_from_host_double (value_contents_raw (v), diff --git a/gdb/valprint.c b/gdb/valprint.c index 6e9262e7f63..50278ac3093 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -811,7 +811,7 @@ generic_val_print_fixed_point (struct value *val, struct ui_file *stream, f.read_fixed_point (gdb::make_array_view (valaddr, TYPE_LENGTH (type)), type_byte_order (type), type->is_unsigned (), - fixed_point_scaling_factor (type)); + type->fixed_point_scaling_factor ()); const char *fmt = TYPE_LENGTH (type) < 4 ? "%.11Fg" : "%.17Fg"; std::string str = gmp_string_printf (fmt, f.val); diff --git a/gdb/value.c b/gdb/value.c index f6c1a36ac0f..0087fe577a1 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -2814,7 +2814,7 @@ unpack_long (struct type *type, const gdb_byte *valaddr) gdb_mpq vq; vq.read_fixed_point (gdb::make_array_view (valaddr, len), byte_order, nosign, - fixed_point_scaling_factor (type)); + type->fixed_point_scaling_factor ()); gdb_mpz vz; mpz_tdiv_q (vz.val, mpq_numref (vq.val), mpq_denref (vq.val)); -- 2.30.2