vm_eval.c: UncaughtThrowError

* vm_eval.c (rb_throw_obj): throw UncaughtThrowError instead of
  ArgumentError.  [Feature #10480]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48433 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-11-15 07:28:08 +00:00
parent abd5ba5af2
commit 558b9191c0
7 changed files with 98 additions and 9 deletions

View file

@ -147,7 +147,7 @@ class TestException < Test::Unit::TestCase
end
def test_catch_throw_noarg
assert_nothing_raised(ArgumentError) {
assert_nothing_raised(UncaughtThrowError) {
result = catch {|obj|
throw obj, :ok
assert(false, "should not reach here")
@ -157,13 +157,18 @@ class TestException < Test::Unit::TestCase
end
def test_uncaught_throw
assert_raise_with_message(ArgumentError, /uncaught throw/) {
tag = nil
e = assert_raise_with_message(UncaughtThrowError, /uncaught throw/) {
catch("foo") {|obj|
throw obj.dup, :ok
tag = obj.dup
throw tag, :ok
assert(false, "should not reach here")
}
assert(false, "should not reach here")
}
assert_not_nil(tag)
assert_same(tag, e.tag)
assert_equal(:ok, e.value)
end
def test_catch_throw_in_require