gdb/python: Use reference not pointer in py-registers.c

Pedro's review comments arrived after I'd already committed this
change:

  commit f7306dac19
  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.
This commit is contained in:
Andrew Burgess 2020-07-22 14:57:55 +01:00
parent df16e041de
commit a67a1c41fe
2 changed files with 16 additions and 9 deletions

View 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> 2020-07-22 Simon Marchi <simon.marchi@polymtl.ca>
Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>

View file

@ -92,8 +92,7 @@ extern PyTypeObject reggroup_object_type
static void * static void *
gdbpy_register_object_data_init (struct gdbarch *gdbarch) gdbpy_register_object_data_init (struct gdbarch *gdbarch)
{ {
std::vector<gdbpy_ref<>> *vec = new (std::vector<gdbpy_ref<>>); return new std::vector<gdbpy_ref<>>;
return (void *) vec;
} }
/* Return a gdb.RegisterGroup object wrapping REGGROUP. The register /* Return a gdb.RegisterGroup object wrapping REGGROUP. The register
@ -158,16 +157,17 @@ static gdbpy_ref<>
gdbpy_get_register_descriptor (struct gdbarch *gdbarch, gdbpy_get_register_descriptor (struct gdbarch *gdbarch,
int regnum) int regnum)
{ {
auto vec = (std::vector<gdbpy_ref<>> *) gdbarch_data auto &vec
(gdbarch, gdbpy_register_object_data); = *(std::vector<gdbpy_ref<>> *) gdbarch_data (gdbarch,
gdbpy_register_object_data);
/* Ensure that we have enough entries in the vector. */ /* Ensure that we have enough entries in the vector. */
if (vec->size () <= regnum) if (vec.size () <= regnum)
vec->resize ((regnum + 1), nullptr); vec.resize ((regnum + 1), nullptr);
/* If we don't already have a descriptor for REGNUM in GDBARCH then /* If we don't already have a descriptor for REGNUM in GDBARCH then
create one now. */ create one now. */
if (vec->at (regnum) == nullptr) if (vec[regnum] == nullptr)
{ {
gdbpy_ref <register_descriptor_object> reg gdbpy_ref <register_descriptor_object> reg
(PyObject_New (register_descriptor_object, (PyObject_New (register_descriptor_object,
@ -176,12 +176,12 @@ gdbpy_get_register_descriptor (struct gdbarch *gdbarch,
return NULL; return NULL;
reg->regnum = regnum; reg->regnum = regnum;
reg->gdbarch = gdbarch; 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 /* Grab the register descriptor from the vector, the reference count is
automatically incremented thanks to gdbpy_ref. */ automatically incremented thanks to gdbpy_ref. */
return vec->at (regnum); return vec[regnum];
} }
/* Convert the register descriptor to a string. */ /* Convert the register descriptor to a string. */