Turn many optimized-out value functions into methods
authorTom Tromey <tom@tromey.com>
Tue, 31 Jan 2023 23:13:08 +0000 (16:13 -0700)
committerTom Tromey <tom@tromey.com>
Mon, 13 Feb 2023 22:22:17 +0000 (15:22 -0700)
This turns many functions that are related to optimized-out or
availability-checking to be methods of value.  The static function
value_entirely_covered_by_range_vector is also converted to be a
private method.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
37 files changed:
gdb/aarch64-tdep.c
gdb/ada-lang.c
gdb/ada-valprint.c
gdb/alpha-tdep.c
gdb/amd64-tdep.c
gdb/c-valprint.c
gdb/compile/compile-object-load.c
gdb/cp-valprint.c
gdb/d-valprint.c
gdb/dwarf2/expr.c
gdb/dwarf2/loc.c
gdb/f-valprint.c
gdb/findvar.c
gdb/frame.c
gdb/gnu-v2-abi.c
gdb/guile/scm-pretty-print.c
gdb/guile/scm-value.c
gdb/i386-tdep.c
gdb/i387-tdep.c
gdb/infcmd.c
gdb/infrun.c
gdb/mi/mi-cmd-stack.c
gdb/mi/mi-main.c
gdb/mips-tdep.c
gdb/p-valprint.c
gdb/printcmd.c
gdb/python/py-prettyprint.c
gdb/python/py-value.c
gdb/regcache.c
gdb/riscv-tdep.c
gdb/s390-tdep.c
gdb/stack.c
gdb/valarith.c
gdb/valops.c
gdb/valprint.c
gdb/value.c
gdb/value.h

index 0aaa746760e9dcc0c524f4dfb056f67d3385faab..a4f71f246c6af28ee08359c96c337eb90f716d48 100644 (file)
@@ -2766,8 +2766,8 @@ aarch64_pseudo_read_value_1 (struct gdbarch *gdbarch,
   gdb_static_assert (AARCH64_V0_REGNUM == AARCH64_SVE_Z0_REGNUM);
 
   if (regcache->raw_read (v_regnum, reg_buf) != REG_VALID)
-    mark_value_bytes_unavailable (result_value, 0,
-                                 result_value->type ()->length ());
+    result_value->mark_bytes_unavailable (0,
+                                         result_value->type ()->length ());
   else
     memcpy (result_value->contents_raw ().data (), reg_buf, regsize);
 
@@ -2801,7 +2801,7 @@ aarch64_pseudo_read_value (struct gdbarch *gdbarch, readable_regcache *regcache,
 
       /* Read the bottom 4 bytes of X.  */
       if (regcache->raw_read_part (x_regnum, offset, 4, data) != REG_VALID)
-       mark_value_bytes_unavailable (result_value, 0, 4);
+       result_value->mark_bytes_unavailable (0, 4);
       else
        memcpy (result_value->contents_raw ().data (), data, 4);
 
index e2aa4041263f22eec9f595600fd9803706e80414..1b0dc2291d04cac91148537006057315593d0858 100644 (file)
@@ -555,7 +555,7 @@ coerce_unspec_val_to_type (struct value *val, struct type *type)
     {
       struct value *result;
 
-      if (value_optimized_out (val))
+      if (val->optimized_out ())
        result = value::allocate_optimized_out (type);
       else if (val->lazy ()
               /* Be careful not to make a lazy not_lval value.  */
index 16e865c5de6fc6ca56876833070dc900566a2e80..02ae46bce9e81f055f62cd1f1a4fee8a90694bc2 100644 (file)
@@ -918,7 +918,7 @@ ada_value_print_array (struct value *val, struct ui_file *stream, int recurse,
   gdb_printf (stream, "(");
   print_optional_low_bound (stream, type, options);
 
-  if (value_entirely_optimized_out (val))
+  if (val->entirely_optimized_out ())
     val_print_optimized_out (val, stream);
   else if (TYPE_FIELD_BITSIZE (type, 0) > 0)
     {
index 0d51ff73b3d8b19d9e43c35b4c954bdb193c58fb..9fb973597fc434776ee9d01cd1f9e0597799198b 100644 (file)
@@ -241,8 +241,8 @@ alpha_register_to_value (frame_info_ptr frame, int regnum,
   struct value *value = get_frame_register_value (frame, regnum);
 
   gdb_assert (value != NULL);
-  *optimizedp = value_optimized_out (value);
-  *unavailablep = !value_entirely_available (value);
+  *optimizedp = value->optimized_out ();
+  *unavailablep = !value->entirely_available ();
 
   if (*optimizedp || *unavailablep)
     {
index 9c4a90287bc6bcb15373b947e45601b851d7d621..384406395657582197a2915a8075d9b6f3c9cfc9 100644 (file)
@@ -375,8 +375,8 @@ amd64_pseudo_register_read_value (struct gdbarch *gdbarch,
          if (status == REG_VALID)
            memcpy (buf, raw_buf + 1, 1);
          else
-           mark_value_bytes_unavailable (result_value, 0,
-                                         result_value->type ()->length ());
+           result_value->mark_bytes_unavailable (0,
+                                                 result_value->type ()->length ());
        }
       else
        {
@@ -385,8 +385,8 @@ amd64_pseudo_register_read_value (struct gdbarch *gdbarch,
          if (status == REG_VALID)
            memcpy (buf, raw_buf, 1);
          else
-           mark_value_bytes_unavailable (result_value, 0,
-                                         result_value->type ()->length ());
+           result_value->mark_bytes_unavailable (0,
+                                                 result_value->type ()->length ());
        }
     }
   else if (i386_dword_regnum_p (gdbarch, regnum))
@@ -398,8 +398,8 @@ amd64_pseudo_register_read_value (struct gdbarch *gdbarch,
       if (status == REG_VALID)
        memcpy (buf, raw_buf, 4);
       else
-       mark_value_bytes_unavailable (result_value, 0,
-                                     result_value->type ()->length ());
+       result_value->mark_bytes_unavailable (0,
+                                             result_value->type ()->length ());
     }
   else
     i386_pseudo_register_read_into_value (gdbarch, regcache, regnum,
index 55ba02996f39726b6145999dc3e54960330a4c70..34a9d0f607561710612ff05cd1aa29d6faf44675 100644 (file)
@@ -257,9 +257,9 @@ c_value_print_array (struct value *val,
         long as the entire array is valid.  */
       if (c_textual_element_type (unresolved_elttype,
                                  options->format)
-         && value_bytes_available (val, 0, type->length ())
-         && !value_bits_any_optimized_out (val, 0,
-                                           TARGET_CHAR_BIT * type->length ()))
+         && val->bytes_available (0, type->length ())
+         && !val->bits_any_optimized_out (0,
+                                          TARGET_CHAR_BIT * type->length ()))
        {
          int force_ellipses = 0;
 
@@ -520,7 +520,7 @@ c_value_print (struct value *val, struct ui_file *stream,
          /* Pointer to class, check real type of object.  */
          gdb_printf (stream, "(");
 
-         if (value_entirely_available (val))
+         if (val->entirely_available ())
            {
              real_type = value_rtti_indirect_type (val, &full, &top,
                                                    &using_enc);
index af4f6e2c2efd8ac61eae9b61d9cb4c6808fe1593..12939b19e0996410c094897dc58384fe4c6363fd 100644 (file)
@@ -578,9 +578,9 @@ store_regs (struct type *regs_type, CORE_ADDR regs_base)
       regnum = compile_register_name_demangle (gdbarch, reg_name);
 
       regval = value_from_register (reg_type, regnum, get_current_frame ());
-      if (value_optimized_out (regval))
+      if (regval->optimized_out ())
        error (_("Register \"%s\" is optimized out."), reg_name);
-      if (!value_entirely_available (regval))
+      if (!regval->entirely_available ())
        error (_("Register \"%s\" is not available."), reg_name);
 
       inferior_addr = regs_base + reg_offset;
index 687be9d4bd609a0c18c3067432d9670f92a65622..371477496195416c8e8dc50a6b4b8b998fc61e13 100644 (file)
@@ -550,7 +550,7 @@ cp_print_static_field (struct type *type,
 {
   struct value_print_options opts;
 
-  if (value_entirely_optimized_out (val))
+  if (val->entirely_optimized_out ())
     {
       val_print_optimized_out (val, stream);
       return;
index b5e981874c1ebec1037ce06dd77cc8b859dd451a..38fb2a07c1f30407cb321eebe3bb68a219b26b67 100644 (file)
@@ -38,9 +38,8 @@ dynamic_array_type (struct type *type,
       && type->field (0).type ()->code () == TYPE_CODE_INT
       && strcmp (type->field (0).name (), "length") == 0
       && strcmp (type->field (1).name (), "ptr") == 0
-      && !value_bits_any_optimized_out (val,
-                                       TARGET_CHAR_BIT * embedded_offset,
-                                       TARGET_CHAR_BIT * type->length ()))
+      && !val->bits_any_optimized_out (TARGET_CHAR_BIT * embedded_offset,
+                                      TARGET_CHAR_BIT * type->length ()))
     {
       CORE_ADDR addr;
       struct type *elttype;
index a1119e16c233a5b42112c3fc1ae602ed0ec17dc3..45bdb00742086933fa795e229f76427fb05fc2dc 100644 (file)
@@ -233,12 +233,12 @@ rw_pieced_value (value *v, value *from, bool check_optimized)
                      {
                        if (check_optimized)
                          return true;
-                       mark_value_bits_optimized_out (v, offset,
-                                                      this_size_bits);
+                       v->mark_bits_optimized_out (offset,
+                                                   this_size_bits);
                      }
                    if (unavail && !check_optimized)
-                     mark_value_bits_unavailable (v, offset,
-                                                  this_size_bits);
+                     v->mark_bits_unavailable (offset,
+                                               this_size_bits);
                    break;
                  }
 
@@ -358,7 +358,7 @@ rw_pieced_value (value *v, value *from, bool check_optimized)
 
            if (from != nullptr)
              {
-               mark_value_bits_optimized_out (v, offset, this_size_bits);
+               v->mark_bits_optimized_out (offset, this_size_bits);
                break;
              }
 
@@ -390,7 +390,7 @@ rw_pieced_value (value *v, value *from, bool check_optimized)
 
            if (from != nullptr)
              {
-               mark_value_bits_optimized_out (v, offset, this_size_bits);
+               v->mark_bits_optimized_out (offset, this_size_bits);
                break;
              }
 
@@ -413,7 +413,7 @@ rw_pieced_value (value *v, value *from, bool check_optimized)
        case DWARF_VALUE_IMPLICIT_POINTER:
            if (from != nullptr)
              {
-               mark_value_bits_optimized_out (v, offset, this_size_bits);
+               v->mark_bits_optimized_out (offset, this_size_bits);
                break;
              }
 
@@ -424,7 +424,7 @@ rw_pieced_value (value *v, value *from, bool check_optimized)
        case DWARF_VALUE_OPTIMIZED_OUT:
          if (check_optimized)
            return true;
-         mark_value_bits_optimized_out (v, offset, this_size_bits);
+         v->mark_bits_optimized_out (offset, this_size_bits);
          break;
 
        default:
@@ -960,7 +960,7 @@ dwarf_expr_context::fetch_result (struct type *type, struct type *subobj_type,
 
            retval = value_from_register (subobj_type, gdb_regnum,
                                          this->m_frame);
-           if (value_optimized_out (retval))
+           if (retval->optimized_out ())
              {
                /* This means the register has undefined value / was
                   not saved.  As we're computing the location of some
index f9706a0bc05ee876aa4adefd87c6f6cfb863bf78..616db13488b95be81b52765a59d78c588692dc40 100644 (file)
@@ -1515,8 +1515,8 @@ dwarf2_evaluate_loc_desc_full (struct type *type, frame_info_ptr frame,
        {
          free_values.free_to_mark ();
          retval = value::allocate (subobj_type);
-         mark_value_bytes_unavailable (retval, 0,
-                                       subobj_type->length ());
+         retval->mark_bytes_unavailable (0,
+                                         subobj_type->length ());
          return retval;
        }
       else if (ex.error == NO_ENTRY_VALUE_ERROR)
@@ -1609,7 +1609,7 @@ dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
        throw;
     }
 
-  if (value_optimized_out (result))
+  if (result->optimized_out ())
     return 0;
 
   if (VALUE_LVAL (result) == lval_memory)
@@ -1709,7 +1709,7 @@ dwarf2_evaluate_property (const struct dynamic_prop *prop,
            val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data,
                                            size, baton->loclist.per_cu,
                                            baton->loclist.per_objfile);
-           if (!value_optimized_out (val))
+           if (!val->optimized_out ())
              {
                *value = value_as_address (val);
                return true;
index 824a303fdc4a0be6c210f46f6c5e8790b2499363..e96892947af8d941cabdc2be26cb42825bc0b99c 100644 (file)
@@ -269,11 +269,11 @@ public:
        struct value *e_val = value_from_component (m_val, elt_type, elt_off);
        struct value *e_prev = value_from_component (m_val, elt_type,
                                                     elt_off_prev);
-       repeated = ((value_entirely_available (e_prev)
-                    && value_entirely_available (e_val)
+       repeated = ((e_prev->entirely_available ()
+                    && e_val->entirely_available ()
                     && e_prev->contents_eq (e_val))
-                   || (value_entirely_unavailable (e_prev)
-                       && value_entirely_unavailable (e_val)));
+                   || (e_prev->entirely_unavailable ()
+                       && e_val->entirely_unavailable ()));
       }
 
     if (repeated)
@@ -376,11 +376,11 @@ private:
        struct value *e_val1 = value_from_component (val, type, offset1);
        struct value *e_val2 = value_from_component (val, type, offset2);
 
-       return ((value_entirely_available (e_val1)
-                && value_entirely_available (e_val2)
+       return ((e_val1->entirely_available ()
+                && e_val2->entirely_available ()
                 && e_val1->contents_eq (e_val2))
-               || (value_entirely_unavailable (e_val1)
-                   && value_entirely_unavailable (e_val2)));
+               || (e_val1->entirely_unavailable ()
+                   && e_val2->entirely_unavailable ()));
       }
   }
 
index b4852b2cfb36c6a8fc8757e7e3ce34bac535a093..2a2c3eb2ab40e711e2158ce9b5939e1ce932e1a5 100644 (file)
@@ -906,9 +906,9 @@ value_from_register (struct type *type, int regnum, frame_info_ptr frame)
       if (!ok)
        {
          if (optim)
-           mark_value_bytes_optimized_out (v, 0, type->length ());
+           v->mark_bytes_optimized_out (0, type->length ());
          if (unavail)
-           mark_value_bytes_unavailable (v, 0, type->length ());
+           v->mark_bytes_unavailable (0, type->length ());
        }
     }
   else
@@ -971,7 +971,7 @@ address_from_register (int regnum, frame_info_ptr frame)
   value = gdbarch_value_from_register (gdbarch, type, regnum, null_frame_id);
   read_frame_register_value (value, frame);
 
-  if (value_optimized_out (value))
+  if (value->optimized_out ())
     {
       /* This function is used while computing a location expression.
         Complain about the value being optimized out, rather than
index 628b18d6708c4120f533aee2dc8bd87c43980933..bf9b055878a60eb947ed20699d4cc797d391e495 100644 (file)
@@ -1189,8 +1189,8 @@ frame_register_unwind (frame_info_ptr next_frame, int regnum,
 
   gdb_assert (value != NULL);
 
-  *optimizedp = value_optimized_out (value);
-  *unavailablep = !value_entirely_available (value);
+  *optimizedp = value->optimized_out ();
+  *unavailablep = !value->entirely_available ();
   *lvalp = VALUE_LVAL (value);
   *addrp = value->address ();
   if (*lvalp == lval_register)
@@ -1289,7 +1289,7 @@ frame_unwind_register_value (frame_info_ptr next_frame, int regnum)
       string_file debug_file;
 
       gdb_printf (&debug_file, "  ->");
-      if (value_optimized_out (value))
+      if (value->optimized_out ())
        {
          gdb_printf (&debug_file, " ");
          val_print_not_saved (&debug_file);
@@ -1342,12 +1342,12 @@ frame_unwind_register_signed (frame_info_ptr next_frame, int regnum)
 
   gdb_assert (value != NULL);
 
-  if (value_optimized_out (value))
+  if (value->optimized_out ())
     {
       throw_error (OPTIMIZED_OUT_ERROR,
                   _("Register %d was not saved"), regnum);
     }
-  if (!value_entirely_available (value))
+  if (!value->entirely_available ())
     {
       throw_error (NOT_AVAILABLE_ERROR,
                   _("Register %d is not available"), regnum);
@@ -1375,12 +1375,12 @@ frame_unwind_register_unsigned (frame_info_ptr next_frame, int regnum)
 
   gdb_assert (value != NULL);
 
-  if (value_optimized_out (value))
+  if (value->optimized_out ())
     {
       throw_error (OPTIMIZED_OUT_ERROR,
                   _("Register %d was not saved"), regnum);
     }
-  if (!value_entirely_available (value))
+  if (!value->entirely_available ())
     {
       throw_error (NOT_AVAILABLE_ERROR,
                   _("Register %d is not available"), regnum);
@@ -1405,8 +1405,8 @@ read_frame_register_unsigned (frame_info_ptr frame, int regnum,
 {
   struct value *regval = get_frame_register_value (frame, regnum);
 
-  if (!value_optimized_out (regval)
-      && value_entirely_available (regval))
+  if (!regval->optimized_out ()
+      && regval->entirely_available ())
     {
       struct gdbarch *gdbarch = get_frame_arch (frame);
       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@@ -1537,8 +1537,8 @@ get_frame_register_bytes (frame_info_ptr frame, int regnum,
            = frame_unwind_register_value (frame_info_ptr (frame->next),
                                           regnum);
          gdb_assert (value != NULL);
-         *optimizedp = value_optimized_out (value);
-         *unavailablep = !value_entirely_available (value);
+         *optimizedp = value->optimized_out ();
+         *unavailablep = !value->entirely_available ();
 
          if (*optimizedp || *unavailablep)
            {
index 4636ad55109acddda723eede3111d8aa9360b5ef..e8202667e2469abceaeba81ab93cf6b5cfb28b56 100644 (file)
@@ -366,8 +366,8 @@ gnuv2_baseclass_offset (struct type *type, int index,
              field_offset = type->field (i).loc_bitpos () / 8;
              field_length = field_type->length ();
 
-             if (!value_bytes_available (val, embedded_offset + field_offset,
-                                         field_length))
+             if (!val->bytes_available (embedded_offset + field_offset,
+                                        field_length))
                throw_error (NOT_AVAILABLE_ERROR,
                             _("Virtual baseclass pointer is not available"));
 
index ca44133cd7fc52e01fd46e7db74dba5395236273..e172a14dbb3890ec590930352d3df7f7bc94c239 100644 (file)
@@ -969,7 +969,7 @@ gdbscm_apply_val_pretty_printer (const struct extension_language_defn *extlang,
     value->fetch_lazy ();
 
   /* No pretty-printer support for unavailable values.  */
-  if (!value_bytes_available (value, 0, type->length ()))
+  if (!value->bytes_available (0, type->length ()))
     return EXT_LANG_RC_NOP;
 
   if (!gdb_scheme_initialized)
index df76f8a49d161c00eb2f1b4062ad18fbcad7e5f7..3e18bd1fdc355039b892d1e1d9bf1715b384a9b8 100644 (file)
@@ -390,7 +390,7 @@ gdbscm_value_optimized_out_p (SCM self)
 
   return gdbscm_wrap ([=]
     {
-      return scm_from_bool (value_optimized_out (v_smob->value));
+      return scm_from_bool (v_smob->value->optimized_out ());
     });
 }
 
index ed61ee1a9b3f4a707140ec7a2b0362023722d84e..c8c7a1e6e45bb029f71c92971ff22fe1605c4584 100644 (file)
@@ -3388,8 +3388,8 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
       /* Extract (always little endian).  */
       status = regcache->raw_read (fpnum, raw_buf);
       if (status != REG_VALID)
-       mark_value_bytes_unavailable (result_value, 0,
-                                     result_value->type ()->length ());
+       result_value->mark_bytes_unavailable (0,
+                                             result_value->type ()->length ());
       else
        memcpy (buf, raw_buf, register_size (gdbarch, regnum));
     }
@@ -3404,7 +3404,7 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
          status = regcache->raw_read (I387_BND0R_REGNUM (tdep) + regnum,
                                       raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 0, 16);
+           result_value->mark_bytes_unavailable (0, 16);
          else
            {
              enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
@@ -3426,7 +3426,7 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
          /* Extract (always little endian).  */
          status = regcache->raw_read (tdep->k0_regnum + regnum, raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 0, 8);
+           result_value->mark_bytes_unavailable (0, 8);
          else
            memcpy (buf, raw_buf, 8);
        }
@@ -3440,7 +3440,7 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
              status = regcache->raw_read (I387_XMM0_REGNUM (tdep) + regnum,
                                           raw_buf);
              if (status != REG_VALID)
-               mark_value_bytes_unavailable (result_value, 0, 16);
+               result_value->mark_bytes_unavailable (0, 16);
              else
                memcpy (buf, raw_buf, 16);
 
@@ -3448,7 +3448,7 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
              status = regcache->raw_read (tdep->ymm0h_regnum + regnum,
                                           raw_buf);
              if (status != REG_VALID)
-               mark_value_bytes_unavailable (result_value, 16, 16);
+               result_value->mark_bytes_unavailable (16, 16);
              else
                memcpy (buf + 16, raw_buf, 16);
            }
@@ -3459,7 +3459,7 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
                                           - num_lower_zmm_regs,
                                           raw_buf);
              if (status != REG_VALID)
-               mark_value_bytes_unavailable (result_value, 0, 16);
+               result_value->mark_bytes_unavailable (0, 16);
              else
                memcpy (buf, raw_buf, 16);
 
@@ -3468,7 +3468,7 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
                                           - num_lower_zmm_regs,
                                           raw_buf);
              if (status != REG_VALID)
-               mark_value_bytes_unavailable (result_value, 16, 16);
+               result_value->mark_bytes_unavailable (16, 16);
              else
                memcpy (buf + 16, raw_buf, 16);
            }
@@ -3477,7 +3477,7 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
          status = regcache->raw_read (tdep->zmm0h_regnum + regnum,
                                       raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 32, 32);
+           result_value->mark_bytes_unavailable (32, 32);
          else
            memcpy (buf + 32, raw_buf, 32);
        }
@@ -3489,14 +3489,14 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
          status = regcache->raw_read (I387_XMM0_REGNUM (tdep) + regnum,
                                       raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 0, 16);
+           result_value->mark_bytes_unavailable (0, 16);
          else
            memcpy (buf, raw_buf, 16);
          /* Read upper 128bits.  */
          status = regcache->raw_read (tdep->ymm0h_regnum + regnum,
                                       raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 16, 32);
+           result_value->mark_bytes_unavailable (16, 32);
          else
            memcpy (buf + 16, raw_buf, 16);
        }
@@ -3507,14 +3507,14 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
          status = regcache->raw_read (I387_XMM16_REGNUM (tdep) + regnum,
                                       raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 0, 16);
+           result_value->mark_bytes_unavailable (0, 16);
          else
            memcpy (buf, raw_buf, 16);
          /* Read upper 128bits.  */
          status = regcache->raw_read (tdep->ymm16h_regnum + regnum,
                                       raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 16, 16);
+           result_value->mark_bytes_unavailable (16, 16);
          else
            memcpy (buf + 16, raw_buf, 16);
        }
@@ -3525,8 +3525,8 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
          /* Extract (always little endian).  */
          status = regcache->raw_read (gpnum, raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 0,
-                                         result_value->type ()->length ());
+           result_value->mark_bytes_unavailable (0,
+                                                 result_value->type ()->length ());
          else
            memcpy (buf, raw_buf, 2);
        }
@@ -3538,8 +3538,8 @@ i386_pseudo_register_read_into_value (struct gdbarch *gdbarch,
             upper registers.  */
          status = regcache->raw_read (gpnum % 4, raw_buf);
          if (status != REG_VALID)
-           mark_value_bytes_unavailable (result_value, 0,
-                                         result_value->type ()->length ());
+           result_value->mark_bytes_unavailable (0,
+                                                 result_value->type ()->length ());
          else if (gpnum >= 4)
            memcpy (buf, raw_buf + 1, 1);
          else
index e1cbab580eb40e8e0972e3f070c35ecdf9c74b4b..df0a6058adc0ba63135732345261b72a87623a82 100644 (file)
@@ -282,7 +282,7 @@ i387_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
          regnum = (fpreg + 8 - top) % 8 + I387_ST0_REGNUM (tdep);
          regval = get_frame_register_value (frame, regnum);
 
-         if (value_entirely_available (regval))
+         if (regval->entirely_available ())
            {
              const gdb_byte *raw = regval->contents ().data ();
 
index 50378b111c0b03e37563e69ebfb517cd9468f7de..3943a562590338747c8f9aed0acd9c665ac89cd1 100644 (file)
@@ -2172,8 +2172,8 @@ default_print_one_register_info (struct ui_file *file,
   format_stream.puts (name);
   pad_to_column (format_stream, value_column_1);
 
-  print_raw_format = (value_entirely_available (val)
-                     && !value_optimized_out (val));
+  print_raw_format = (val->entirely_available ()
+                     && !val->optimized_out ());
 
   /* If virtual format is floating, print it that way, and in raw
      hex.  */
index c5718580162086860bf23a9f2ad32d9f8d4ba71c..e5d2b97f1dd1e0d5e15f4b07693fcc900996a334 100644 (file)
@@ -7989,7 +7989,7 @@ insert_exception_resume_breakpoint (struct thread_info *tp,
                                        b, VAR_DOMAIN);
       value = read_var_value (vsym.symbol, vsym.block, frame);
       /* If the value was optimized out, revert to the old behavior.  */
-      if (! value_optimized_out (value))
+      if (! value->optimized_out ())
        {
          handler = value_as_address (value);
 
index abe0d34f042e492f7f78969b1a9e3825e58e6e67..1554f9550e65681538994eda4bd25ee1b8cdcea1 100644 (file)
@@ -501,14 +501,13 @@ list_arg_or_local (const struct frame_arg *arg, enum what_to_list what,
                  && (arg->val || arg->error)));
 
   if (skip_unavailable && arg->val != NULL
-      && (value_entirely_unavailable (arg->val)
+      && (arg->val->entirely_unavailable ()
          /* A scalar object that does not have all bits available is
             also considered unavailable, because all bits contribute
             to its representation.  */
          || (val_print_scalar_type_p (arg->val->type ())
-             && !value_bytes_available (arg->val,
-                                        arg->val->embedded_offset (),
-                                        arg->val->type ()->length ()))))
+             && !arg->val->bytes_available (arg->val->embedded_offset (),
+                                            arg->val->type ()->length ()))))
     return;
 
   gdb::optional<ui_out_emit_tuple> tuple_emitter;
index f2e680cb0d35fe581a960c40651f74976ce59a0d..84a95a246844928707bd0076b1478bd797635260 100644 (file)
@@ -1096,7 +1096,7 @@ output_register (frame_info_ptr frame, int regnum, int format,
   struct value *val = value_of_register (regnum, frame);
   struct value_print_options opts;
 
-  if (skip_unavailable && !value_entirely_available (val))
+  if (skip_unavailable && !val->entirely_available ())
     return;
 
   ui_out_emit_tuple tuple_emitter (uiout, NULL);
index 19e0fdcf81e1ddcbd2985ed533f69f29c57de6dc..b88a2f67ded17f24c6159651d4e852da3b4ace27 100644 (file)
@@ -6585,8 +6585,8 @@ print_gp_register_row (struct ui_file *file, frame_info_ptr frame,
 
       /* OK: get the data in raw format.  */
       value = get_frame_register_value (frame, regnum);
-      if (value_optimized_out (value)
-       || !value_entirely_available (value))
+      if (value->optimized_out ()
+         || !value->entirely_available ())
        {
          gdb_printf (file, "%*s ",
                      (int) mips_abi_regsize (gdbarch) * 2,
index 10d4152385129149e865bbce965da7e6bdd2808a..f13f0ef6625e70468c04575c6128848fb91926d8 100644 (file)
@@ -818,7 +818,7 @@ pascal_object_print_static_field (struct value *val,
   struct type *type = val->type ();
   struct value_print_options opts;
 
-  if (value_entirely_optimized_out (val))
+  if (val->entirely_optimized_out ())
     {
       val_print_optimized_out (val, stream);
       return;
index 8619e38aea42a2d1caf50c565a8e157da8c3b8df..0b3c2e00b4c94cb39ba71a0e46faec7042b96cfe 100644 (file)
@@ -1280,8 +1280,8 @@ should_validate_memtags (struct value *value)
 
   /* OK, we have an address value.  Check we have a complete value we
      can extract.  */
-  if (value_optimized_out (value)
-      || !value_entirely_available (value))
+  if (value->optimized_out ()
+      || !value->entirely_available ())
     return false;
 
   /* We do.  Check whether it includes any tags.  */
index dd72e2301576415b30680bed042c5e1c6204349b..dbacb3f3fe2bbacc43482bb2c45d8fc17f09887a 100644 (file)
@@ -582,7 +582,7 @@ gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang,
     value->fetch_lazy ();
 
   /* No pretty-printer support for unavailable values.  */
-  if (!value_bytes_available (value, 0, type->length ()))
+  if (!value->bytes_available (0, type->length ()))
     return EXT_LANG_RC_NOP;
 
   if (!gdb_python_initialized)
index f339845c272a3acf852e84a0a6351a61d88f38e0..6c33e3529c8eab41f4790b51fca4c87716db8b70 100644 (file)
@@ -1197,7 +1197,7 @@ valpy_get_is_optimized_out (PyObject *self, void *closure)
 
   try
     {
-      opt = value_optimized_out (value);
+      opt = value->optimized_out ();
     }
   catch (const gdb_exception &except)
     {
index 90989595acc7adb64b153d465b2134d0f66d7c02..09dd6a4b79e42638f3858cbd468cf19db9232e78 100644 (file)
@@ -715,7 +715,7 @@ readable_regcache::cooked_read (int regnum, gdb_byte *buf)
 
       computed = gdbarch_pseudo_register_read_value (m_descr->gdbarch,
                                                     this, regnum);
-      if (value_entirely_available (computed))
+      if (computed->entirely_available ())
        memcpy (buf, computed->contents_raw ().data (),
                m_descr->sizeof_register[regnum]);
       else
@@ -752,8 +752,8 @@ readable_regcache::cooked_read_value (int regnum)
         API is preferred.  */
       if (cooked_read (regnum,
                       result->contents_raw ().data ()) == REG_UNAVAILABLE)
-       mark_value_bytes_unavailable (result, 0,
-                                     result->type ()->length ());
+       result->mark_bytes_unavailable (0,
+                                       result->type ()->length ());
 
       return result;
     }
index 78c23ee86fcbde6a6972a7cad30fbab3748a4b20..388ce8c2519bf5dd8911aa91949e25c69f56c6df 100644 (file)
@@ -1126,8 +1126,8 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
       return;
     }
 
-  print_raw_format = (value_entirely_available (val)
-                     && !value_optimized_out (val));
+  print_raw_format = (val->entirely_available ()
+                     && !val->optimized_out ());
 
   if (regtype->code () == TYPE_CODE_FLT
       || (regtype->code () == TYPE_CODE_UNION
index 7d2cdf2a8732e3fadc668c5b55d2298c0864623b..cab1757c5ab9c1be5faf9598c8281c6240d5a183 100644 (file)
@@ -2199,7 +2199,7 @@ s390_unwind_pseudo_register (frame_info_ptr this_frame, int regnum)
       struct value *val;
 
       val = frame_unwind_register_value (this_frame, S390_PSWA_REGNUM);
-      if (!value_optimized_out (val))
+      if (!val->optimized_out ())
        {
          LONGEST pswa = value_as_long (val);
 
@@ -2216,7 +2216,7 @@ s390_unwind_pseudo_register (frame_info_ptr this_frame, int regnum)
       struct value *val;
 
       val = frame_unwind_register_value (this_frame, S390_PSWM_REGNUM);
-      if (!value_optimized_out (val))
+      if (!val->optimized_out ())
        {
          LONGEST pswm = value_as_long (val);
 
@@ -2235,7 +2235,7 @@ s390_unwind_pseudo_register (frame_info_ptr this_frame, int regnum)
       struct value *val;
 
       val = frame_unwind_register_value (this_frame, S390_R0_REGNUM + reg);
-      if (!value_optimized_out (val))
+      if (!val->optimized_out ())
        return value_cast (type, val);
     }
 
index 576947c5dac2d28f950df7bcda5ed77b29f9c9a2..934220e7c330ec540d807fb19abd8e67a7e4c50a 100644 (file)
@@ -550,7 +550,7 @@ read_frame_arg (const frame_print_options &fp_opts,
       && SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry != NULL
       && fp_opts.print_entry_values != print_entry_values_no
       && (fp_opts.print_entry_values != print_entry_values_if_needed
-         || !val || value_optimized_out (val)))
+         || !val || val->optimized_out ()))
     {
       try
        {
@@ -568,7 +568,7 @@ read_frame_arg (const frame_print_options &fp_opts,
            }
        }
 
-      if (entryval != NULL && value_optimized_out (entryval))
+      if (entryval != NULL && entryval->optimized_out ())
        entryval = NULL;
 
       if (fp_opts.print_entry_values == print_entry_values_compact
@@ -672,7 +672,7 @@ read_frame_arg (const frame_print_options &fp_opts,
       if (fp_opts.print_entry_values == print_entry_values_only
          || fp_opts.print_entry_values == print_entry_values_both
          || (fp_opts.print_entry_values == print_entry_values_preferred
-             && (!val || value_optimized_out (val))))
+             && (!val || val->optimized_out ())))
        {
          entryval = value::allocate_optimized_out (sym->type ());
          entryval_error = NULL;
@@ -681,7 +681,7 @@ read_frame_arg (const frame_print_options &fp_opts,
   if ((fp_opts.print_entry_values == print_entry_values_compact
        || fp_opts.print_entry_values == print_entry_values_if_needed
        || fp_opts.print_entry_values == print_entry_values_preferred)
-      && (!val || value_optimized_out (val)) && entryval != NULL)
+      && (!val || val->optimized_out ()) && entryval != NULL)
     {
       val = NULL;
       val_error = NULL;
@@ -1708,7 +1708,7 @@ info_frame_command_core (frame_info_ptr fi, bool selected_frame_p)
        struct value *value = frame_unwind_register_value (fi, sp_regnum);
        gdb_assert (value != NULL);
 
-       if (!value_optimized_out (value) && value_entirely_available (value))
+       if (!value->optimized_out () && value->entirely_available ())
          {
            if (VALUE_LVAL (value) == not_lval)
              {
index e92b6672229460b75a50c7c6ac377e5ee46abbc0..854d061aecc42a867a487ecdcc909d0a319d626b 100644 (file)
@@ -188,10 +188,10 @@ value_subscript (struct value *array, LONGEST index)
       struct type *elt_type = check_typedef (tarray->target_type ());
       LONGEST elt_size = type_length_units (elt_type);
       if (!array->lazy ()
-         && !value_bytes_available (array, elt_size * index, elt_size))
+         && !array->bytes_available (elt_size * index, elt_size))
        {
          struct value *val = value::allocate (elt_type);
-         mark_value_bytes_unavailable (val, 0, elt_size);
+         val->mark_bytes_unavailable (0, elt_size);
          VALUE_LVAL (val) = lval_memory;
          val->set_address (array->address () + elt_size * index);
          return val;
index aac32cc091765b129463832de8ef955e55eaf752..b088a5d99aeada907a3a14c4a96b91024a126dce 100644 (file)
@@ -1066,9 +1066,9 @@ read_value_memory (struct value *val, LONGEST bit_offset,
       if (status == TARGET_XFER_OK)
        /* nothing */;
       else if (status == TARGET_XFER_UNAVAILABLE)
-       mark_value_bits_unavailable (val, (xfered_total * HOST_CHAR_BIT
-                                          + bit_offset),
-                                    xfered_partial * HOST_CHAR_BIT);
+       val->mark_bits_unavailable ((xfered_total * HOST_CHAR_BIT
+                                    + bit_offset),
+                                   xfered_partial * HOST_CHAR_BIT);
       else if (status == TARGET_XFER_EOF)
        memory_error (TARGET_XFER_E_IO, memaddr + xfered_total);
       else
index ba62d3af41c6979f1b3579542b7312fa5e7e60d6..46d0aee1417e3353c0fb8245e78b47db47ef656b 100644 (file)
@@ -373,9 +373,8 @@ valprint_check_validity (struct ui_file *stream,
       && type->code () != TYPE_CODE_STRUCT
       && type->code () != TYPE_CODE_ARRAY)
     {
-      if (value_bits_any_optimized_out (val,
-                                       TARGET_CHAR_BIT * embedded_offset,
-                                       TARGET_CHAR_BIT * type->length ()))
+      if (val->bits_any_optimized_out (TARGET_CHAR_BIT * embedded_offset,
+                                      TARGET_CHAR_BIT * type->length ()))
        {
          val_print_optimized_out (val, stream);
          return 0;
@@ -403,7 +402,7 @@ valprint_check_validity (struct ui_file *stream,
          return is_ref;
        }
 
-      if (!value_bytes_available (val, embedded_offset, type->length ()))
+      if (!val->bytes_available (embedded_offset, type->length ()))
        {
          val_print_unavailable (stream);
          return 0;
@@ -1131,7 +1130,7 @@ value_check_printable (struct value *val, struct ui_file *stream,
       return 0;
     }
 
-  if (value_entirely_optimized_out (val))
+  if (val->entirely_optimized_out ())
     {
       if (options->summary && !val_print_scalar_type_p (val->type ()))
        gdb_printf (stream, "...");
@@ -1140,7 +1139,7 @@ value_check_printable (struct value *val, struct ui_file *stream,
       return 0;
     }
 
-  if (value_entirely_unavailable (val))
+  if (val->entirely_unavailable ())
     {
       if (options->summary && !val_print_scalar_type_p (val->type ()))
        gdb_printf (stream, "...");
@@ -1304,10 +1303,10 @@ value_print_scalar_formatted (struct value *val,
 
   /* A scalar object that does not have all bits available can't be
      printed, because all bits contribute to its representation.  */
-  if (value_bits_any_optimized_out (val, 0,
-                                   TARGET_CHAR_BIT * type->length ()))
+  if (val->bits_any_optimized_out (0,
+                                  TARGET_CHAR_BIT * type->length ()))
     val_print_optimized_out (val, stream);
-  else if (!value_bytes_available (val, 0, type->length ()))
+  else if (!val->bytes_available (0, type->length ()))
     val_print_unavailable (stream);
   else
     print_scalar_formatted (valaddr, type, options, size, stream);
@@ -2017,8 +2016,8 @@ value_print_array_elements (struct value *val, struct ui_file *stream,
         UINT_MAX (unlimited).  */
       if (options->repeat_count_threshold < UINT_MAX)
        {
-         bool unavailable = value_entirely_unavailable (element);
-         bool available = value_entirely_available (element);
+         bool unavailable = element->entirely_unavailable ();
+         bool available = element->entirely_available ();
 
          while (rep1 < len)
            {
@@ -2027,10 +2026,10 @@ value_print_array_elements (struct value *val, struct ui_file *stream,
                                                rep1 * bit_stride,
                                                bit_stride);
              bool repeated = ((available
-                               && value_entirely_available (rep_elt)
+                               && rep_elt->entirely_available ()
                                && element->contents_eq (rep_elt))
                               || (unavailable
-                                  && value_entirely_unavailable (rep_elt)));
+                                  && rep_elt->entirely_unavailable ()));
              if (!repeated)
                break;
              ++reps;
index b8a032ed30d04a993d5761d58633713aa9d3b13f..beda62d630faf1deb72f7ea102b7a188ef8de441 100644 (file)
@@ -169,23 +169,21 @@ value::arch () const
 }
 
 int
-value_bits_available (const struct value *value,
-                     LONGEST offset, ULONGEST length)
+value::bits_available (LONGEST offset, ULONGEST length) const
 {
-  gdb_assert (!value->m_lazy);
+  gdb_assert (!m_lazy);
 
   /* Don't pretend we have anything available there in the history beyond
      the boundaries of the value recorded.  It's not like inferior memory
      where there is actual stuff underneath.  */
-  ULONGEST val_len = TARGET_CHAR_BIT * value->enclosing_type ()->length ();
-  return !((value->m_in_history
+  ULONGEST val_len = TARGET_CHAR_BIT * enclosing_type ()->length ();
+  return !((m_in_history
            && (offset < 0 || offset + length > val_len))
-          || ranges_contain (value->m_unavailable, offset, length));
+          || ranges_contain (m_unavailable, offset, length));
 }
 
 int
-value_bytes_available (const struct value *value,
-                      LONGEST offset, ULONGEST length)
+value::bytes_available (LONGEST offset, ULONGEST length) const
 {
   ULONGEST sign = (1ULL << (sizeof (ULONGEST) * 8 - 1)) / TARGET_CHAR_BIT;
   ULONGEST mask = (sign << 1) - 1;
@@ -195,70 +193,52 @@ value_bytes_available (const struct value *value,
       || (length > 0 && (~offset & (offset + length - 1) & sign) != 0))
     error (_("Integer overflow in data location calculation"));
 
-  return value_bits_available (value,
-                              offset * TARGET_CHAR_BIT,
-                              length * TARGET_CHAR_BIT);
+  return bits_available (offset * TARGET_CHAR_BIT, length * TARGET_CHAR_BIT);
 }
 
 int
-value_bits_any_optimized_out (const struct value *value, int bit_offset, int bit_length)
+value::bits_any_optimized_out (int bit_offset, int bit_length) const
 {
-  gdb_assert (!value->m_lazy);
+  gdb_assert (!m_lazy);
 
-  return ranges_contain (value->m_optimized_out, bit_offset, bit_length);
+  return ranges_contain (m_optimized_out, bit_offset, bit_length);
 }
 
 int
-value_entirely_available (struct value *value)
+value::entirely_available ()
 {
   /* We can only tell whether the whole value is available when we try
      to read it.  */
-  if (value->m_lazy)
-    value->fetch_lazy ();
+  if (m_lazy)
+    fetch_lazy ();
 
-  if (value->m_unavailable.empty ())
+  if (m_unavailable.empty ())
     return 1;
   return 0;
 }
 
-/* Returns true if VALUE is entirely covered by RANGES.  If the value
-   is lazy, it'll be read now.  Note that RANGE is a pointer to
-   pointer because reading the value might change *RANGE.  */
+/* See value.h.  */
 
-static int
-value_entirely_covered_by_range_vector (struct value *value,
-                                       const std::vector<range> &ranges)
+int
+value::entirely_covered_by_range_vector (const std::vector<range> &ranges)
 {
   /* We can only tell whether the whole value is optimized out /
      unavailable when we try to read it.  */
-  if (value->m_lazy)
-    value->fetch_lazy ();
+  if (m_lazy)
+    fetch_lazy ();
 
   if (ranges.size () == 1)
     {
       const struct range &t = ranges[0];
 
       if (t.offset == 0
-         && t.length == (TARGET_CHAR_BIT
-                         * value->enclosing_type ()->length ()))
+         && t.length == TARGET_CHAR_BIT * enclosing_type ()->length ())
        return 1;
     }
 
   return 0;
 }
 
-int
-value_entirely_unavailable (struct value *value)
-{
-  return value_entirely_covered_by_range_vector (value, value->m_unavailable);
-}
-
-int
-value_entirely_optimized_out (struct value *value)
-{
-  return value_entirely_covered_by_range_vector (value, value->m_optimized_out);
-}
-
 /* Insert into the vector pointed to by VECTORP the bit range starting of
    OFFSET bits, and extending for the next LENGTH bits.  */
 
@@ -429,19 +409,16 @@ insert_into_bit_range_vector (std::vector<range> *vectorp,
 }
 
 void
-mark_value_bits_unavailable (struct value *value,
-                            LONGEST offset, ULONGEST length)
+value::mark_bits_unavailable (LONGEST offset, ULONGEST length)
 {
-  insert_into_bit_range_vector (&value->m_unavailable, offset, length);
+  insert_into_bit_range_vector (&m_unavailable, offset, length);
 }
 
 void
-mark_value_bytes_unavailable (struct value *value,
-                             LONGEST offset, ULONGEST length)
+value::mark_bytes_unavailable (LONGEST offset, ULONGEST length)
 {
-  mark_value_bits_unavailable (value,
-                              offset * TARGET_CHAR_BIT,
-                              length * TARGET_CHAR_BIT);
+  mark_bits_unavailable (offset * TARGET_CHAR_BIT,
+                        length * TARGET_CHAR_BIT);
 }
 
 /* Find the first range in RANGES that overlaps the range defined by
@@ -1012,7 +989,7 @@ value::allocate_optimized_out (struct type *type)
 {
   struct value *retval = value::allocate_lazy (type);
 
-  mark_value_bytes_optimized_out (retval, 0, type->length ());
+  retval->mark_bytes_optimized_out (0, type->length ());
   retval->set_lazy (0);
   return retval;
 }
@@ -1061,7 +1038,7 @@ value_actual_type (struct value *value, int resolve_simple_types,
       if (result->is_pointer_or_reference ()
          && (check_typedef (result->target_type ())->code ()
              == TYPE_CODE_STRUCT)
-         && !value_optimized_out (value))
+         && !value->optimized_out ())
        {
          struct type *real_type;
 
@@ -1204,10 +1181,9 @@ value_contents_copy_raw (struct value *dst, LONGEST dst_offset,
   /* The overwritten DST range gets unavailability ORed in, not
      replaced.  Make sure to remember to implement replacing if it
      turns out actually necessary.  */
-  gdb_assert (value_bytes_available (dst, dst_offset, length));
-  gdb_assert (!value_bits_any_optimized_out (dst,
-                                            TARGET_CHAR_BIT * dst_offset,
-                                            TARGET_CHAR_BIT * length));
+  gdb_assert (dst->bytes_available (dst_offset, length));
+  gdb_assert (!dst->bits_any_optimized_out (TARGET_CHAR_BIT * dst_offset,
+                                           TARGET_CHAR_BIT * length));
 
   /* Copy the data.  */
   gdb::array_view<gdb_byte> dst_contents
@@ -1247,9 +1223,9 @@ value_contents_copy_raw_bitwise (struct value *dst, LONGEST dst_bit_offset,
      turns out actually necessary.  */
   LONGEST dst_offset = dst_bit_offset / TARGET_CHAR_BIT;
   LONGEST length = bit_length / TARGET_CHAR_BIT;
-  gdb_assert (value_bytes_available (dst, dst_offset, length));
-  gdb_assert (!value_bits_any_optimized_out (dst, dst_bit_offset,
-                                            bit_length));
+  gdb_assert (dst->bytes_available (dst_offset, length));
+  gdb_assert (!dst->bits_any_optimized_out (dst_bit_offset,
+                                           bit_length));
 
   /* Copy the data.  */
   gdb::array_view<gdb_byte> dst_contents = dst->contents_all_raw ();
@@ -1303,26 +1279,26 @@ value::contents_writeable ()
 }
 
 int
-value_optimized_out (struct value *value)
+value::optimized_out ()
 {
-  if (value->m_lazy)
+  if (m_lazy)
     {
       /* See if we can compute the result without fetching the
         value.  */
-      if (VALUE_LVAL (value) == lval_memory)
+      if (VALUE_LVAL (this) == lval_memory)
        return false;
-      else if (VALUE_LVAL (value) == lval_computed)
+      else if (VALUE_LVAL (this) == lval_computed)
        {
-         const struct lval_funcs *funcs = value->m_location.computed.funcs;
+         const struct lval_funcs *funcs = m_location.computed.funcs;
 
          if (funcs->is_optimized_out != nullptr)
-           return funcs->is_optimized_out (value);
+           return funcs->is_optimized_out (this);
        }
 
       /* Fall back to fetching.  */
       try
        {
-         value->fetch_lazy ();
+         fetch_lazy ();
        }
       catch (const gdb_exception_error &ex)
        {
@@ -1341,27 +1317,25 @@ value_optimized_out (struct value *value)
        }
     }
 
-  return !value->m_optimized_out.empty ();
+  return !m_optimized_out.empty ();
 }
 
 /* Mark contents of VALUE as optimized out, starting at OFFSET bytes, and
    the following LENGTH bytes.  */
 
 void
-mark_value_bytes_optimized_out (struct value *value, int offset, int length)
+value::mark_bytes_optimized_out (int offset, int length)
 {
-  mark_value_bits_optimized_out (value,
-                                offset * TARGET_CHAR_BIT,
-                                length * TARGET_CHAR_BIT);
+  mark_bits_optimized_out (offset * TARGET_CHAR_BIT,
+                          length * TARGET_CHAR_BIT);
 }
 
 /* See value.h.  */
 
 void
-mark_value_bits_optimized_out (struct value *value,
-                              LONGEST offset, LONGEST length)
+value::mark_bits_optimized_out (LONGEST offset, LONGEST length)
 {
-  insert_into_bit_range_vector (&value->m_optimized_out, offset, length);
+  insert_into_bit_range_vector (&m_optimized_out, offset, length);
 }
 
 int
@@ -1546,8 +1520,8 @@ value::copy () const
   val->m_limited_length = m_limited_length;
 
   if (!val->lazy ()
-      && !(value_entirely_optimized_out (val)
-          || value_entirely_unavailable (val)))
+      && !(val->entirely_optimized_out ()
+          || val->entirely_unavailable ()))
     {
       ULONGEST length = val->m_limited_length;
       if (length == 0)
@@ -1721,8 +1695,8 @@ record_latest_value (struct value *val)
 
   ULONGEST limit = val->m_limited_length;
   if (limit != 0)
-    mark_value_bytes_unavailable (val, limit,
-                                 enclosing_type->length () - limit);
+    val->mark_bytes_unavailable (limit,
+                                enclosing_type->length () - limit);
 
   /* Mark the value as recorded in the history for the availability check.  */
   val->m_in_history = true;
@@ -3159,8 +3133,8 @@ unpack_value_field_as_long (struct type *type, const gdb_byte *valaddr,
   gdb_assert (val != NULL);
 
   bit_offset = embedded_offset * TARGET_CHAR_BIT + bitpos;
-  if (value_bits_any_optimized_out (val, bit_offset, bitsize)
-      || !value_bits_available (val, bit_offset, bitsize))
+  if (val->bits_any_optimized_out (bit_offset, bitsize)
+      || !val->bits_available (bit_offset, bitsize))
     return 0;
 
   *result = unpack_bits_as_long (field_type, valaddr + embedded_offset,
@@ -3905,7 +3879,7 @@ value::fetch_lazy_register ()
                  user_reg_map_regnum_to_name (gdbarch, regnum));
 
       gdb_printf (&debug_file, "->");
-      if (value_optimized_out (new_val))
+      if (new_val->optimized_out ())
        {
          gdb_printf (&debug_file, " ");
          val_print_optimized_out (new_val, &debug_file);
@@ -4174,8 +4148,8 @@ test_value_copy ()
   value_ref_ptr val = release_value (value::allocate_optimized_out (type));
   value_ref_ptr copy = release_value (val.get ()->copy ());
 
-  SELF_CHECK (value_entirely_optimized_out (val.get ()));
-  SELF_CHECK (value_entirely_optimized_out (copy.get ()));
+  SELF_CHECK (val.get ()->entirely_optimized_out ());
+  SELF_CHECK (copy.get ()->entirely_optimized_out ());
 }
 
 } /* namespace selftests */
index 6b0250c0e51fa9a5768171528753c1cf3340e63f..4ecaeb7c607a32c2ad3a80314aac6b4dea8a1427 100644 (file)
@@ -262,7 +262,6 @@ public:
   void set_lazy (int val)
   { m_lazy = val; }
 
-
   /* If a value represents a C++ object, then the `type' field gives the
      object's compile-time type.  If the object actually belongs to some
      class derived from `type', perhaps with other base classes and
@@ -479,6 +478,60 @@ public:
      drops to 0, it will be freed.  */
   void decref ();
 
+  /* Given a value, determine whether the contents bytes starting at
+     OFFSET and extending for LENGTH bytes are available.  This returns
+     nonzero if all bytes in the given range are available, zero if any
+     byte is unavailable.  */
+  int bytes_available (LONGEST offset, ULONGEST length) const;
+
+  /* Given a value, determine whether the contents bits starting at
+     OFFSET and extending for LENGTH bits are available.  This returns
+     nonzero if all bits in the given range are available, zero if any
+     bit is unavailable.  */
+  int bits_available (LONGEST offset, ULONGEST length) const;
+
+  /* Like bytes_available, but return false if any byte in the
+     whole object is unavailable.  */
+  int entirely_available ();
+
+  /* Like entirely_available, but return false if any byte in the
+     whole object is available.  */
+  int entirely_unavailable ()
+  { return entirely_covered_by_range_vector (m_unavailable); }
+
+  /* Mark this value's content bytes starting at OFFSET and extending
+     for LENGTH bytes as unavailable.  */
+  void mark_bytes_unavailable (LONGEST offset, ULONGEST length);
+
+  /* Mark this value's content bits starting at OFFSET and extending
+     for LENGTH bits as unavailable.  */
+  void mark_bits_unavailable (LONGEST offset, ULONGEST length);
+
+  /* If nonzero, this is the value of a variable which does not actually
+     exist in the program, at least partially.  If the value is lazy,
+     this may fetch it now.  */
+  int optimized_out ();
+
+  /* Given a value, return true if any of the contents bits starting at
+     OFFSET and extending for LENGTH bits is optimized out, false
+     otherwise.  */
+  int bits_any_optimized_out (int bit_offset, int bit_length) const;
+
+  /* Like optimized_out, but return true iff the whole value is
+     optimized out.  */
+  int entirely_optimized_out ()
+  {
+    return entirely_covered_by_range_vector (m_optimized_out);
+  }
+
+  /* Mark this value's content bytes starting at OFFSET and extending
+     for LENGTH bytes as optimized out.  */
+  void mark_bytes_optimized_out (int offset, int length);
+
+  /* Mark this value's content bits starting at OFFSET and extending
+     for LENGTH bits as optimized out.  */
+  void mark_bits_optimized_out (LONGEST offset, LONGEST length);
+
 
   /* Type of value; either not an lval, or one of the various
      different possible kinds of lval.  */
@@ -697,6 +750,11 @@ private:
 
   void require_not_optimized_out () const;
   void require_available () const;
+
+  /* Returns true if this value is entirely covered by RANGES.  If the
+     value is lazy, it'll be read now.  Note that RANGE is a pointer
+     to pointer because reading the value might change *RANGE.  */
+  int entirely_covered_by_range_vector (const std::vector<range> &ranges);
 };
 
 inline void
@@ -793,34 +851,6 @@ struct lval_funcs
 
 extern void error_value_optimized_out (void);
 
-/* If nonzero, this is the value of a variable which does not actually
-   exist in the program, at least partially.  If the value is lazy,
-   this may fetch it now.  */
-extern int value_optimized_out (struct value *value);
-
-/* Given a value, return true if any of the contents bits starting at
-   OFFSET and extending for LENGTH bits is optimized out, false
-   otherwise.  */
-
-extern int value_bits_any_optimized_out (const struct value *value,
-                                        int bit_offset, int bit_length);
-
-/* Like value_optimized_out, but return true iff the whole value is
-   optimized out.  */
-extern int value_entirely_optimized_out (struct value *value);
-
-/* Mark VALUE's content bytes starting at OFFSET and extending for
-   LENGTH bytes as optimized out.  */
-
-extern void mark_value_bytes_optimized_out (struct value *value,
-                                           int offset, int length);
-
-/* Mark VALUE's content bits starting at OFFSET and extending for
-   LENGTH bits as optimized out.  */
-
-extern void mark_value_bits_optimized_out (struct value *value,
-                                          LONGEST offset, LONGEST length);
-
 /* Set COMPONENT's location as appropriate for a component of WHOLE
    --- regardless of what kind of lvalue WHOLE is.  */
 extern void set_value_component_location (struct value *component,
@@ -877,42 +907,6 @@ extern struct value *coerce_ref (struct value *value);
 
 extern struct value *coerce_array (struct value *value);
 
-/* Given a value, determine whether the contents bytes starting at
-   OFFSET and extending for LENGTH bytes are available.  This returns
-   nonzero if all bytes in the given range are available, zero if any
-   byte is unavailable.  */
-
-extern int value_bytes_available (const struct value *value,
-                                 LONGEST offset, ULONGEST length);
-
-/* Given a value, determine whether the contents bits starting at
-   OFFSET and extending for LENGTH bits are available.  This returns
-   nonzero if all bits in the given range are available, zero if any
-   bit is unavailable.  */
-
-extern int value_bits_available (const struct value *value,
-                                LONGEST offset, ULONGEST length);
-
-/* Like value_bytes_available, but return false if any byte in the
-   whole object is unavailable.  */
-extern int value_entirely_available (struct value *value);
-
-/* Like value_entirely_available, but return false if any byte in the
-   whole object is available.  */
-extern int value_entirely_unavailable (struct value *value);
-
-/* Mark VALUE's content bytes starting at OFFSET and extending for
-   LENGTH bytes as unavailable.  */
-
-extern void mark_value_bytes_unavailable (struct value *value,
-                                         LONGEST offset, ULONGEST length);
-
-/* Mark VALUE's content bits starting at OFFSET and extending for
-   LENGTH bits as unavailable.  */
-
-extern void mark_value_bits_unavailable (struct value *value,
-                                        LONGEST offset, ULONGEST length);
-
 /* Read LENGTH addressable memory units starting at MEMADDR into BUFFER,
    which is (or will be copied to) VAL's contents buffer offset by
    BIT_OFFSET bits.  Marks value contents ranges as unavailable if