Remove xmethod_worker::clone
authorSimon Marchi <simon.marchi@polymtl.ca>
Sun, 7 Jan 2018 14:25:33 +0000 (09:25 -0500)
committerSimon Marchi <simon.marchi@ericsson.com>
Sun, 7 Jan 2018 14:25:33 +0000 (09:25 -0500)
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.

gdb/ChangeLog
gdb/extension.h
gdb/python/py-xmethods.c
gdb/valops.c

index 65b9ef9a86407fa985e115d4c88d4f072e2f34f1..ff4530664898df69d597553924a5b4b4cfa6be82 100644 (file)
@@ -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.
index 475d712b4209dab25d2ff10adc0ae39ed436d427..effa5bbffe509913c60522552f66110b74520451 100644 (file)
@@ -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
index f4064c29dcff88e8a3a33320ac782bdf9f19f424..f7e3c37210cc008e533ed522c58bb8a344fbb19a 100644 (file)
@@ -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.  */
 
index 8fccfe930191c2cbf19c4bee41df5776d741bf64..e038c04fd1df2551a7ab34b05d8fee35428b4937 100644 (file)
@@ -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];