diff options
author | Simon Marchi <simon.marchi@efficios.com> | 2022-12-13 22:34:41 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2023-01-20 14:48:57 -0500 |
commit | 908de5e67156068f3da74c60dea6f360246a3d0b (patch) | |
tree | 2f8e8934f1212a0c69d30010270499dc3f9bcac4 /gdb/frame.c | |
parent | 93e39555dd0fcd222ce68fc7162f511056361bc7 (diff) | |
download | binutils-gdb-908de5e67156068f3da74c60dea6f360246a3d0b.tar.gz |
gdb: make frame_info_ptr auto-reinflatable
This is the second step of making frame_info_ptr automatic, reinflate on
demand whenever trying to obtain the wrapper frame_info pointer, either
through the get method or operator->. Make the reinflate method
private, it is used as a convenience method in those two.
Add an "is_null" method, because it is often needed to know whether the
frame_info_ptr wraps an frame_info or is empty.
Make m_ptr mutable, so that it's possible to reinflate const
frame_info_ptr objects. Whether m_ptr is nullptr or not does not change
the logical state of the object, because we re-create it on demand. I
believe this is the right use case for mutable.
Change-Id: Icb0552d0035e227f81eb3c121d8a9bb2f9d25794
Reviewed-By: Bruno Larsen <blarsen@redhat.com>
Diffstat (limited to 'gdb/frame.c')
-rw-r--r-- | gdb/frame.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gdb/frame.c b/gdb/frame.c index c4b0f0166d6..a08a8f47ebc 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -3224,8 +3224,8 @@ frame_info_ptr::frame_info_ptr (struct frame_info *ptr) /* See frame-info-ptr.h. */ -void -frame_info_ptr::reinflate () +frame_info * +frame_info_ptr::reinflate () const { /* Ensure we have a valid frame level (sentinel frame or above). */ gdb_assert (m_cached_level >= -1); @@ -3233,7 +3233,7 @@ frame_info_ptr::reinflate () if (m_ptr != nullptr) { /* The frame_info wasn't invalidated, no need to reinflate. */ - return; + return m_ptr; } if (m_cached_id.user_created_p) @@ -3255,6 +3255,7 @@ frame_info_ptr::reinflate () } gdb_assert (m_ptr != nullptr); + return m_ptr; } void _initialize_frame (); |