2009-01-13 Jim Blandy <jimb@codesourcery.com>
authorPedro Alves <palves@redhat.com>
Tue, 13 Jan 2009 10:34:31 +0000 (10:34 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 13 Jan 2009 10:34:31 +0000 (10:34 +0000)
Abstract out common code for copying value locations.

* value.h (set_value_component_location): New declaration.
* value.c (set_value_component_location): New function.
(value_primitive_field): Use it.
* valarith.c (value_subscript, value_subscripted_rvalue): Same.
* valops.c (search_struct_field, value_slice): Same.
* ada-lang.c (coerce_unspec_val_to_type)
(ada_value_primitive_packed_val): Same.

gdb/ChangeLog
gdb/ada-lang.c
gdb/valarith.c
gdb/valops.c
gdb/value.c
gdb/value.h

index f3a69382b3c0001e80e6e664f2a201ef9482b049..4fcbeda14f28cafff16aa6ad7430005a9a44ab6d 100644 (file)
@@ -1,3 +1,15 @@
+2009-01-13  Jim Blandy  <jimb@codesourcery.com>
+
+       Abstract out common code for copying value locations.
+
+       * value.h (set_value_component_location): New declaration.
+       * value.c (set_value_component_location): New function.
+       (value_primitive_field): Use it.
+       * valarith.c (value_subscript, value_subscripted_rvalue): Same.
+       * valops.c (search_struct_field, value_slice): Same.
+       * ada-lang.c (coerce_unspec_val_to_type)
+       (ada_value_primitive_packed_val): Same.
+
 2009-01-13  Joel Brobecker  <brobecker@adacore.com>
 
        * MAINTAINERS (GLOBAL MAINTAINERS): Add Tom Tromey.
index 71d99b0ae3fe179cadcf95160840ab17a5d58d79..656e771e9b54c59e9311f8b800609b5153531025 100644 (file)
@@ -483,10 +483,10 @@ coerce_unspec_val_to_type (struct value *val, struct type *type)
       check_size (type);
 
       result = allocate_value (type);
-      VALUE_LVAL (result) = VALUE_LVAL (val);
+      set_value_component_location (result, val);
       set_value_bitsize (result, value_bitsize (val));
       set_value_bitpos (result, value_bitpos (val));
-      VALUE_ADDRESS (result) = VALUE_ADDRESS (val) + value_offset (val);
+      VALUE_ADDRESS (result) += value_offset (val);
       if (value_lazy (val)
           || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val)))
         set_value_lazy (result, 1);
@@ -2018,10 +2018,8 @@ ada_value_primitive_packed_val (struct value *obj, const gdb_byte *valaddr,
 
   if (obj != NULL)
     {
-      VALUE_LVAL (v) = VALUE_LVAL (obj);
-      if (VALUE_LVAL (obj) == lval_internalvar)
-        VALUE_LVAL (v) = lval_internalvar_component;
-      VALUE_ADDRESS (v) = VALUE_ADDRESS (obj) + value_offset (obj) + offset;
+      set_value_component_location (v, obj);
+      VALUE_ADDRESS (v) += value_offset (obj) + offset;
       set_value_bitpos (v, bit_offset + value_bitpos (obj));
       set_value_bitsize (v, bit_size);
       if (value_bitpos (v) >= HOST_CHAR_BIT)
index 48f2e95513d7799a4209e7f7700d812cb397c020..f38cdb842fcd40d93b9e097ee5fe81cc6ac89a2e 100644 (file)
@@ -233,11 +233,7 @@ value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound
     memcpy (value_contents_writeable (v),
            value_contents (array) + elt_offs, elt_size);
 
-  if (VALUE_LVAL (array) == lval_internalvar)
-    VALUE_LVAL (v) = lval_internalvar_component;
-  else
-    VALUE_LVAL (v) = VALUE_LVAL (array);
-  VALUE_ADDRESS (v) = VALUE_ADDRESS (array);
+  set_value_component_location (v, array);
   VALUE_REGNUM (v) = VALUE_REGNUM (array);
   VALUE_FRAME_ID (v) = VALUE_FRAME_ID (array);
   set_value_offset (v, value_offset (array) + elt_offs);
@@ -277,11 +273,7 @@ value_bitstring_subscript (struct type *type,
 
   set_value_bitpos (v, bit_index);
   set_value_bitsize (v, 1);
-
-  VALUE_LVAL (v) = VALUE_LVAL (bitstring);
-  if (VALUE_LVAL (bitstring) == lval_internalvar)
-    VALUE_LVAL (v) = lval_internalvar_component;
-  VALUE_ADDRESS (v) = VALUE_ADDRESS (bitstring);
+  set_value_component_location (v, bitstring);
   VALUE_FRAME_ID (v) = VALUE_FRAME_ID (bitstring);
 
   set_value_offset (v, offset + value_offset (bitstring));
index fe011d044625debaa79d193115b53f8f3801253b..30e74fa9f99e3d5d2197e2b411a8e6c3511f3d78 100644 (file)
@@ -1575,8 +1575,7 @@ search_struct_field (char *name, struct value *arg1, int offset,
                          value_contents_raw (arg1) + boffset,
                          TYPE_LENGTH (basetype));
                }
-             VALUE_LVAL (v2) = VALUE_LVAL (arg1);
-             VALUE_ADDRESS (v2) = VALUE_ADDRESS (arg1);
+             set_value_component_location (v2, arg1);
              VALUE_FRAME_ID (v2) = VALUE_FRAME_ID (arg1);
              set_value_offset (v2, value_offset (arg1) + boffset);
            }
@@ -2984,12 +2983,7 @@ value_slice (struct value *array, int lowbound, int length)
                  TYPE_LENGTH (slice_type));
        }
 
-      if (VALUE_LVAL (array) == lval_internalvar)
-       VALUE_LVAL (slice) = lval_internalvar_component;
-      else
-       VALUE_LVAL (slice) = VALUE_LVAL (array);
-
-      VALUE_ADDRESS (slice) = VALUE_ADDRESS (array);
+      set_value_component_location (slice, array);
       VALUE_FRAME_ID (slice) = VALUE_FRAME_ID (array);
       set_value_offset (slice, value_offset (array) + offset);
     }
index 1068f1d67d1f7f605300608912562ead0d5523f9..f0c8463dc545933ca5ad7025e7dbb6b4096b5e82 100644 (file)
@@ -627,6 +627,17 @@ value_copy (struct value *arg)
     }
   return val;
 }
+
+void
+set_value_component_location (struct value *component, struct value *whole)
+{
+  if (VALUE_LVAL (whole) == lval_internalvar)
+    VALUE_LVAL (component) = lval_internalvar_component;
+  else
+    VALUE_LVAL (component) = VALUE_LVAL (whole);
+  component->location = whole->location;
+}
+
 \f
 /* Access to the value history.  */
 
@@ -1426,10 +1437,7 @@ value_primitive_field (struct value *arg1, int offset,
       v->offset = (value_offset (arg1) + offset
                   + value_embedded_offset (arg1));
     }
-  VALUE_LVAL (v) = VALUE_LVAL (arg1);
-  if (VALUE_LVAL (arg1) == lval_internalvar)
-    VALUE_LVAL (v) = lval_internalvar_component;
-  v->location = arg1->location;
+  set_value_component_location (v, arg1);
   VALUE_REGNUM (v) = VALUE_REGNUM (arg1);
   VALUE_FRAME_ID (v) = VALUE_FRAME_ID (arg1);
   return v;
index 4c28aa255dd01aa476afeb1773c4e80009ab3225..ecdcf259d7b56cded505bdb49d19e3c19bc45fe5 100644 (file)
@@ -205,6 +205,11 @@ extern void set_value_optimized_out (struct value *value, int val);
 extern int value_initialized (struct value *);
 extern void set_value_initialized (struct value *, int);
 
+/* 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,
+                                          struct value *whole);
+
 /* While the following fields are per- VALUE .CONTENT .PIECE (i.e., a
    single value might have multiple LVALs), this hacked interface is
    limited to just the first PIECE.  Expect further change.  */
This page took 0.041146 seconds and 4 git commands to generate.