Project

General

Profile

Actions

Bug #21540

open

prism allows `foo && return bar` when parse.y doesn't

Added by Earlopain (Earlopain _) 2 days ago. Updated 2 days ago.

Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 3.5.0dev (2025-08-08T02:57:23Z master 3ad26d0501) [x86_64-linux]
[ruby-core:122953]

Description

Code such as foo && return bar has been disallowed in ruby since at least Ruby 2.0. Prism allows it though:

$ 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)

The code seems to behave like I'd expect it to and I wouldn't mind it being accepted but it is inconsistent. Also happens on Ruby 3.4

Actions #1

Updated by Earlopain (Earlopain _) 2 days ago

  • Description updated (diff)

Updated by nobu (Nobuyoshi Nakada) 2 days ago

It is because of the precedence, and has been since 1.x at least.

Actions #3

Updated by nobu (Nobuyoshi Nakada) 2 days ago

  • Backport changed from 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN to 3.2: DONTNEED, 3.3: DONTNEED, 3.4: REQUIRED

Updated by Earlopain (Earlopain _) 2 days ago

Right, I understand. foo && (return bar) would be allowed, thanks for clarifying (works as expected in prism and parse.y)

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0