From 833d985d1c7f69f953a5c7ddcf2af1d001504961 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 24 Oct 2018 16:40:00 -0600 Subject: [PATCH] Return gdbpy_ref from some Python string functions This changes python_string_to_unicode, python_string_to_target_python_string, and host_string_to_python_string to return gdbpy_ref. gdb/ChangeLog 2018-11-04 Tom Tromey * python/python.c (gdbpy_parameter_value): Update. * python/python-internal.h (python_string_to_unicode) (python_string_to_target_python_string) (host_string_to_python_string): Return gdbpy_ref. * python/py-utils.c (python_string_to_unicode) (unicode_to_encoded_python_string) (unicode_to_target_python_string) (python_string_to_target_string) (python_string_to_target_python_string): Return gdbpy_ref. (python_string_to_host_string): Update. (host_string_to_python_string): Return gdbpy_ref. * python/py-symtab.c (stpy_get_filename, stpy_get_producer) (stpy_fullname): Update. * python/py-progspace.c (pspy_get_filename, pspy_solib_name): Update. * python/py-prettyprint.c (print_string_repr): Update. * python/py-objfile.c (objfpy_get_filename, objfpy_get_username) (objfpy_get_build_id): Update. * python/py-breakpoint.c (bppy_get_location) (bppy_get_expression, bppy_get_condition, bppy_get_commands): Update. --- gdb/ChangeLog | 24 ++++++++++++++++++++++++ gdb/python/py-breakpoint.c | 8 ++++---- gdb/python/py-objfile.c | 7 ++++--- gdb/python/py-prettyprint.c | 2 +- gdb/python/py-progspace.c | 5 +++-- gdb/python/py-symtab.c | 6 +++--- gdb/python/py-utils.c | 25 +++++++++++++------------ gdb/python/python-internal.h | 6 +++--- gdb/python/python.c | 2 +- 9 files changed, 56 insertions(+), 29 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6389f4f..42b1d7f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,29 @@ 2018-11-04 Tom Tromey + * python/python.c (gdbpy_parameter_value): Update. + * python/python-internal.h (python_string_to_unicode) + (python_string_to_target_python_string) + (host_string_to_python_string): Return gdbpy_ref. + * python/py-utils.c (python_string_to_unicode) + (unicode_to_encoded_python_string) + (unicode_to_target_python_string) + (python_string_to_target_string) + (python_string_to_target_python_string): Return gdbpy_ref. + (python_string_to_host_string): Update. + (host_string_to_python_string): Return gdbpy_ref. + * python/py-symtab.c (stpy_get_filename, stpy_get_producer) + (stpy_fullname): Update. + * python/py-progspace.c (pspy_get_filename, pspy_solib_name): + Update. + * python/py-prettyprint.c (print_string_repr): Update. + * python/py-objfile.c (objfpy_get_filename, objfpy_get_username) + (objfpy_get_build_id): Update. + * python/py-breakpoint.c (bppy_get_location) + (bppy_get_expression, bppy_get_condition, bppy_get_commands): + Update. + +2018-11-04 Tom Tromey + * python/python-internal.h (gdb_py_object_from_longest) (gdb_py_object_from_ulongest): Return gdbpy_ref. * python/py-value.c (valpy_int): Update. diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index 94afd50..d144bcf 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -399,7 +399,7 @@ bppy_get_location (PyObject *self, void *closure) str = event_location_to_string (location); if (! str) str = ""; - return host_string_to_python_string (str); + return host_string_to_python_string (str).release (); } /* Python function to get the breakpoint expression. */ @@ -421,7 +421,7 @@ bppy_get_expression (PyObject *self, void *closure) if (! str) str = ""; - return host_string_to_python_string (str); + return host_string_to_python_string (str).release (); } /* Python function to get the condition expression of a breakpoint. */ @@ -437,7 +437,7 @@ bppy_get_condition (PyObject *self, void *closure) if (! str) Py_RETURN_NONE; - return host_string_to_python_string (str); + return host_string_to_python_string (str).release (); } /* Returns 0 on success. Returns -1 on error, with a python exception set. @@ -512,7 +512,7 @@ bppy_get_commands (PyObject *self, void *closure) END_CATCH current_uiout->redirect (NULL); - return host_string_to_python_string (stb.c_str ()); + return host_string_to_python_string (stb.c_str ()).release (); } /* Set the commands attached to a breakpoint. Returns 0 on success. diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 2e24d0f..dc7f342 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -79,7 +79,8 @@ objfpy_get_filename (PyObject *self, void *closure) objfile_object *obj = (objfile_object *) self; if (obj->objfile) - return host_string_to_python_string (objfile_name (obj->objfile)); + return (host_string_to_python_string (objfile_name (obj->objfile)) + .release ()); Py_RETURN_NONE; } @@ -95,7 +96,7 @@ objfpy_get_username (PyObject *self, void *closure) { const char *username = obj->objfile->original_name; - return host_string_to_python_string (username); + return host_string_to_python_string (username).release (); } Py_RETURN_NONE; @@ -145,7 +146,7 @@ objfpy_get_build_id (PyObject *self, void *closure) char *hex_form = make_hex_string (build_id->data, build_id->size); PyObject *result; - result = host_string_to_python_string (hex_form); + result = host_string_to_python_string (hex_form).release (); xfree (hex_form); return result; } diff --git a/gdb/python/py-prettyprint.c b/gdb/python/py-prettyprint.c index a706222..2386dcc 100644 --- a/gdb/python/py-prettyprint.c +++ b/gdb/python/py-prettyprint.c @@ -316,7 +316,7 @@ print_string_repr (PyObject *printer, const char *hint, else { gdbpy_ref<> string - (python_string_to_target_python_string (py_str.get ())); + = python_string_to_target_python_string (py_str.get ()); if (string != NULL) { char *output; diff --git a/gdb/python/py-progspace.c b/gdb/python/py-progspace.c index 6395d5b..bd195a5 100644 --- a/gdb/python/py-progspace.c +++ b/gdb/python/py-progspace.c @@ -83,7 +83,8 @@ pspy_get_filename (PyObject *self, void *closure) struct objfile *objfile = obj->pspace->symfile_object_file; if (objfile) - return host_string_to_python_string (objfile_name (objfile)); + return (host_string_to_python_string (objfile_name (objfile)) + .release ()); } Py_RETURN_NONE; } @@ -373,7 +374,7 @@ pspy_solib_name (PyObject *o, PyObject *args) soname = solib_name_from_address (self->pspace, pc); if (soname == nullptr) Py_RETURN_NONE; - return host_string_to_python_string (soname); + return host_string_to_python_string (soname).release (); } /* Return the innermost lexical block containing the specified pc value, diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index 9bb20da..4b29299 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -109,7 +109,7 @@ stpy_get_filename (PyObject *self, void *closure) STPY_REQUIRE_VALID (self, symtab); filename = symtab_to_filename_for_display (symtab); - str_obj = host_string_to_python_string (filename); + str_obj = host_string_to_python_string (filename).release (); return str_obj; } @@ -137,7 +137,7 @@ stpy_get_producer (PyObject *self, void *closure) { const char *producer = COMPUNIT_PRODUCER (cust); - return host_string_to_python_string (producer); + return host_string_to_python_string (producer).release (); } Py_RETURN_NONE; @@ -153,7 +153,7 @@ stpy_fullname (PyObject *self, PyObject *args) fullname = symtab_to_fullname (symtab); - return host_string_to_python_string (fullname); + return host_string_to_python_string (fullname).release (); } /* Implementation of gdb.Symtab.is_valid (self) -> Boolean. diff --git a/gdb/python/py-utils.c b/gdb/python/py-utils.c index 4dcac3d..2b47790 100644 --- a/gdb/python/py-utils.c +++ b/gdb/python/py-utils.c @@ -34,7 +34,7 @@ If the given object is not one of the mentioned string types, NULL is returned, with the TypeError python exception set. */ -PyObject * +gdbpy_ref<> python_string_to_unicode (PyObject *obj) { PyObject *unicode_str; @@ -57,7 +57,7 @@ python_string_to_unicode (PyObject *obj) unicode_str = NULL; } - return unicode_str; + return gdbpy_ref<> (unicode_str); } /* Returns a newly allocated string with the contents of the given unicode @@ -88,11 +88,11 @@ unicode_to_encoded_string (PyObject *unicode_str, const char *charset) object converted to a named charset. If an error occurs during the conversion, NULL will be returned and a python exception will be set. */ -static PyObject * +static gdbpy_ref<> unicode_to_encoded_python_string (PyObject *unicode_str, const char *charset) { /* Translate string to named charset. */ - return PyUnicode_AsEncodedString (unicode_str, charset, NULL); + return gdbpy_ref<> (PyUnicode_AsEncodedString (unicode_str, charset, NULL)); } /* Returns a newly allocated string with the contents of the given @@ -110,7 +110,7 @@ unicode_to_target_string (PyObject *unicode_str) object converted to the target's charset. If an error occurs during the conversion, NULL will be returned and a python exception will be set. */ -static PyObject * +static gdbpy_ref<> unicode_to_target_python_string (PyObject *unicode_str) { return unicode_to_encoded_python_string (unicode_str, @@ -123,7 +123,7 @@ unicode_to_target_python_string (PyObject *unicode_str) gdb::unique_xmalloc_ptr python_string_to_target_string (PyObject *obj) { - gdbpy_ref<> str (python_string_to_unicode (obj)); + gdbpy_ref<> str = python_string_to_unicode (obj); if (str == NULL) return NULL; @@ -135,12 +135,12 @@ python_string_to_target_string (PyObject *obj) set. In Python 3, the returned object is a "bytes" object (not a string). */ -PyObject * +gdbpy_ref<> python_string_to_target_python_string (PyObject *obj) { - gdbpy_ref<> str (python_string_to_unicode (obj)); + gdbpy_ref<> str = python_string_to_unicode (obj); if (str == NULL) - return NULL; + return str; return unicode_to_target_python_string (str.get ()); } @@ -151,7 +151,7 @@ python_string_to_target_python_string (PyObject *obj) gdb::unique_xmalloc_ptr python_string_to_host_string (PyObject *obj) { - gdbpy_ref<> str (python_string_to_unicode (obj)); + gdbpy_ref<> str = python_string_to_unicode (obj); if (str == NULL) return NULL; @@ -160,10 +160,11 @@ python_string_to_host_string (PyObject *obj) /* Convert a host string to a python string. */ -PyObject * +gdbpy_ref<> host_string_to_python_string (const char *str) { - return PyString_Decode (str, strlen (str), host_charset (), NULL); + return gdbpy_ref<> (PyString_Decode (str, strlen (str), host_charset (), + NULL)); } /* Return true if OBJ is a Python string or unicode object, false diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h index 5f15a33..582044a 100644 --- a/gdb/python/python-internal.h +++ b/gdb/python/python-internal.h @@ -656,12 +656,12 @@ int gdbpy_print_python_errors_p (void); void gdbpy_print_stack (void); void gdbpy_handle_exception () ATTRIBUTE_NORETURN; -PyObject *python_string_to_unicode (PyObject *obj); +gdbpy_ref<> python_string_to_unicode (PyObject *obj); gdb::unique_xmalloc_ptr unicode_to_target_string (PyObject *unicode_str); gdb::unique_xmalloc_ptr python_string_to_target_string (PyObject *obj); -PyObject *python_string_to_target_python_string (PyObject *obj); +gdbpy_ref<> python_string_to_target_python_string (PyObject *obj); gdb::unique_xmalloc_ptr python_string_to_host_string (PyObject *obj); -PyObject *host_string_to_python_string (const char *str); +gdbpy_ref<> host_string_to_python_string (const char *str); int gdbpy_is_string (PyObject *obj); gdb::unique_xmalloc_ptr gdbpy_obj_to_string (PyObject *obj); gdb::unique_xmalloc_ptr gdbpy_exception_to_string (PyObject *ptype, diff --git a/gdb/python/python.c b/gdb/python/python.c index 348405e..a37ed10 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -438,7 +438,7 @@ gdbpy_parameter_value (enum var_types type, void *var) if (! str) str = ""; - return host_string_to_python_string (str); + return host_string_to_python_string (str).release (); } case var_boolean: -- 2.7.4