Repository navigation
Raise ruby/spec floor 21970 -> 22140 after wave 28 - #646
Merged
Merged
Conversation
Four units, and one of them was a dependency away: #639 regexp search anchoring and encoding, Refinement#import_methods, pack/unpack #645 THE LINE MAP. __LINE__ evaluated to 0 everywhere because the ISeq carried no line table — 101 examples across five directories were blocked on it, and three earlier agents each reported it as the wall they could not pass. The wall was one repository down: the parser's AST carried no position information at all, 55 node types with no line field, and the lexer discarded every token's line at the AST boundary. go-ruby-parser v0.3.0 adds ast.Program.Lines; this PR builds MRI's compressed insns_info/positions table on it. language/line_spec 0/6 -> 6/6, backtraces carry real lines, frame labels name blocks the way MRI does. #640 Kernel#sleep with the fiber scheduler (sleep_spec 0 -> 15, one example had been hanging the whole file), File.open's mode/flags/perm contract driven by the open(2) flag set rather than a six-way mode string, IO::Buffer.map (+90 across core/file, core/io, core/kernel) #537, #527 already in the previous floor's tree Measured with scripts/conformance/rubyspec/run.sh against the pinned corpus at 87b1631, 16-way, TIMEOUT=25, three consecutive runs: 22153, 22152, 22152. The floor is set twelve below the lowest, the margin rule the last three bumps used: enough for the run-to-run jitter, not enough to hide the loss of a spec file. #615 remains open and still costs a file when it fires. 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.
Four units.
language/line_spec0/6 → 6/6, real lines in backtraces, MRI-shaped frame labelsKernel#sleep+ the fiber scheduler,File.open's mode/flags/perm contract,IO::Buffer.mapsleep_spec0 → 15Refinement#import_methods, pack/unpackast.Program.LinesThe wall was one repository down
__LINE__evaluated to 0 everywhere, and 101 examples across five directories were blocked on it —const_source_location, everyThread::Backtrace::Locationspec,each_caller_location,warn(uplevel:),line_spec. Three earlier agents each reported it as the thing they could not get past, and each assumed the fix was in the compiler.It was not. The parser's AST carried no position information at all: 55 node types, no line or column field anywhere, and the lexer — which knows every token's line — discarded it at the AST boundary. No amount of compiler work could have produced a line. That is why this took a parser release (
ast.Program.Lines, v0.3.0) before the VM half could start.The table itself is MRI's shape, not a line per instruction:
insns_info[]besidepositions[], written inemit()so a statement emitting nothing contributes no entry and one emitting twenty contributes one (iseq.cv3_4_0:673, read back byget_insn_info_binary_searchat :2160).Measurement
scripts/conformance/rubyspec/run.sh, pinned corpus87b1631, 16-way,TIMEOUT=25, three consecutive runs:Floor set twelve below the lowest run — the margin rule the last three bumps used: enough for the run-to-run jitter, not enough to hide the loss of a whole spec file. #615 is still open and still costs a file when it fires.
Worth recording from this wave
Lines, so every AOT-compiled frame would have reported line 0 — the old behaviour reintroduced silently on that one path.TestEmbeddedPreludeMatchesSourcecaught it.IO.selectcarried a NaN guard that could never run — the coercion it calls raises on NaN itself rather than returning one. It read as an uncovered branch; it was dead code, and is deleted.🤖 Generated with Claude Code