From c52de454a4a11ee8ff8836ff7bcab0178144d1d6 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Sat, 16 Feb 2002 22:25:50 +0000 Subject: 2002-02-16 Daniel Jacobowitz * valarith.c (value_x_unop): Fix decrement; support post-decrement. 2002-02-16 Daniel Jacobowitz From Peter Schauer : * valops.c (value_arg_coerce): Don't take the address of a reference to convert an argument to a reference. --- gdb/valarith.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'gdb/valarith.c') diff --git a/gdb/valarith.c b/gdb/valarith.c index d91f326787c..5852ac6a8a1 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -464,7 +464,7 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside) struct value **argvec; char *ptr, *mangle_ptr; char tstr[13], mangle_tstr[13]; - int static_memfuncp; + int static_memfuncp, nargs; COERCE_REF (arg1); COERCE_ENUM (arg1); @@ -475,10 +475,12 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside) if (TYPE_CODE (check_typedef (VALUE_TYPE (arg1))) != TYPE_CODE_STRUCT) error ("Can't do that unary op on that type"); /* FIXME be explicit */ - argvec = (struct value **) alloca (sizeof (struct value *) * 3); + argvec = (struct value **) alloca (sizeof (struct value *) * 4); argvec[1] = value_addr (arg1); argvec[2] = 0; + nargs = 1; + /* make the right function name up */ strcpy (tstr, "operator__"); ptr = tstr + 8; @@ -490,13 +492,19 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside) strcpy (ptr, "++"); break; case UNOP_PREDECREMENT: - strcpy (ptr, "++"); + strcpy (ptr, "--"); break; case UNOP_POSTINCREMENT: strcpy (ptr, "++"); + argvec[2] = value_from_longest (builtin_type_int, 0); + argvec[3] = 0; + nargs ++; break; case UNOP_POSTDECREMENT: - strcpy (ptr, "++"); + strcpy (ptr, "--"); + argvec[2] = value_from_longest (builtin_type_int, 0); + argvec[3] = 0; + nargs ++; break; case UNOP_LOGICAL_NOT: strcpy (ptr, "!"); @@ -521,6 +529,7 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside) if (static_memfuncp) { argvec[1] = argvec[0]; + nargs --; argvec++; } if (noside == EVAL_AVOID_SIDE_EFFECTS) @@ -530,7 +539,7 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside) = TYPE_TARGET_TYPE (check_typedef (VALUE_TYPE (argvec[0]))); return value_zero (return_type, VALUE_LVAL (arg1)); } - return call_function_by_hand (argvec[0], 1 - static_memfuncp, argvec + 1); + return call_function_by_hand (argvec[0], nargs, argvec + 1); } error ("member function %s not found", tstr); return 0; /* For lint -- never reached */ -- cgit v1.2.1