diff options
author | Matt Valentine-House <matt@eightbitraptor.com> | 2022-06-17 11:40:11 +0100 |
---|---|---|
committer | Peter Zhu <peter@peterzhu.ca> | 2022-06-17 09:15:22 -0400 |
commit | 721e012d42a9fbc5b8484805c880f70cfefa94ef (patch) | |
tree | 1033e5c8065596a2622e7a3dae8e6d8e7d902d5f /misc | |
parent | c34a5469c8d53029a5f3cdde0ca855e47a92c7d7 (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
Notes:
Merged: https://github.com/ruby/ruby/pull/6033
Diffstat (limited to 'misc')
-rwxr-xr-x | misc/lldb_cruby.py | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/misc/lldb_cruby.py b/misc/lldb_cruby.py index ef4820b1a5..a752b98bb3 100755 --- a/misc/lldb_cruby.py +++ b/misc/lldb_cruby.py @@ -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)) + len = ((flags & (RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6|RUBY_FL_USER7|RUBY_FL_USER8|RUBY_FL_USER9)) >> (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)) + len = ((flags & (RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6|RUBY_FL_USER7|RUBY_FL_USER8|RUBY_FL_USER9)) >> (RUBY_FL_USHIFT+3)) ptr = val.GetValueForExpressionPath("->as.ary") else: len = val.GetValueForExpressionPath("->as.heap.len").GetValueAsSigned() |