Looks like there is one more separate issue here. Prism and parse.y execution result differs. ~~~ruby p <<-A, %w[a\ A b c] # Prism: ["a\n", "b", "c"] # parse.y: ["a\nb", "c"] ~~~ Changing `%w` to `%W`, Prism and parse.y are the...tompng (tomoya ishida)
Prism fails to parse this code ~~~ruby <<A; %Q A #{<<B} B ~~~ Parse error: ~~~ a.rb:4: syntax error found (SyntaxError) 2 | A 3 | #{<<B} > 4 | B | ^ unexpected constant, expecting end-of-input ~~~ `B` at line 4...tompng (tomoya ishida)
Endless method definition and command with block are syntax error in parse.y, accepted in Prism. ~~~ruby def a = a b do 1 end ~~~ Related to https://bugs.ruby-lang.org/issues/17398 and https://bugs.ruby-lang.org/issues/21711 tompng (tomoya ishida)
These are syntax errors in parse.y but accepted in Prism ~~~ruby a rescue b => c in d a rescue b in c.. a rescue b => c.. a rescue b => c::itself a rescue b => c[] a rescue b => c[0] = 1 a rescue b => c ? 1 : 2 a rescue b => c |...tompng (tomoya ishida)
`a b do end.()` `a b do end&.()` are parsed differently. Prism: parse success, parse.y: SyntaxError I personally like Prism's behavior: `.()` and `&.()` are accepted where `.f()` and `&.f()` are accepted. tompng (tomoya ishida)
In the following code, `do end` block is passed to `private` in Prism but passed to `tap` in parse.y ~~~ruby private def f = tap do end f # different result(prism: LocalJumpError, parsey: returns main) ~~~ According to https://bug...tompng (tomoya ishida)
Destructuring assignment does not work after a few iterations if YJIT is enabled. Happens in ruby 3.4.1 and 4.0.0dev. ~~~ root@05305c0005f4:/# ruby -v ruby 4.0.0dev (2025-11-23T19:10:29Z master 8d73a18187) +PRISM [x86_64-linux] root...tompng (tomoya ishida)