Turn value_non_lval and value_force_lval into methods
authorTom Tromey <tom@tromey.com>
Tue, 31 Jan 2023 23:23:22 +0000 (16:23 -0700)
committerTom Tromey <tom@tromey.com>
Mon, 13 Feb 2023 22:22:17 +0000 (15:22 -0700)
This changes value_non_lval and value_force_lval to be methods of
value.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
gdb/eval.c
gdb/infcall.c
gdb/value.c
gdb/value.h

index dca98d07fbed7583faa91c1483a46a119cbc6209..808cc916bb45577fb82e537ba73a96c423727d47 100644 (file)
@@ -111,7 +111,7 @@ expression::evaluate (struct type *expect_type, enum noside noside)
 
   if (stack_temporaries.has_value ()
       && value_in_thread_stack_temporaries (retval, inferior_thread ()))
-    retval = value_non_lval (retval);
+    retval = retval->non_lval ();
 
   return retval;
 }
@@ -1820,7 +1820,7 @@ eval_op_postinc (struct type *expect_type, struct expression *exp,
     }
   else
     {
-      struct value *arg3 = value_non_lval (arg1);
+      struct value *arg3 = arg1->non_lval ();
       struct value *arg2;
 
       if (ptrmath_type_p (exp->language_defn, arg1->type ()))
@@ -1854,7 +1854,7 @@ eval_op_postdec (struct type *expect_type, struct expression *exp,
     }
   else
     {
-      struct value *arg3 = value_non_lval (arg1);
+      struct value *arg3 = arg1->non_lval ();
       struct value *arg2;
 
       if (ptrmath_type_p (exp->language_defn, arg1->type ()))
index d6992228498e745b6880dfe341b6cdd755dab60b..81a073d2123c37e925b83030d23900c0889f4512 100644 (file)
@@ -492,7 +492,7 @@ get_call_return_value (struct call_return_meta_info *ri)
             requiring GDB to evaluate the "this" pointer.  To evaluate
             the this pointer, GDB needs the memory address of the
             value.  */
-         value_force_lval (retval, ri->struct_addr);
+         retval->force_lval (ri->struct_addr);
          push_thread_stack_temporary (thr, retval);
        }
     }
index beda62d630faf1deb72f7ea102b7a188ef8de441..15bf84c7a9d5c9b178d45d13c9d43166814d435f 100644 (file)
@@ -1567,35 +1567,35 @@ make_cv_value (int cnst, int voltl, struct value *v)
   return cv_val;
 }
 
-/* Return a version of ARG that is non-lvalue.  */
+/* See value.h.  */
 
 struct value *
-value_non_lval (struct value *arg)
+value::non_lval ()
 {
-  if (VALUE_LVAL (arg) != not_lval)
+  if (VALUE_LVAL (this) != not_lval)
     {
-      struct type *enc_type = arg->enclosing_type ();
+      struct type *enc_type = enclosing_type ();
       struct value *val = value::allocate (enc_type);
 
-      gdb::copy (arg->contents_all (), val->contents_all_raw ());
-      val->m_type = arg->m_type;
-      val->set_embedded_offset (arg->embedded_offset ());
-      val->set_pointed_to_offset (arg->pointed_to_offset ());
+      gdb::copy (contents_all (), val->contents_all_raw ());
+      val->m_type = m_type;
+      val->set_embedded_offset (embedded_offset ());
+      val->set_pointed_to_offset (pointed_to_offset ());
       return val;
     }
-   return arg;
+  return this;
 }
 
-/* Write contents of V at ADDR and set its lval type to be LVAL_MEMORY.  */
+/* See value.h.  */
 
 void
-value_force_lval (struct value *v, CORE_ADDR addr)
+value::force_lval (CORE_ADDR addr)
 {
-  gdb_assert (VALUE_LVAL (v) == not_lval);
+  gdb_assert (VALUE_LVAL (this) == not_lval);
 
-  write_memory (addr, v->contents_raw ().data (), v->type ()->length ());
-  v->m_lval = lval_memory;
-  v->m_location.address = addr;
+  write_memory (addr, contents_raw ().data (), type ()->length ());
+  m_lval = lval_memory;
+  m_location.address = addr;
 }
 
 void
index 4ecaeb7c607a32c2ad3a80314aac6b4dea8a1427..6cc845c42b88db6d50fcb2d29604cd9315e16632 100644 (file)
@@ -532,6 +532,13 @@ public:
      for LENGTH bits as optimized out.  */
   void mark_bits_optimized_out (LONGEST offset, LONGEST length);
 
+  /* Return a version of this that is non-lvalue.  */
+  struct value *non_lval ();
+
+  /* Write contents of this value at ADDR and set its lval type to be
+     LVAL_MEMORY.  */
+  void force_lval (CORE_ADDR);
+
 
   /* Type of value; either not an lval, or one of the various
      different possible kinds of lval.  */
@@ -1446,10 +1453,6 @@ extern void preserve_values (struct objfile *);
 
 /* From values.c */
 
-extern struct value *value_non_lval (struct value *);
-
-extern void value_force_lval (struct value *, CORE_ADDR);
-
 extern struct value *make_cv_value (int, int, struct value *);
 
 extern void preserve_one_value (struct value *, struct objfile *, htab_t);