gdb/python: Use reference not pointer in py-registers.c
authorAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 22 Jul 2020 13:57:55 +0000 (14:57 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Wed, 22 Jul 2020 15:09:16 +0000 (16:09 +0100)
Pedro's review comments arrived after I'd already committed this
change:

  commit f7306dac19c502232f766c3881313857915f330d
  Date:   Tue Jul 7 15:00:30 2020 +0100

      gdb/python: Reuse gdb.RegisterDescriptor objects where possible

See:

  https://sourceware.org/pipermail/gdb-patches/2020-July/170726.html

There should be no user visible changes after this commit.

gdb/ChangeLog:

* python/py-registers.c (gdbpy_register_object_data_init): Remove
redundant local variable.
(gdbpy_get_register_descriptor): Extract descriptor vector as a
reference, not pointer, update code accordingly.

gdb/ChangeLog
gdb/python/py-registers.c

index a768df0d76c0a57a42b24e275fd5750744956ab2..1cef37dea6c21f3ad9d9f59252677652b14ae871 100644 (file)
@@ -1,3 +1,10 @@
+2020-07-22  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * python/py-registers.c (gdbpy_register_object_data_init): Remove
+       redundant local variable.
+       (gdbpy_get_register_descriptor): Extract descriptor vector as a
+       reference, not pointer, update code accordingly.
+
 2020-07-22  Simon Marchi  <simon.marchi@polymtl.ca>
            Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
 
index 9396498cc3464a560e5f6805bf8c48e84be9f236..f64ca3c401b010d00fa71d52fca8d7a361a4e9de 100644 (file)
@@ -92,8 +92,7 @@ extern PyTypeObject reggroup_object_type
 static void *
 gdbpy_register_object_data_init (struct gdbarch *gdbarch)
 {
-  std::vector<gdbpy_ref<>> *vec = new (std::vector<gdbpy_ref<>>);
-  return (void *) vec;
+  return new std::vector<gdbpy_ref<>>;
 }
 
 /* Return a gdb.RegisterGroup object wrapping REGGROUP.  The register
@@ -158,16 +157,17 @@ static gdbpy_ref<>
 gdbpy_get_register_descriptor (struct gdbarch *gdbarch,
                               int regnum)
 {
-  auto vec = (std::vector<gdbpy_ref<>> *) gdbarch_data
-    (gdbarch, gdbpy_register_object_data);
+  auto &vec
+    = *(std::vector<gdbpy_ref<>> *) gdbarch_data (gdbarch,
+                                                 gdbpy_register_object_data);
 
   /* Ensure that we have enough entries in the vector.  */
-  if (vec->size () <= regnum)
-    vec->resize ((regnum + 1), nullptr);
+  if (vec.size () <= regnum)
+    vec.resize ((regnum + 1), nullptr);
 
   /* If we don't already have a descriptor for REGNUM in GDBARCH then
      create one now.  */
-  if (vec->at (regnum) == nullptr)
+  if (vec[regnum] == nullptr)
     {
       gdbpy_ref <register_descriptor_object> reg
        (PyObject_New (register_descriptor_object,
@@ -176,12 +176,12 @@ gdbpy_get_register_descriptor (struct gdbarch *gdbarch,
        return NULL;
       reg->regnum = regnum;
       reg->gdbarch = gdbarch;
-      vec->at (regnum) = gdbpy_ref<> ((PyObject *) reg.release ());
+      vec[regnum] = gdbpy_ref<> ((PyObject *) reg.release ());
     }
 
   /* Grab the register descriptor from the vector, the reference count is
      automatically incremented thanks to gdbpy_ref.  */
-  return vec->at (regnum);
+  return vec[regnum];
 }
 
 /* Convert the register descriptor to a string.  */