2006-01-24 Jim Blandy <jimb@redhat.com>
authorJim Blandy <jimb@codesourcery.com>
Tue, 24 Jan 2006 21:21:12 +0000 (21:21 +0000)
committerJim Blandy <jimb@codesourcery.com>
Tue, 24 Jan 2006 21:21:12 +0000 (21:21 +0000)
* valarith.c (binop_user_defined_p): Handle refs to typedefs.

gdb/ChangeLog
gdb/valarith.c

index af422b9a930a5e4892569bdf01640549686193e2..c76d6c8844fb6bfd7951dd9196d00900693912d3 100644 (file)
@@ -1,3 +1,7 @@
+2006-01-24  Jim Blandy  <jimb@redhat.com>
+
+       * valarith.c (binop_user_defined_p): Handle refs to typedefs.
+
 2006-01-24  Fred Fish  <fnf@specifix.com>
 
        * parse.c (source.h): Include.
index b3f360d22e360a2f567c0843139a67242327f736..2e5e97a0aeef2ef5d06a838abc399ddfd93180e5 100644 (file)
@@ -285,9 +285,9 @@ value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound
   return v;
 }
 \f
-/* Check to see if either argument is a structure.  This is called so
-   we know whether to go ahead with the normal binop or look for a 
-   user defined function instead.
+/* Check to see if either argument is a structure, or a reference to
+   one.  This is called so we know whether to go ahead with the normal
+   binop or look for a user defined function instead.
 
    For now, we do not overload the `=' operator.  */
 
@@ -297,14 +297,17 @@ binop_user_defined_p (enum exp_opcode op, struct value *arg1, struct value *arg2
   struct type *type1, *type2;
   if (op == BINOP_ASSIGN || op == BINOP_CONCAT)
     return 0;
+
   type1 = check_typedef (value_type (arg1));
+  if (TYPE_CODE (type1) == TYPE_CODE_REF)
+    type1 = check_typedef (TYPE_TARGET_TYPE (type1));
+
   type2 = check_typedef (value_type (arg2));
+  if (TYPE_CODE (type2) == TYPE_CODE_REF)
+    type2 = check_typedef (TYPE_TARGET_TYPE (type2));
+
   return (TYPE_CODE (type1) == TYPE_CODE_STRUCT
-         || TYPE_CODE (type2) == TYPE_CODE_STRUCT
-         || (TYPE_CODE (type1) == TYPE_CODE_REF
-             && TYPE_CODE (TYPE_TARGET_TYPE (type1)) == TYPE_CODE_STRUCT)
-         || (TYPE_CODE (type2) == TYPE_CODE_REF
-             && TYPE_CODE (TYPE_TARGET_TYPE (type2)) == TYPE_CODE_STRUCT));
+         || TYPE_CODE (type2) == TYPE_CODE_STRUCT);
 }
 
 /* Check to see if argument is a structure.  This is called so