Eliminate the two-level data structures behind location_specs
authorPedro Alves <pedro@palves.net>
Fri, 27 May 2022 12:13:41 +0000 (13:13 +0100)
committerPedro Alves <pedro@palves.net>
Fri, 17 Jun 2022 08:55:39 +0000 (09:55 +0100)
commit40d97ee21fc3e39db73ee8f84b847a22f9d251cc
tree13d9f949b41d4550d1a8ba18333ed5bd4244bdfc
parent264f98902f27497f7494933628b0f5c4e117fe59
Eliminate the two-level data structures behind location_specs

Currently, there's the location_spec hierarchy, and then some
location_spec subclasses have their own struct type holding all their
data fields.

I.e., there is this:

 location_spec
   explicit_location_spec
   linespec_location_spec
   address_location_spec
   probe_location_spec

and then these separate types:

  explicit_location
  linespec_location

where:

  explicit_location_spec
     has-a explicit_location
  linespec_location_spec
     has-a linespec_location

This patch eliminates explicit_location and linespec_location,
inlining their members in the corresponding location_spec type.

The location_spec subclasses were the ones currently defined in
location.c, so they are moved to the header.  Since the definitions of
the classes are now visible, we no longer need location_spec_deleter.

Some constructors that are used for cloning location_specs, like:

  explicit explicit_location_spec (const struct explicit_location *loc)

... were converted to proper copy ctors.

In the process, initialize_explicit_location is eliminated, and some
functions that returned the "data type behind a locspec", like
get_linespec_location are converted to downcast functions, like
as_linespec_location_spec.

Change-Id: Ia31ccef9382b25a52b00fa878c8df9b8cf2a6c5a
gdb/break-catch-throw.c
gdb/breakpoint.c
gdb/completer.c
gdb/linespec.c
gdb/location.c
gdb/location.h
gdb/mi/mi-cmd-break.c
gdb/probe.c
gdb/python/py-breakpoint.c