Remove xmethod_worker::clone
I think that the clone method of xmethod_worker can be removed. It is only used in find_overload_match, to clone an xmethod we want to keep. Instead, we can just std::move it out of the vector and into value_from_xmethod. value_from_xmethod creates a value that will own the xmethod_worker from that point. Other xmethod_workers left in the vector will get destroyed when the vector gets destroyed, but the chosen one will keep living inside the value struct. gdb/ChangeLog: * extension.h (struct xmethod_worker) <clone>: Remove. * python/py-xmethods.c (struct python_xmethod_worker) <clone>: Remove. (python_xmethod_worker::clone): Remove. * valops.c (find_overload_match): Use std::move instead of clone.
This commit is contained in:
parent
ba18742c3a
commit
f979c73fd0
@ -1,3 +1,12 @@
|
||||
2018-01-07 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* extension.h (struct xmethod_worker) <clone>: Remove.
|
||||
* python/py-xmethods.c (struct python_xmethod_worker) <clone>:
|
||||
Remove.
|
||||
(python_xmethod_worker::clone): Remove.
|
||||
* valops.c (find_overload_match): Use std::move instead of
|
||||
clone.
|
||||
|
||||
2018-01-07 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* extension-priv.h (enum ext_lang_rc): Remove, move to extension.h.
|
||||
|
@ -182,13 +182,6 @@ struct xmethod_worker
|
||||
|
||||
virtual value *invoke (value *obj, value **args, int nargs) = 0;
|
||||
|
||||
/* Clone this worker, returns a new but identical worker.
|
||||
The function get_matching_xmethod_workers returns a vector of matching
|
||||
workers. If a particular worker is selected by GDB to invoke a method,
|
||||
then this function can help in cloning the selected worker. */
|
||||
|
||||
virtual std::unique_ptr<xmethod_worker> clone () = 0;
|
||||
|
||||
/* Return the arg types of the xmethod encapsulated in this worker.
|
||||
An array of arg types is returned. The length of the array is returned in
|
||||
NARGS. The type of the 'this' object is returned as the first element of
|
||||
|
@ -48,10 +48,6 @@ struct python_xmethod_worker : xmethod_worker
|
||||
|
||||
value *invoke (value *obj, value **args, int nargs) override;
|
||||
|
||||
/* Implementation of xmethod_worker::clone for Python. */
|
||||
|
||||
xmethod_worker_up clone () override;
|
||||
|
||||
/* Implementation of xmethod_worker::do_get_arg_types for Python. */
|
||||
|
||||
ext_lang_rc do_get_arg_types (int *nargs, type ***arg_types) override;
|
||||
@ -80,19 +76,6 @@ python_xmethod_worker::~python_xmethod_worker ()
|
||||
Py_DECREF (m_this_type);
|
||||
}
|
||||
|
||||
/* See declaration. */
|
||||
|
||||
xmethod_worker_up
|
||||
python_xmethod_worker::clone ()
|
||||
{
|
||||
/* We don't do much here, but we still need the GIL. */
|
||||
gdbpy_enter enter_py (get_current_arch (), current_language);
|
||||
|
||||
xmethod_worker *worker = new python_xmethod_worker (m_py_worker, m_this_type);
|
||||
|
||||
return xmethod_worker_up (worker);
|
||||
}
|
||||
|
||||
/* Invoke the "match" method of the MATCHER and return a new reference
|
||||
to the result. Returns NULL on error. */
|
||||
|
||||
|
@ -2778,7 +2778,7 @@ find_overload_match (struct value **args, int nargs,
|
||||
}
|
||||
else
|
||||
*valp = value_from_xmethod
|
||||
(xm_worker_vec[ext_method_oload_champ]->clone ());
|
||||
(std::move (xm_worker_vec[ext_method_oload_champ]));
|
||||
}
|
||||
else
|
||||
*symp = oload_syms[func_oload_champ];
|
||||
|
Loading…
x
Reference in New Issue
Block a user