From edf1b9640bbc981c8a094d6ca29d444b1ed50a2c Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 24 Oct 2023 07:27:01 -0600 Subject: [PATCH] Add two convenience methods to block This adds a couple of convenience methods, block::is_static_block and block::is_global_block. --- gdb/block.h | 15 +++++++++++++++ gdb/findvar.c | 5 ++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gdb/block.h b/gdb/block.h index 3a197e63754..9fccbe02b99 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -254,10 +254,25 @@ struct block : public allocate_on_obstack const struct block *static_block () const; + /* Return true if this block is a static block. */ + + bool is_static_block () const + { + const block *sup = superblock (); + if (sup == nullptr) + return false; + return sup->is_global_block (); + } + /* Return the static block associated with block. */ const struct block *global_block () const; + /* Return true if this block is a global block. */ + + bool is_global_block () const + { return superblock () == nullptr; } + /* Set the compunit of this block, which must be a global block. */ void set_compunit_symtab (struct compunit_symtab *); diff --git a/gdb/findvar.c b/gdb/findvar.c index 4e992ecdcc7..1079b85df82 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -460,8 +460,7 @@ get_hosting_frame (struct symbol *var, const struct block *var_block, tests that embed global/static symbols with null location lists. We want to get instead of when evaluating them so return a frame instead of raising an error. */ - else if (var_block == var_block->global_block () - || var_block == var_block->static_block ()) + else if (var_block->is_global_block () || var_block->is_static_block ()) return frame; /* We have to handle the "my_func::my_local_var" notation. This requires us @@ -486,7 +485,7 @@ get_hosting_frame (struct symbol *var, const struct block *var_block, /* If we failed to find the proper frame, fallback to the heuristic method below. */ - else if (frame_block == frame_block->global_block ()) + else if (frame_block->is_global_block ()) { frame = NULL; break; -- 2.30.2