The behavior of the inline while loop has changed in 3.3.0. This unexpectedly broke my code and I couldn't find anything in the changelog about it so reporting it as a bug.
In ruby <= 3.2:
(p1)whilefalse# nothing(p1;p2)whilefalse# nothing
In ruby 3.3:
(p1)whilefalse# 1(p1;p2)whilefalse# 1 2
Essentially, if the left hand side looks like a statement, now it is treated as a do-while loop. In ruby 3.2 and less this only happened with explicit use of begin and end.
It was previously reverted presumably because the cherry-pick of bc002971b6ad483dbf69b8a275c44412bb6ab954 to ruby_3_3 doesn't really work. I had to manually create a whole backport patch without relying on git for that reason. I encourage people to file a backport pull request to ruby_3_3 (and make the CI green, which was the hard thing for this ticket) if you want to see a change backported to stable branches.