🕌

[Bug #21540] a && return foo が Prism で動作するというバグ報告

に公開

[Bug #21540] prism allows foo && return bar when parse.y doesn't

  • a && return foo のようなコードは(少なくとも Ruby 2.0 以降では)禁止されていたが Prism では許可されているというバグ報告
$ ruby -cve "a && return foo"
ruby 3.5.0dev (2025-08-08T02:57:23Z master 3ad26d0501) +PRISM [x86_64-linux]
Syntax OK

$ ruby --parser=parse.y -cve "a && return foo"
ruby 3.5.0dev (2025-08-08T02:57:23Z master 3ad26d0501) [x86_64-linux]
-e:1: syntax error, unexpected local variable or method, expecting end-of-input
a && return foo
ruby: compile error (SyntaxError)
  • &&return の優先順位の問題ぽいんですかね?
  • foo && (return bar) であれば parse.y でも許可されているみたいですね
  • また parse.y でエラーになるのが compile.c でパーサーではなくてバイトコードのコンパイル時の問題ぽい?
  • いずれにせよ一貫性がある挙動にするべき問題みたいですね
GitHubで編集を提案

Discussion