summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Valentine-House <[email protected]>2022-06-17 11:40:11 +0100
committerPeter Zhu <[email protected]>2022-06-17 09:15:22 -0400
commit721e012d42a9fbc5b8484805c880f70cfefa94ef ()
tree1033e5c8065596a2622e7a3dae8e6d8e7d902d5f
parentc34a5469c8d53029a5f3cdde0ca855e47a92c7d7 (diff)
[ci skip][lldb] Fix array length representation with USING_RVARGC
This commit makes `rp` report the correct array length in lldb. When USING_RVARGC is set we use 7 bits of the flags to store the array len rather than the usual 2, so they need to be part of the mask when calculating the length in lldb. When calculating whether rvargc is enabled I've used the same approach that's used by `GC.using_rvargc?` which is to detect whether there is more than one size pool in the current objspace.
Notes: Merged: https://.com/ruby/ruby/pull/6033
-rwxr-xr-xmisc/lldb_cruby.py4
1 files changed, 2 insertions, 2 deletions
@@ -77,7 +77,7 @@ class BackTrace:
pathobj = pathobj.Cast(self.tRArray)
if flags & RUBY_FL_USER1:
- len = ((flags & (RUBY_FL_USER3|RUBY_FL_USER4)) >> (RUBY_FL_USHIFT+3))
ptr = pathobj.GetValueForExpressionPath("->as.ary")
else:
len = pathobj.GetValueForExpressionPath("->as.heap.len").GetValueAsSigned()
@@ -321,7 +321,7 @@ def lldb_inspect(debugger, target, result, val):
tRArray = target.FindFirstType("struct RArray").GetPointerType()
val = val.Cast(tRArray)
if flags & RUBY_FL_USER1:
- len = ((flags & (RUBY_FL_USER3|RUBY_FL_USER4)) >> (RUBY_FL_USHIFT+3))
ptr = val.GetValueForExpressionPath("->as.ary")
else:
len = val.GetValueForExpressionPath("->as.heap.len").GetValueAsSigned()