* value.c (get_internalvar_integer): Also return the int value of
authorPedro Alves <palves@redhat.com>
Mon, 14 Feb 2011 11:25:12 +0000 (11:25 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 14 Feb 2011 11:25:12 +0000 (11:25 +0000)
TYPE_CODE_INT INTERNALVAR_VALUE values.
(set_internalvar): Don't special case TYPE_CODE_INT.

gdb/ChangeLog
gdb/value.c

index 34200b05a44f2b42c53e0f2241612d83d74203fe..106835a7641fa7b42cff38efab6c413e11be97db 100644 (file)
@@ -1,3 +1,9 @@
+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
index 92d857fac421db92fbde20eec952e6d336d8b5d4..ee53914707accc5f80a5ea9b70b1fde034c3b8f6 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);