public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v3 45/50] Turn record_latest_value into a method
Date: Sun, 12 Feb 2023 20:16:01 -0700	[thread overview]
Message-ID: <20230209-submit-value-fixups-2023-v3-45-45e91a20c742@tromey.com> (raw)
In-Reply-To: <20230209-submit-value-fixups-2023-v3-0-45e91a20c742@tromey.com>

record_latest_value now access some internals of struct value, so turn
it into a method.
---
 gdb/arc-tdep.c        |  2 +-
 gdb/guile/scm-value.c |  2 +-
 gdb/infcmd.c          |  2 +-
 gdb/printcmd.c        |  2 +-
 gdb/python/py-value.c |  2 +-
 gdb/value.c           | 30 +++++++++++++-----------------
 gdb/value.h           |  5 +++--
 7 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
index bbdcb8d4ce6..bbf4846a8f8 100644
--- a/gdb/arc-tdep.c
+++ b/gdb/arc-tdep.c
@@ -2437,7 +2437,7 @@ dump_arc_instruction_command (const char *args, int from_tty)
     val = evaluate_expression (parse_expression (args).get ());
   else
     val = access_value_history (0);
-  record_latest_value (val);
+  val->record_latest ();
 
   CORE_ADDR address = value_as_address (val);
   struct arc_instruction insn;
diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c
index a0b7e6661b5..ac948dcd1a2 100644
--- a/gdb/guile/scm-value.c
+++ b/gdb/guile/scm-value.c
@@ -1330,7 +1330,7 @@ gdbscm_history_append_x (SCM value)
     = vlscm_get_value_smob_arg_unsafe (value, SCM_ARG1, FUNC_NAME);
   return gdbscm_wrap ([=]
     {
-      return scm_from_int (record_latest_value (v_smob->value));
+      return scm_from_int (v_smob->value->record_latest ());
     });
 }
 \f
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 3943a562590..a851fe1f8c8 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1657,7 +1657,7 @@ finish_command_fsm::should_stop (struct thread_info *tp)
 	      rv->value = get_return_value (function, func);
 
 	  if (rv->value != nullptr)
-	    rv->value_history_index = record_latest_value (rv->value);
+	    rv->value_history_index = rv->value->record_latest ();
 	}
     }
   else if (tp->control.stop_step)
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 0b3c2e00b4c..58047c7bd02 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -1247,7 +1247,7 @@ print_value (value *val, const value_print_options &opts)
      need to load as many array elements as we plan to print.  */
   scoped_array_length_limiting limit_large_arrays (opts.print_max);
 
-  int histindex = record_latest_value (val);
+  int histindex = val->record_latest ();
 
   annotate_value_history_begin (histindex, val->type ());
 
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 658a9a3f18c..c61de577de1 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -1959,7 +1959,7 @@ gdbpy_add_history (PyObject *self, PyObject *args)
 
   try
     {
-      int idx = record_latest_value (value);
+      int idx = value->record_latest ();
       return gdb_py_object_from_longest (idx).release ();
     }
   catch (const gdb_exception &except)
diff --git a/gdb/value.c b/gdb/value.c
index 640053ddce5..a1ab853bcd1 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -1643,46 +1643,42 @@ value::set_component_location (const struct value *whole)
    Returns the absolute history index of the entry.  */
 
 int
-record_latest_value (struct value *val)
+value::record_latest ()
 {
-  struct type *enclosing_type = val->enclosing_type ();
-  struct type *type = val->type ();
-
   /* We don't want this value to have anything to do with the inferior anymore.
      In particular, "set $1 = 50" should not affect the variable from which
      the value was taken, and fast watchpoints should be able to assume that
      a value on the value history never changes.  */
-  if (val->lazy ())
+  if (lazy ())
     {
       /* We know that this is a _huge_ array, any attempt to fetch this
 	 is going to cause GDB to throw an error.  However, to allow
 	 the array to still be displayed we fetch its contents up to
 	 `max_value_size' and mark anything beyond "unavailable" in
 	 the history.  */
-      if (type->code () == TYPE_CODE_ARRAY
-	  && type->length () > max_value_size
+      if (m_type->code () == TYPE_CODE_ARRAY
+	  && m_type->length () > max_value_size
 	  && array_length_limiting_element_count.has_value ()
-	  && enclosing_type == type
-	  && calculate_limited_array_length (type) <= max_value_size)
-	val->m_limited_length = max_value_size;
+	  && m_enclosing_type == m_type
+	  && calculate_limited_array_length (m_type) <= max_value_size)
+	m_limited_length = max_value_size;
 
-      val->fetch_lazy ();
+      fetch_lazy ();
     }
 
-  ULONGEST limit = val->m_limited_length;
+  ULONGEST limit = m_limited_length;
   if (limit != 0)
-    val->mark_bytes_unavailable (limit,
-				 enclosing_type->length () - limit);
+    mark_bytes_unavailable (limit, m_enclosing_type->length () - limit);
 
   /* Mark the value as recorded in the history for the availability check.  */
-  val->m_in_history = true;
+  m_in_history = true;
 
   /* We preserve VALUE_LVAL so that the user can find out where it was fetched
      from.  This is a bit dubious, because then *&$1 does not just return $1
      but the current contents of that location.  c'est la vie...  */
-  val->set_modifiable (0);
+  set_modifiable (0);
 
-  value_history.push_back (release_value (val));
+  value_history.push_back (release_value (this));
 
   return value_history.size ();
 }
diff --git a/gdb/value.h b/gdb/value.h
index f35bfc7206c..225a3c851c4 100644
--- a/gdb/value.h
+++ b/gdb/value.h
@@ -605,6 +605,9 @@ struct value
 					LONGEST bit_offset,
 					LONGEST bit_length);
 
+  /* Record this value on the value history, and return its location
+     in the history.  The value is removed from the value chain.  */
+  int record_latest ();
 
   /* Type of value; either not an lval, or one of the various
      different possible kinds of lval.  */
@@ -1451,8 +1454,6 @@ extern int destructor_name_p (const char *name, struct type *type);
 
 extern value_ref_ptr release_value (struct value *val);
 
-extern int record_latest_value (struct value *val);
-
 extern void modify_field (struct type *type, gdb_byte *addr,
 			  LONGEST fieldval, LONGEST bitpos, LONGEST bitsize);
 

-- 
2.39.1


  parent reply	other threads:[~2023-02-13  3:54 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-13  3:15 [PATCH v3 00/50] Use methods for struct value Tom Tromey
2023-02-13  3:15 ` [PATCH v3 01/50] Automatic date update in version.in Tom Tromey
2023-02-13  3:24   ` Tom Tromey
2023-02-13  3:15 ` [PATCH v3 02/50] Rename all fields of struct value Tom Tromey
2023-02-13  3:15 ` [PATCH v3 03/50] Move ~value body out-of-line Tom Tromey
2023-02-13  3:15 ` [PATCH v3 04/50] Move struct value to value.h Tom Tromey
2023-02-13  3:15 ` [PATCH v3 05/50] Turn value_type into method Tom Tromey
2023-02-13  3:15 ` [PATCH v3 06/50] Turn deprecated_set_value_type into a method Tom Tromey
2023-02-13  3:15 ` [PATCH v3 07/50] Turn value_arch into method Tom Tromey
2023-02-13  3:15 ` [PATCH v3 08/50] Turn value_bitsize " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 09/50] Turn value_bitpos " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 10/50] Turn value_parent " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 11/50] Turn value_offset " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 12/50] Turn deprecated_value_modifiable " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 13/50] Turn value_enclosing_type " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 14/50] Turn some value offset functions " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 15/50] Turn value_lazy and set_value_lazy functions into methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 16/50] Turn value_stack and set_value_stack " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 17/50] Turn value_computed_closure and value_computed_funcs " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 18/50] Convert value_lval_const and deprecated_lval_hack to methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 19/50] Turn value_initialized and set_value_initialized functions into methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 20/50] Turn value_address and set_value_address " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 21/50] Turn more deprecated_* " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 22/50] Turn allocate_value_lazy into a static "constructor" Tom Tromey
2023-02-13  3:15 ` [PATCH v3 23/50] Turn allocate_value " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 24/50] Turn allocate_computed_value into " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 25/50] Turn allocate_optimized_out_value " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 26/50] Turn value_zero " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 27/50] Turn some value_contents functions into methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 28/50] Turn value_fetch_lazy into a method Tom Tromey
2023-02-13 17:35   ` Simon Marchi
2023-02-13  3:15 ` [PATCH v3 29/50] Turn allocate_value_contents " Tom Tromey
2023-02-13 17:37   ` Simon Marchi
2023-02-13  3:15 ` [PATCH v3 30/50] Turn value_contents_eq " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 31/50] Turn value_bits_synthetic_pointer " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 32/50] Move value_ref_policy methods out-of-line Tom Tromey
2023-02-13  3:15 ` [PATCH v3 33/50] Turn value_incref and value_decref into methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 34/50] Turn remaining value_contents functions " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 35/50] Fully qualify calls to copy in value.c Tom Tromey
2023-02-13  3:15 ` [PATCH v3 36/50] Turn value_copy into a method Tom Tromey
2023-02-13  3:15 ` [PATCH v3 37/50] Turn many optimized-out value functions into methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 38/50] Turn value_non_lval and value_force_lval " Tom Tromey
2023-02-13  3:15 ` [PATCH v3 39/50] Turn set_value_component_location into method Tom Tromey
2023-02-13  3:15 ` [PATCH v3 40/50] Change some code to use value methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 41/50] Turn some xmethod functions into methods Tom Tromey
2023-02-13  3:15 ` [PATCH v3 42/50] Turn preserve_one_value into method Tom Tromey
2023-02-13  3:15 ` [PATCH v3 43/50] Turn various value copying-related functions into methods Tom Tromey
2023-02-13  3:16 ` [PATCH v3 44/50] Add value::set_modifiable Tom Tromey
2023-02-13  3:16 ` Tom Tromey [this message]
2023-02-13 17:38   ` [PATCH v3 45/50] Turn record_latest_value into a method Simon Marchi
2023-02-13  3:16 ` [PATCH v3 46/50] Make struct value data members private Tom Tromey
2023-02-13  3:16 ` [PATCH v3 47/50] Make ~value private Tom Tromey
2023-02-13  3:16 ` [PATCH v3 48/50] Introduce set_lval method on value Tom Tromey
2023-02-13  3:16 ` [PATCH v3 49/50] Remove deprecated_lval_hack Tom Tromey
2023-02-13 22:26 ` [PATCH v3 00/50] Use methods for struct value Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230209-submit-value-fixups-2023-v3-45-45e91a20c742@tromey.com \
    --to=tom@tromey.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).