Add two convenience methods to block

This adds a couple of convenience methods, block::is_static_block and
block::is_global_block.
This commit is contained in:
Tom Tromey 2023-10-24 07:27:01 -06:00
parent 3141397e86
commit edf1b9640b
2 changed files with 17 additions and 3 deletions

View File

@ -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 *);

View File

@ -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 <optimized out> instead of <frame required> 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;