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  <tom@tromey.com>

	* 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.
This commit is contained in:
Tom Tromey 2018-10-24 16:40:00 -06:00
parent 12dfa12a3c
commit 833d985d1c
9 changed files with 56 additions and 29 deletions

View file

@ -1,3 +1,27 @@
2018-11-04 Tom Tromey <tom@tromey.com>
* 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 <tom@tromey.com> 2018-11-04 Tom Tromey <tom@tromey.com>
* python/python-internal.h (gdb_py_object_from_longest) * python/python-internal.h (gdb_py_object_from_longest)

View file

@ -399,7 +399,7 @@ bppy_get_location (PyObject *self, void *closure)
str = event_location_to_string (location); str = event_location_to_string (location);
if (! str) if (! str)
str = ""; str = "";
return host_string_to_python_string (str); return host_string_to_python_string (str).release ();
} }
/* Python function to get the breakpoint expression. */ /* Python function to get the breakpoint expression. */
@ -421,7 +421,7 @@ bppy_get_expression (PyObject *self, void *closure)
if (! str) if (! str)
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. */ /* Python function to get the condition expression of a breakpoint. */
@ -437,7 +437,7 @@ bppy_get_condition (PyObject *self, void *closure)
if (! str) if (! str)
Py_RETURN_NONE; 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. /* 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 END_CATCH
current_uiout->redirect (NULL); 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. /* Set the commands attached to a breakpoint. Returns 0 on success.

View file

@ -79,7 +79,8 @@ objfpy_get_filename (PyObject *self, void *closure)
objfile_object *obj = (objfile_object *) self; objfile_object *obj = (objfile_object *) self;
if (obj->objfile) 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; Py_RETURN_NONE;
} }
@ -95,7 +96,7 @@ objfpy_get_username (PyObject *self, void *closure)
{ {
const char *username = obj->objfile->original_name; 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; 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); char *hex_form = make_hex_string (build_id->data, build_id->size);
PyObject *result; PyObject *result;
result = host_string_to_python_string (hex_form); result = host_string_to_python_string (hex_form).release ();
xfree (hex_form); xfree (hex_form);
return result; return result;
} }

View file

@ -316,7 +316,7 @@ print_string_repr (PyObject *printer, const char *hint,
else else
{ {
gdbpy_ref<> string gdbpy_ref<> string
(python_string_to_target_python_string (py_str.get ())); = python_string_to_target_python_string (py_str.get ());
if (string != NULL) if (string != NULL)
{ {
char *output; char *output;

View file

@ -83,7 +83,8 @@ pspy_get_filename (PyObject *self, void *closure)
struct objfile *objfile = obj->pspace->symfile_object_file; struct objfile *objfile = obj->pspace->symfile_object_file;
if (objfile) if (objfile)
return host_string_to_python_string (objfile_name (objfile)); return (host_string_to_python_string (objfile_name (objfile))
.release ());
} }
Py_RETURN_NONE; Py_RETURN_NONE;
} }
@ -373,7 +374,7 @@ pspy_solib_name (PyObject *o, PyObject *args)
soname = solib_name_from_address (self->pspace, pc); soname = solib_name_from_address (self->pspace, pc);
if (soname == nullptr) if (soname == nullptr)
Py_RETURN_NONE; 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, /* Return the innermost lexical block containing the specified pc value,

View file

@ -109,7 +109,7 @@ stpy_get_filename (PyObject *self, void *closure)
STPY_REQUIRE_VALID (self, symtab); STPY_REQUIRE_VALID (self, symtab);
filename = symtab_to_filename_for_display (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; return str_obj;
} }
@ -137,7 +137,7 @@ stpy_get_producer (PyObject *self, void *closure)
{ {
const char *producer = COMPUNIT_PRODUCER (cust); const char *producer = COMPUNIT_PRODUCER (cust);
return host_string_to_python_string (producer); return host_string_to_python_string (producer).release ();
} }
Py_RETURN_NONE; Py_RETURN_NONE;
@ -153,7 +153,7 @@ stpy_fullname (PyObject *self, PyObject *args)
fullname = symtab_to_fullname (symtab); 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. /* Implementation of gdb.Symtab.is_valid (self) -> Boolean.

View file

@ -34,7 +34,7 @@
If the given object is not one of the mentioned string types, NULL is If the given object is not one of the mentioned string types, NULL is
returned, with the TypeError python exception set. */ returned, with the TypeError python exception set. */
PyObject * gdbpy_ref<>
python_string_to_unicode (PyObject *obj) python_string_to_unicode (PyObject *obj)
{ {
PyObject *unicode_str; PyObject *unicode_str;
@ -57,7 +57,7 @@ python_string_to_unicode (PyObject *obj)
unicode_str = NULL; unicode_str = NULL;
} }
return unicode_str; return gdbpy_ref<> (unicode_str);
} }
/* Returns a newly allocated string with the contents of the given unicode /* 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 object converted to a named charset. If an error occurs during
the conversion, NULL will be returned and a python exception will the conversion, NULL will be returned and a python exception will
be set. */ be set. */
static PyObject * static gdbpy_ref<>
unicode_to_encoded_python_string (PyObject *unicode_str, const char *charset) unicode_to_encoded_python_string (PyObject *unicode_str, const char *charset)
{ {
/* Translate string to named 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 /* 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 object converted to the target's charset. If an error occurs
during the conversion, NULL will be returned and a python exception during the conversion, NULL will be returned and a python exception
will be set. */ will be set. */
static PyObject * static gdbpy_ref<>
unicode_to_target_python_string (PyObject *unicode_str) unicode_to_target_python_string (PyObject *unicode_str)
{ {
return unicode_to_encoded_python_string (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<char> gdb::unique_xmalloc_ptr<char>
python_string_to_target_string (PyObject *obj) 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) if (str == NULL)
return NULL; return NULL;
@ -135,12 +135,12 @@ python_string_to_target_string (PyObject *obj)
set. set.
In Python 3, the returned object is a "bytes" object (not a string). */ In Python 3, the returned object is a "bytes" object (not a string). */
PyObject * gdbpy_ref<>
python_string_to_target_python_string (PyObject *obj) 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) if (str == NULL)
return NULL; return str;
return unicode_to_target_python_string (str.get ()); return unicode_to_target_python_string (str.get ());
} }
@ -151,7 +151,7 @@ python_string_to_target_python_string (PyObject *obj)
gdb::unique_xmalloc_ptr<char> gdb::unique_xmalloc_ptr<char>
python_string_to_host_string (PyObject *obj) 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) if (str == NULL)
return NULL; return NULL;
@ -160,10 +160,11 @@ python_string_to_host_string (PyObject *obj)
/* Convert a host string to a python string. */ /* Convert a host string to a python string. */
PyObject * gdbpy_ref<>
host_string_to_python_string (const char *str) 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 /* Return true if OBJ is a Python string or unicode object, false

View file

@ -656,12 +656,12 @@ int gdbpy_print_python_errors_p (void);
void gdbpy_print_stack (void); void gdbpy_print_stack (void);
void gdbpy_handle_exception () ATTRIBUTE_NORETURN; 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<char> unicode_to_target_string (PyObject *unicode_str); gdb::unique_xmalloc_ptr<char> unicode_to_target_string (PyObject *unicode_str);
gdb::unique_xmalloc_ptr<char> python_string_to_target_string (PyObject *obj); gdb::unique_xmalloc_ptr<char> 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<char> python_string_to_host_string (PyObject *obj); gdb::unique_xmalloc_ptr<char> 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); int gdbpy_is_string (PyObject *obj);
gdb::unique_xmalloc_ptr<char> gdbpy_obj_to_string (PyObject *obj); gdb::unique_xmalloc_ptr<char> gdbpy_obj_to_string (PyObject *obj);
gdb::unique_xmalloc_ptr<char> gdbpy_exception_to_string (PyObject *ptype, gdb::unique_xmalloc_ptr<char> gdbpy_exception_to_string (PyObject *ptype,

View file

@ -438,7 +438,7 @@ gdbpy_parameter_value (enum var_types type, void *var)
if (! str) if (! str)
str = ""; str = "";
return host_string_to_python_string (str); return host_string_to_python_string (str).release ();
} }
case var_boolean: case var_boolean: