Turn some xmethod functions into methods
This turns value_from_xmethod, result_type_of_xmethod, and call_xmethod to be methods of value. value_from_xmethod is a static "constructor" now. Approved-By: Simon Marchi <simon.marchi@efficios.com>
This commit is contained in:
parent
fcf86fe597
commit
6bd5c75435
5 changed files with 29 additions and 29 deletions
|
@ -640,7 +640,7 @@ evaluate_subexp_do_call (expression *exp, enum noside noside,
|
|||
}
|
||||
else if (ftype->code () == TYPE_CODE_XMETHOD)
|
||||
{
|
||||
type *return_type = result_type_of_xmethod (callee, argvec);
|
||||
type *return_type = callee->result_type_of_xmethod (argvec);
|
||||
|
||||
if (return_type == NULL)
|
||||
error (_("Xmethod is missing return type."));
|
||||
|
@ -678,7 +678,7 @@ evaluate_subexp_do_call (expression *exp, enum noside noside,
|
|||
return call_internal_function (exp->gdbarch, exp->language_defn,
|
||||
callee, argvec.size (), argvec.data ());
|
||||
case TYPE_CODE_XMETHOD:
|
||||
return call_xmethod (callee, argvec);
|
||||
return callee->call_xmethod (argvec);
|
||||
default:
|
||||
return call_function_by_hand (callee, default_return_type, argvec);
|
||||
}
|
||||
|
|
|
@ -528,13 +528,13 @@ value_x_binop (struct value *arg1, struct value *arg2, enum exp_opcode op,
|
|||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
{
|
||||
struct type *return_type
|
||||
= result_type_of_xmethod (argvec[0], argvec.slice (1));
|
||||
= argvec[0]->result_type_of_xmethod (argvec.slice (1));
|
||||
|
||||
if (return_type == NULL)
|
||||
error (_("Xmethod is missing return type."));
|
||||
return value::zero (return_type, VALUE_LVAL (arg1));
|
||||
}
|
||||
return call_xmethod (argvec[0], argvec.slice (1));
|
||||
return argvec[0]->call_xmethod (argvec.slice (1));
|
||||
}
|
||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
{
|
||||
|
@ -641,13 +641,13 @@ value_x_unop (struct value *arg1, enum exp_opcode op, enum noside noside)
|
|||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
{
|
||||
struct type *return_type
|
||||
= result_type_of_xmethod (argvec[0], argvec[1]);
|
||||
= argvec[0]->result_type_of_xmethod (argvec[1]);
|
||||
|
||||
if (return_type == NULL)
|
||||
error (_("Xmethod is missing return type."));
|
||||
return value::zero (return_type, VALUE_LVAL (arg1));
|
||||
}
|
||||
return call_xmethod (argvec[0], argvec[1]);
|
||||
return argvec[0]->call_xmethod (argvec[1]);
|
||||
}
|
||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||
{
|
||||
|
|
|
@ -3028,7 +3028,7 @@ find_overload_match (gdb::array_view<value *> args,
|
|||
method_oload_champ, basetype, boffset);
|
||||
}
|
||||
else
|
||||
*valp = value_from_xmethod
|
||||
*valp = value::from_xmethod
|
||||
(std::move (xmethods[ext_method_oload_champ]));
|
||||
}
|
||||
else
|
||||
|
|
22
gdb/value.c
22
gdb/value.c
|
@ -2517,7 +2517,7 @@ show_convenience (const char *ignore, int from_tty)
|
|||
/* See value.h. */
|
||||
|
||||
struct value *
|
||||
value_from_xmethod (xmethod_worker_up &&worker)
|
||||
value::from_xmethod (xmethod_worker_up &&worker)
|
||||
{
|
||||
struct value *v;
|
||||
|
||||
|
@ -2529,26 +2529,26 @@ value_from_xmethod (xmethod_worker_up &&worker)
|
|||
return v;
|
||||
}
|
||||
|
||||
/* Return the type of the result of TYPE_CODE_XMETHOD value METHOD. */
|
||||
/* See value.h. */
|
||||
|
||||
struct type *
|
||||
result_type_of_xmethod (struct value *method, gdb::array_view<value *> argv)
|
||||
value::result_type_of_xmethod (gdb::array_view<value *> argv)
|
||||
{
|
||||
gdb_assert (method->type ()->code () == TYPE_CODE_XMETHOD
|
||||
&& method->m_lval == lval_xcallable && !argv.empty ());
|
||||
gdb_assert (type ()->code () == TYPE_CODE_XMETHOD
|
||||
&& m_lval == lval_xcallable && !argv.empty ());
|
||||
|
||||
return method->m_location.xm_worker->get_result_type (argv[0], argv.slice (1));
|
||||
return m_location.xm_worker->get_result_type (argv[0], argv.slice (1));
|
||||
}
|
||||
|
||||
/* Call the xmethod corresponding to the TYPE_CODE_XMETHOD value METHOD. */
|
||||
/* See value.h. */
|
||||
|
||||
struct value *
|
||||
call_xmethod (struct value *method, gdb::array_view<value *> argv)
|
||||
value::call_xmethod (gdb::array_view<value *> argv)
|
||||
{
|
||||
gdb_assert (method->type ()->code () == TYPE_CODE_XMETHOD
|
||||
&& method->m_lval == lval_xcallable && !argv.empty ());
|
||||
gdb_assert (type ()->code () == TYPE_CODE_XMETHOD
|
||||
&& m_lval == lval_xcallable && !argv.empty ());
|
||||
|
||||
return method->m_location.xm_worker->invoke (argv[0], argv.slice (1));
|
||||
return m_location.xm_worker->invoke (argv[0], argv.slice (1));
|
||||
}
|
||||
|
||||
/* Extract a value as a C number (either long or double).
|
||||
|
|
22
gdb/value.h
22
gdb/value.h
|
@ -543,6 +543,17 @@ public:
|
|||
WHOLE --- regardless of what kind of lvalue WHOLE is. */
|
||||
void set_component_location (const struct value *whole);
|
||||
|
||||
/* Build a value wrapping and representing WORKER. The value takes
|
||||
ownership of the xmethod_worker object. */
|
||||
static struct value *from_xmethod (xmethod_worker_up &&worker);
|
||||
|
||||
/* Return the type of the result of TYPE_CODE_XMETHOD value METHOD. */
|
||||
struct type *result_type_of_xmethod (gdb::array_view<value *> argv);
|
||||
|
||||
/* Call the xmethod corresponding to the TYPE_CODE_XMETHOD value
|
||||
METHOD. */
|
||||
struct value *call_xmethod (gdb::array_view<value *> argv);
|
||||
|
||||
|
||||
/* Type of value; either not an lval, or one of the various
|
||||
different possible kinds of lval. */
|
||||
|
@ -1514,17 +1525,6 @@ struct value *call_internal_function (struct gdbarch *gdbarch,
|
|||
|
||||
const char *value_internal_function_name (struct value *);
|
||||
|
||||
/* Build a value wrapping and representing WORKER. The value takes ownership
|
||||
of the xmethod_worker object. */
|
||||
|
||||
extern struct value *value_from_xmethod (xmethod_worker_up &&worker);
|
||||
|
||||
extern struct type *result_type_of_xmethod (struct value *method,
|
||||
gdb::array_view<value *> argv);
|
||||
|
||||
extern struct value *call_xmethod (struct value *method,
|
||||
gdb::array_view<value *> argv);
|
||||
|
||||
/* Destroy the values currently allocated. This is called when GDB is
|
||||
exiting (e.g., on quit_force). */
|
||||
extern void finalize_values ();
|
||||
|
|
Loading…
Add table
Reference in a new issue