OSDN Git Service

* value.c (get_internalvar_integer): Also return the int value of
authorpalves <palves>
Mon, 14 Feb 2011 20:25:12 +0000 (20:25 +0000)
committerpalves <palves>
Mon, 14 Feb 2011 20:25:12 +0000 (20:25 +0000)
TYPE_CODE_INT INTERNALVAR_VALUE values.
(set_internalvar): Don't special case TYPE_CODE_INT.

gdb/ChangeLog
gdb/value.c

index 34200b0..106835a 100644 (file)
@@ -1,5 +1,11 @@
 2011-02-14  Pedro Alves  <pedro@codesourcery.com>
 
+       * value.c (get_internalvar_integer): Also return the int value of
+       TYPE_CODE_INT INTERNALVAR_VALUE values.
+       (set_internalvar): Don't special case TYPE_CODE_INT.
+
+2011-02-14  Pedro Alves  <pedro@codesourcery.com>
+
        * value.c (struct internalvar) <enum internalvar_kind>: Remove
        INTERNALVAR_POINTER.
        <pointer>: Delete.
index 92d857f..ee53914 100644 (file)
@@ -1675,15 +1675,24 @@ value_of_internalvar (struct gdbarch *gdbarch, struct internalvar *var)
 int
 get_internalvar_integer (struct internalvar *var, LONGEST *result)
 {
-  switch (var->kind)
+  if (var->kind == INTERNALVAR_INTEGER)
     {
-    case INTERNALVAR_INTEGER:
       *result = var->u.integer.val;
       return 1;
+    }
 
-    default:
-      return 0;
+  if (var->kind == INTERNALVAR_VALUE)
+    {
+      struct type *type = check_typedef (value_type (var->u.value));
+
+      if (TYPE_CODE (type) == TYPE_CODE_INT)
+       {
+         *result = value_as_long (var->u.value);
+         return 1;
+       }
     }
+
+  return 0;
 }
 
 static int
@@ -1750,12 +1759,6 @@ set_internalvar (struct internalvar *var, struct value *val)
       /* Copies created here are never canonical.  */
       break;
 
-    case TYPE_CODE_INT:
-      new_kind = INTERNALVAR_INTEGER;
-      new_data.integer.type = value_type (val);
-      new_data.integer.val = value_as_long (val);
-      break;
-
     default:
       new_kind = INTERNALVAR_VALUE;
       new_data.value = value_copy (val);