summaryrefslogtreecommitdiff
path: root/gdb/valarith.c
diff options
context:
space:
mode:
authorJim Blandy <jimb@codesourcery.com>2006-01-24 21:21:12 +0000
committerJim Blandy <jimb@codesourcery.com>2006-01-24 21:21:12 +0000
commit166adb0250ea3a6f3b53508b203a1ca322d3b8dd (patch)
tree77e970b8b4b7b669dd3c9122fb64323d064878ea /gdb/valarith.c
parent1cf2cc49c59983ba024cdb69ae5883d82b4c84a2 (diff)
downloadgdb-166adb0250ea3a6f3b53508b203a1ca322d3b8dd.tar.gz
2006-01-24 Jim Blandy <jimb@redhat.com>
* valarith.c (binop_user_defined_p): Handle refs to typedefs.
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r--gdb/valarith.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c
index b3f360d22e3..2e5e97a0aee 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -285,9 +285,9 @@ value_subscripted_rvalue (struct value *array, struct value *idx, int lowerbound
return v;
}
-/* 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