mirror of
https://github.com/ruby/ruby.git
synced 2026-11-09 08:42:18 +08:00
A specialized invokesuper guards that the method's frame has no block
handler, and that guard never recompiled, so a super in a method called
with a block side-exited on every call. Profile whether invokesuper ran
with a block and use the dynamic super for those sites, and let the
guard recompile when a block shows up after compilation.
Only count the frame's block when the call site doesn't pass its own
(`super(&b)`, `super { }`), and keep the flag in a `bool` on
`ProfileEntry`, which fits in existing padding.
Fixes https://github.com/Shopify/ruby/issues/1100