Repository navigation
Raise ruby/spec floor 22140 -> 22215 after wave 29 - #652
Merged
Merged
Conversation
Three units, and this wave is mostly the line map paying out. #649 Harvesting what #645 made possible: owner-qualified backtrace labels (Object#foo where we printed foo), warn(uplevel:) prepending the caller's file and line — its scaffolding still carried the comment "rbgo has no caller line to prepend", untrue since yesterday — and Thread.each_caller_location. #650 Keywords decided at the CALL SITE, as MRI does: a trailing Hash is a positional argument unless the call site wrote it as keywords. The new flag is NEGATIVE on purpose — only sites the compiler can prove positional are flagged, so Object#send, Proc#call and define_method bodies keep the older behaviour rather than silently losing keywords. Also: post parameters bind BEFORE optionals (def q(a, b=9, *c, d) gave [1, nil, [], 2] where MRI gives [1, 9, [], 2]), a duplicated parameter name is a SyntaxError, and the implicit `it` block parameter. #648 Marshal's ivar and extend containers, Time's instance variables and the :zone/:offset round trip, String#unpack encodings (+27) #647 dependency bump, green without intervention Measured with scripts/conformance/rubyspec/run.sh against the pinned corpus at 87b1631, 16-way, TIMEOUT=25, three consecutive runs: 22227, 22226, 22226. The floor is set eleven below the lowest — the margin rule the last four bumps used. One defect this wave exposed rather than introduced, now issue #651: three parallel frame stacks are kept in step by hand, and FOUR sites truncate frameNames alone. It went unnoticed while backtraces read that stack alone; frameLabel now reads all three, so one leaked entry makes every later label name a different frame. One site fixed in #649, three named and routed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three units, and this wave is mostly the line map paying out.
Object#foowhere we printedfoo),warn(uplevel:),Thread.each_caller_locationitblock parameterMarshal's ivar and extend containers,Time's instance variables and the:zone/:offsetround trip,String#unpackencodings (+27)Measurement
scripts/conformance/rubyspec/run.sh, pinned corpus87b1631, 16-way,TIMEOUT=25, three consecutive runs:Floor set eleven below the lowest run, the margin rule the last four bumps used.
Two things worth keeping from this wave
The keyword flag is negative on purpose. Only call sites the compiler can prove positional are flagged;
Object#send,Proc#callanddefine_methodbodies — which cannot say what was written — keep the older behaviour rather than silently losing keywords. A positive flag would have been simpler and would have broken the paths that cannot answer.A defect this wave exposed rather than introduced — now #651. The VM keeps three parallel frame stacks in step by hand, and four sites truncate one of them alone. Nothing noticed while backtraces read only that stack;
frameLabelnow reads all three, so a single leaked entry makes every later label name a different frame. One site fixed in #649, three named with file and line and routed. The shape is the real problem: four sites found, nothing preventing a fifth, and one slice of frame structs would make the invariant unrepresentable to violate.🤖 Generated with Claude Code