Issue #12402 has been updated by Nobuyoshi Nakada.

Description updated
Status changed from Open to Assigned
Assignee set to Nobuyoshi Nakada

----------------------------------------
Bug #12402: Inline rescue behavior inconsistent for method calls with arguments and assignment
https://bugs.ruby-lang.org/issues/12402#change-60002

* Author: Ben Klang
* Status: Assigned
* Priority: Normal
* Assignee: Nobuyoshi Nakada
* ruby -v: 2.4.0
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
In this example l'm intentionally passing bad data to `Date.parse` to trigger an exception. Depending on whether I use parenthesis in the method call, and whether I assign the result, I get different behavior for the inline rescue.

Code:

~~~ruby
var1 = "apple"
var1 = Date.parse var1 rescue nil

var2 = "apple"
var2 = Date.parse(var2) rescue nil

def example1(bar)
  Date.parse bar rescue nil
end

def example2(bar)
  bar = Date.parse bar rescue nil
  bar
end

def example3(bar)
  bar = Date.parse(bar) rescue nil
  bar
end

puts "Variable 1: #{var1.nil?}"
puts "Variable 2: #{var2.nil?}"
puts "Example method 1: #{example1("apple").nil?}"
puts "Example method 2: #{example2("apple").nil?}"
puts "Example method 3: #{example3("apple").nil?}"
~~~

I would expect all 5 outputs from the above script to return true.

Example:

```
Variable 1: false
Variable 2: true
Example method 1: true
Example method 2: false
Example method 3: true
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>