Return gdbpy_ref from some Python string functions
authorTom Tromey <tom@tromey.com>
Wed, 24 Oct 2018 22:40:00 +0000 (16:40 -0600)
committerTom Tromey <tom@tromey.com>
Sun, 4 Nov 2018 15:01:01 +0000 (08:01 -0700)
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.

gdb/ChangeLog
gdb/python/py-breakpoint.c
gdb/python/py-objfile.c
gdb/python/py-prettyprint.c
gdb/python/py-progspace.c
gdb/python/py-symtab.c
gdb/python/py-utils.c
gdb/python/python-internal.h
gdb/python/python.c

index 6389f4f811c51dcf8ec887dbe9f195c49f2e3b32..42b1d7f664d1ac6f23a8715b172e194a1a1faccb 100644 (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>
 
        * python/python-internal.h (gdb_py_object_from_longest)
index 94afd503e92d9fdfcf08aedbc3eaf57759a2b767..d144bcf2e6f4c55f528dc8e3109ec458bd2143dc 100644 (file)
@@ -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.
index 2e24d0f3ff20687c989af9c15bc8a118f2553068..dc7f342aef46e8bd4730b10a0ea0cca7713f7165 100644 (file)
@@ -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;
     }
index a7062225816a69ccb74729911d65805cdfd45f7f..2386dccbbbf8a0c64941950b26ce7525b3066287 100644 (file)
@@ -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;
index 6395d5bb155c20befa44c254f2453b8dab8c4584..bd195a54c1549475714fdc5316ba08e57fad41cc 100644 (file)
@@ -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,
index 9bb20dab31fc345295ca7efd31a251b44f18023f..4b29299bf94abbf44cca534cc7c0f9932f747371 100644 (file)
@@ -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.
index 4dcac3daaf639db26affe39b8b9d3f22a77b2c34..2b4779097b21c07616a4d01bd5228531b1ce23c1 100644 (file)
@@ -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<char>
 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<char>
 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
index 5f15a33d5e743e983dfc7453c0526efa01e24007..582044ad8c0ded925aac36d5e53be7456e6250d2 100644 (file)
@@ -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<char> unicode_to_target_string (PyObject *unicode_str);
 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);
-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<char> gdbpy_obj_to_string (PyObject *obj);
 gdb::unique_xmalloc_ptr<char> gdbpy_exception_to_string (PyObject *ptype,
index 348405e205909f8cd05f0624f2b7b62ec07d9af9..a37ed10bcfbb81624ceb808c48322ef77b53a8a0 100644 (file)
@@ -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: