Project

General

Profile

Actions

Bug #7170

closed

tOP_ASGN and rescue_modifier precedence, with a few confusing examples

Added by hasari (Hiro Asari) over 11 years ago. Updated over 11 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.0.0dev (2012-10-12 trunk 37163) [x86_64-darwin12.2.0]
Backport:
[ruby-core:48016]

Description

parse.y shows that tOP_ASGN has precedence over modifier_rescue.

So I expect that

a = 1
a += [] rescue 5

should be parsed as "(a += []) rescue 5". Furthermore, it should evaluate to 5, and leave a untouched.

But in reality, this raises a TypeError. (If you rescue this TypeError, you can see that a is untouched.)

Likewise,

a = 'a'
a += b rescue 'c'

should not raise a NameError (for b), evaluate to 'c', and leave 'a' untouched.

However, in reality, this does not raise any exception, but it evaluates to 'ac' and assigns the value 'ac' to a.

Did I reason this incorrectly? Or is there a bug somewhere?

Updated by hasari (Hiro Asari) over 11 years ago

Hmm. I think I read parse.y wrong. modifier_rescue has higher precedence than tOP_ASGN.

Sorry about the noise.

Updated by nobu (Nobuyoshi Nakada) over 11 years ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF

Like0
Like0Like0