[#65451] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...

Issue #10333 has been updated by Koichi Sasada.

9 messages 2014/10/07

[ruby-core:65879] [ruby-trunk - Bug #10413] Unexpected block invocation with unknown keywords

From: nobu@...
Date: 2014-10-24 00:22:20 UTC
List: ruby-core #65879
Issue #10413 has been updated by Nobuyoshi Nakada.


I changed the behavior of `rb_hash_delete()` itself, and see if somebody rants.

`rb_hash_delete()` is still called at several places, and possibly other extension libraries,
and they don't seem to intend to call the block given to the calling method.
e.g. http://wannabe53.wordpress.com/2012/04/01/%E6%8B%A1%E5%BC%B5%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E5%AE%9A%E7%BE%A9%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F/

----------------------------------------
Bug #10413: Unexpected block invocation with unknown keywords
https://bugs.ruby-lang.org/issues/10413#change-49619

* Author: Koichi Sasada
* Status: Closed
* Priority: Normal
* Assignee: Koichi Sasada
* Category: core
* Target version: current: 2.2.0
* ruby -v: 2.2dev
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
When unknown keywords are passed, unexpected block is invoked.

```ruby
def bar(k2: 'v2')
end

def foo
  bar(k1: 1)
end

foo(){
  puts caller_locations
  raise "unreachable"
}
```

current behavior:

```
ruby 2.2.0dev (2014-10-22 trunk 48083) [i386-mswin32_110]
test.rb:10:in `block in <main>': unreachable (RuntimeError)
	from test.rb:5:in `foo'
	from test.rb:8:in `<main>'
test.rb:5:in `foo'
test.rb:8:in `<main>'
```

expected: 

```
../../gitruby/test.rb:5:in `foo': unknown keyword: k1 (ArgumentError)
        from ../../gitruby/test.rb:8:in `<main>'
```

This strange behavior is because "unknown_keyword_error" in class.c calls rb_hash_delete() (Hash#delete) with :k1 and invoke passed block.

I'm now re-writing all of this part and my branch does not have this problem.
However, Ruby 2.0 and 2.1 have same problem.





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

In This Thread

Prev Next