diff options
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r-- | gdb/valarith.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c index 8e863e3..4da41cb 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -489,8 +489,16 @@ value_x_binop (struct value *arg1, struct value *arg2, enum exp_opcode op, = TYPE_TARGET_TYPE (check_typedef (value_type (argvec[0]))); return value_zero (return_type, VALUE_LVAL (arg1)); } - return call_function_by_hand (argvec[0], 2 - static_memfuncp, - argvec + 1); + + if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_XMETHOD) + { + /* Static xmethods are not supported yet. */ + gdb_assert (static_memfuncp == 0); + return call_xmethod (argvec[0], 2, argvec + 1); + } + else + return call_function_by_hand (argvec[0], 2 - static_memfuncp, + argvec + 1); } throw_error (NOT_FOUND_ERROR, _("member function %s not found"), tstr); @@ -593,7 +601,14 @@ 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], nargs, argvec + 1); + if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_XMETHOD) + { + /* Static xmethods are not supported yet. */ + gdb_assert (static_memfuncp == 0); + return call_xmethod (argvec[0], 1, argvec + 1); + } + else + return call_function_by_hand (argvec[0], nargs, argvec + 1); } throw_error (NOT_FOUND_ERROR, _("member function %s not found"), tstr); |