This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA 02/14] Change event code to use gdbpy_reference


On 11/07/2016 05:47 AM, Tom Tromey wrote:
>  PyObject *
>  create_breakpoint_event_object (PyObject *breakpoint_list, PyObject *first_bp)
>  {
> -  PyObject *breakpoint_event_obj =
> -      create_stop_event_object (&breakpoint_event_object_type);
> +  gdbpy_reference breakpoint_event_obj
> +    (create_stop_event_object (&breakpoint_event_object_type));
>  

> - fail:
> -  Py_XDECREF (breakpoint_event_obj);
> -  return NULL;
> +  return breakpoint_event_obj.release ();
>  }

Wouldn't it better to make these create_foo functions return a
gdbpy_reference ?  Then at the call site you'd use std::move instead
of reset (when assigning to an existing lval):

      stop_event_obj = std::move (create_breakpoint_event_object (list.get (),
							          first_bp));

The advantage of following such a principle is that it makes it impossible
for callers to forget to manage the result with a gdbpy_reference, since
assigning the return to a raw PyObject * won't compile.

Thanks,
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]