diff options
author | Siva Chandra <sivachandra@chromium.org> | 2014-05-20 06:41:39 -0700 |
---|---|---|
committer | Siva Chandra <sivachandra@chromium.org> | 2014-06-03 09:54:21 -0700 |
commit | 233e8b28cf7b548ca197a7a6d9bf5f9ce80053ac (patch) | |
tree | cfd187d00cfc805f22d8e1d4736413e742e7a3cf /gdb/eval.c | |
parent | e81e7f5e38bf0da52d9e88a94e4df9aeecd80357 (diff) | |
download | gdb-233e8b28cf7b548ca197a7a6d9bf5f9ce80053ac.zip gdb-233e8b28cf7b548ca197a7a6d9bf5f9ce80053ac.tar.gz gdb-233e8b28cf7b548ca197a7a6d9bf5f9ce80053ac.tar.bz2 |
Lookup and invoke debug methods of C++ classes if they are the best match.
* eval.c (evaluate_subexp_standard): Call the xmethod if the
best match method returned by find_overload_match is an xmethod.
* valarith.c (value_x_binop, value_x_unop): Call the xmethod if
the best matching operator returned by find_overload_match is an
xmethod.
* valops.c: #include "extension.h".
(find_method_list): Add "fn_list" and "xm_worker_vec" arguments.
Return void. The list of matching source methods is returned in
"fn_list" and a vector of matching debug method workers is
returned in "xm_worker_vec". Update all callers.
(value_find_oload_method_list): Likewise.
(find_oload_champ): Add "xm_worker_vec" parameter. If it is
non-NULL, then the index of the best matching method in this
vector is returned. Update all callers.
(find_overload_match): Include xmethods while performing overload
resolution.
Diffstat (limited to 'gdb/eval.c')
-rw-r--r-- | gdb/eval.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -1765,11 +1765,16 @@ evaluate_subexp_standard (struct type *expect_type, error (_("Expression of type other than " "\"Function returning ...\" used as function")); } - if (TYPE_CODE (value_type (argvec[0])) == TYPE_CODE_INTERNAL_FUNCTION) - return call_internal_function (exp->gdbarch, exp->language_defn, - argvec[0], nargs, argvec + 1); - - return call_function_by_hand (argvec[0], nargs, argvec + 1); + switch (TYPE_CODE (value_type (argvec[0]))) + { + case TYPE_CODE_INTERNAL_FUNCTION: + return call_internal_function (exp->gdbarch, exp->language_defn, + argvec[0], nargs, argvec + 1); + case TYPE_CODE_XMETHOD: + return call_xmethod (argvec[0], nargs, argvec + 1); + default: + return call_function_by_hand (argvec[0], nargs, argvec + 1); + } /* pai: FIXME save value from call_function_by_hand, then adjust pc by adjust_fn_pc if +ve. */ |