[00/47] Use methods for struct value

Message ID 20230209-submit-value-fixups-2023-v1-0-55dc2794dbb9@tromey.com
Headers
Series Use methods for struct value |

Message

Tom Tromey Feb. 9, 2023, 9:38 p.m. UTC
  This series changes many value-related functions to be methods.  It
also moves the definition of struct value to value.h, so that callers
will benefit by inlining the smaller methods.  The members of value
are all made private at the end of the series.

It's difficult to decide exactly which value functions ought to be
converted, because there are so many.  In the end I chose a relatively
minimal approach -- only those that require direct access to the inner
workings of value.

It's possible, even easy, to convert more functions.  If there are
some in particular that seem worthwhile, let me know.

I tacked on one small cleanup at the end of this series, but as it was
already fairly long, I didn't try to do all the possible cleanups.
For example, many things could use bool, some of the setter functions
could be removed in favor of specialized constructors, etc.

Regression tested on x86-64 Fedora 36.

Tom

PS - I'm testing the "b4 send" command, so my apologies if something
goes wrong.

---
Tom Tromey (47):
      Rename all fields of struct value
      Move ~value body out-of-line
      Move struct value to value.h
      Turn value_type into method
      Turn deprecated_set_value_type into a method
      Turn value_arch into method
      Turn value_bitsize into method
      Turn value_bitpos into method
      Turn value_parent into method
      Turn value_offset into method
      Turn deprecated_value_modifiable into method
      Turn value_enclosing_type into method
      Turn some value offset functions into method
      Turn value_lazy and set_value_lazy functions into methods
      Turn value_stack and set_value_stack functions into methods
      Turn value_computed_closure and value_computed_funcs functions into methods
      Convert value_lval_const and deprecated_lval_hack to methods
      Turn value_initialized and set_value_initialized functions into methods
      Turn value_address and set_value_address functions into methods
      Turn more deprecated_* functions into methods
      Turn allocate_value_lazy into a static "constructor"
      Turn allocate_value into a static "constructor"
      Turn allocate_computed_value into static "constructor"
      Turn allocate_optimized_out_value into static "constructor"
      Turn value_zero into static "constructor"
      Turn some value_contents functions into methods
      Turn value_fetch_lazy into a method
      Turn allocate_value_contents into a method
      Turn value_contents_eq into a method
      Turn value_bits_synthetic_pointer into a method
      Move value_ref_policy methods out-of-line
      Turn value_incref and value_decref into methods
      Turn remaining value_contents functions into methods
      Fully qualify calls to copy in value.c
      Turn value_copy into a method
      Turn many optimized-out value functions into methods
      Turn value_non_lval and value_force_lval into methods
      Turn set_value_component_location into method
      Change some code to use value methods
      Turn some xmethod functions into methods
      Turn preserve_one_value into method
      Turn various value copying-related functions into methods
      Add value::set_modifiable
      Make struct value data members private
      Make ~value private
      Introduce set_lval method on value
      Remove deprecated_lval_hack

 gdb/aarch64-linux-tdep.c            |    2 +-
 gdb/aarch64-tdep.c                  |   36 +-
 gdb/ada-exp.h                       |    4 +-
 gdb/ada-exp.y                       |    4 +-
 gdb/ada-lang.c                      |  566 ++++++-------
 gdb/ada-tasks.c                     |    8 +-
 gdb/ada-valprint.c                  |   60 +-
 gdb/ada-varobj.c                    |   12 +-
 gdb/alpha-tdep.c                    |   14 +-
 gdb/amd64-tdep.c                    |   30 +-
 gdb/amd64-windows-tdep.c            |   20 +-
 gdb/arc-tdep.c                      |    8 +-
 gdb/arch-utils.c                    |    4 +-
 gdb/arm-tdep.c                      |   16 +-
 gdb/avr-tdep.c                      |    4 +-
 gdb/ax-gdb.c                        |    8 +-
 gdb/bfin-tdep.c                     |    6 +-
 gdb/breakpoint.c                    |   55 +-
 gdb/c-exp.h                         |    2 +-
 gdb/c-lang.c                        |   16 +-
 gdb/c-valprint.c                    |   46 +-
 gdb/c-varobj.c                      |    8 +-
 gdb/cli/cli-cmds.c                  |    6 +-
 gdb/cli/cli-dump.c                  |   12 +-
 gdb/cli/cli-utils.c                 |    4 +-
 gdb/compile/compile-c-symbols.c     |    4 +-
 gdb/compile/compile-cplus-symbols.c |    4 +-
 gdb/compile/compile-loc2c.c         |    4 +-
 gdb/compile/compile-object-load.c   |    6 +-
 gdb/cp-abi.c                        |    2 +-
 gdb/cp-abi.h                        |    6 +-
 gdb/cp-valprint.c                   |   40 +-
 gdb/cris-tdep.c                     |    4 +-
 gdb/csky-tdep.c                     |    4 +-
 gdb/d-valprint.c                    |   15 +-
 gdb/darwin-nat-info.c               |    2 +-
 gdb/dtrace-probe.c                  |    2 +-
 gdb/dummy-frame.c                   |    4 +-
 gdb/dwarf2/expr.c                   |  176 ++--
 gdb/dwarf2/frame.c                  |    4 +-
 gdb/dwarf2/loc.c                    |   58 +-
 gdb/dwarf2/read.c                   |    4 +-
 gdb/elfread.c                       |   14 +-
 gdb/eval.c                          |  252 +++---
 gdb/expop.h                         |   18 +-
 gdb/f-lang.c                        |  184 ++---
 gdb/f-valprint.c                    |   14 +-
 gdb/findcmd.c                       |    4 +-
 gdb/findvar.c                       |   52 +-
 gdb/frame-unwind.c                  |   16 +-
 gdb/frame.c                         |   56 +-
 gdb/frv-tdep.c                      |   10 +-
 gdb/gdbtypes.c                      |   14 +-
 gdb/gdbtypes.h                      |    4 +-
 gdb/gnu-v2-abi.c                    |   31 +-
 gdb/gnu-v3-abi.c                    |   68 +-
 gdb/go-valprint.c                   |    8 +-
 gdb/guile/scm-math.c                |   12 +-
 gdb/guile/scm-pretty-print.c        |    8 +-
 gdb/guile/scm-value.c               |   44 +-
 gdb/h8300-tdep.c                    |    6 +-
 gdb/hppa-tdep.c                     |   20 +-
 gdb/i386-darwin-tdep.c              |    6 +-
 gdb/i386-tdep.c                     |   56 +-
 gdb/i386-windows-tdep.c             |    2 +-
 gdb/i387-tdep.c                     |    4 +-
 gdb/ia64-tdep.c                     |   32 +-
 gdb/infcall.c                       |   18 +-
 gdb/infcmd.c                        |   10 +-
 gdb/infrun.c                        |   22 +-
 gdb/iq2000-tdep.c                   |    6 +-
 gdb/linespec.c                      |    2 +-
 gdb/lm32-tdep.c                     |    4 +-
 gdb/loongarch-tdep.c                |    6 +-
 gdb/m2-lang.c                       |   12 +-
 gdb/m2-valprint.c                   |   14 +-
 gdb/m32c-tdep.c                     |    6 +-
 gdb/m32r-tdep.c                     |   10 +-
 gdb/m68hc11-tdep.c                  |    8 +-
 gdb/m68k-tdep.c                     |    4 +-
 gdb/mep-tdep.c                      |   10 +-
 gdb/mi/mi-cmd-stack.c               |    9 +-
 gdb/mi/mi-main.c                    |   10 +-
 gdb/mips-tdep.c                     |   32 +-
 gdb/mn10300-tdep.c                  |   12 +-
 gdb/msp430-tdep.c                   |    8 +-
 gdb/nds32-tdep.c                    |    8 +-
 gdb/nios2-tdep.c                    |    6 +-
 gdb/objc-lang.c                     |    2 +-
 gdb/opencl-lang.c                   |  115 ++-
 gdb/or1k-tdep.c                     |   18 +-
 gdb/p-exp.y                         |    6 +-
 gdb/p-valprint.c                    |   38 +-
 gdb/ppc-linux-nat.c                 |   18 +-
 gdb/ppc-linux-tdep.c                |    4 +-
 gdb/ppc-sysv-tdep.c                 |   20 +-
 gdb/printcmd.c                      |   80 +-
 gdb/python/py-framefilter.c         |    8 +-
 gdb/python/py-inferior.c            |    4 +-
 gdb/python/py-prettyprint.c         |   10 +-
 gdb/python/py-type.c                |    2 +-
 gdb/python/py-unwind.c              |   14 +-
 gdb/python/py-value.c               |   60 +-
 gdb/python/py-xmethods.c            |    6 +-
 gdb/regcache.c                      |   14 +-
 gdb/riscv-tdep.c                    |   32 +-
 gdb/rl78-tdep.c                     |    4 +-
 gdb/rs6000-aix-tdep.c               |   20 +-
 gdb/rs6000-lynx178-tdep.c           |   18 +-
 gdb/rust-lang.c                     |   94 +--
 gdb/rx-tdep.c                       |    8 +-
 gdb/s390-tdep.c                     |   34 +-
 gdb/sh-tdep.c                       |   20 +-
 gdb/sparc-tdep.c                    |   12 +-
 gdb/sparc64-tdep.c                  |    8 +-
 gdb/stack.c                         |   64 +-
 gdb/std-regs.c                      |    8 +-
 gdb/tic6x-tdep.c                    |    8 +-
 gdb/tilegx-tdep.c                   |    8 +-
 gdb/tracepoint.c                    |    8 +-
 gdb/typeprint.c                     |    6 +-
 gdb/v850-tdep.c                     |   14 +-
 gdb/valarith.c                      |  208 ++---
 gdb/valops.c                        |  525 ++++++------
 gdb/valprint.c                      |  112 ++-
 gdb/value.c                         | 1503 ++++++++++++-----------------------
 gdb/value.h                         | 1115 ++++++++++++++++----------
 gdb/varobj.c                        |   32 +-
 gdb/vax-tdep.c                      |    4 +-
 gdb/windows-tdep.c                  |    8 +-
 gdb/xstormy16-tdep.c                |    8 +-
 gdb/xtensa-tdep.c                   |    8 +-
 132 files changed, 3299 insertions(+), 3451 deletions(-)
---
base-commit: 8ac460b742bc7f49acbcd78f8822386f56814055
change-id: 20230209-submit-value-fixups-2023-3e7d7c6750af

Best regards,
  

Comments

Simon Marchi Feb. 10, 2023, 2:54 a.m. UTC | #1
On 2/9/23 16:38, Tom Tromey wrote:
> This series changes many value-related functions to be methods.  It
> also moves the definition of struct value to value.h, so that callers
> will benefit by inlining the smaller methods.  The members of value
> are all made private at the end of the series.
> 
> It's difficult to decide exactly which value functions ought to be
> converted, because there are so many.  In the end I chose a relatively
> minimal approach -- only those that require direct access to the inner
> workings of value.
> 
> It's possible, even easy, to convert more functions.  If there are
> some in particular that seem worthwhile, let me know.
> 
> I tacked on one small cleanup at the end of this series, but as it was
> already fairly long, I didn't try to do all the possible cleanups.
> For example, many things could use bool, some of the setter functions
> could be removed in favor of specialized constructors, etc.
> 
> Regression tested on x86-64 Fedora 36.
> 
> Tom
> 
> PS - I'm testing the "b4 send" command, so my apologies if something
> goes wrong.

I was able to fetch it fine using "b4 am".  However, it told me the DKIM
signature for "tromey.com" was incorrect :P.

I went relatively quickly over the whole series.  I concentrated on
changes in value.h, since the rest is fairly mechanical.  It looks
really nice, I had started to do that a little bit of these changes, but
I was sooo far away from what you have here.

If you want to go over the series again quickly, there are a few
comments in value.h that refer to now non-existent parameters (which
because "this").  They could be reworded to talk about "this value"
instead.

I agree with the instances where you removed "deprecated" from some
functions.  I guess some refactoring work was started many moons ago to
get rid of them, but wasn't completed, and now the context is completely
lost.  It's pointless to call something deprecated but also leave it
there forever.

Maybe others will want to take a look, but from my side:

Approved-By: Simon Marchi <simon.marchi@efficios.com>

Simon
  
Tom Tromey Feb. 10, 2023, 6:08 p.m. UTC | #2
Simon> I was able to fetch it fine using "b4 am".  However, it told me the DKIM
Simon> signature for "tromey.com" was incorrect :P.

I looked and it seems I can enable DKIM.  I'll give it a try I guess.  I
hope there aren't any drawbacks.

Simon> Maybe others will want to take a look, but from my side:

Thank you.

Simon> Approved-By: Simon Marchi <simon.marchi@efficios.com>

Oooh, I found something cool.  I used b4 to apply this trailer -- and it
applied it to every patch in the series *except* the last one, which is
new and which you couldn't have seen.  Very neat.

I'll send v2 in a bit.

Tom