load.c: fix rb_load_protect condition

* load.c (rb_load_protect): fix the condition to load the found
  file.  fixup of r59155.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-09-24 05:22:23 +00:00
Родитель 1d44d10b48
Коммит 6f968cab15
5 изменённых файлов: 37 добавлений и 1 удалений

Просмотреть файл

@ -0,0 +1 @@
create_makefile('-test-/load/protect')

Просмотреть файл

@ -0,0 +1,19 @@
#include <ruby.h>
static VALUE
load_protect(int argc, VALUE *argv, VALUE self)
{
int state;
VALUE path, wrap;
rb_scan_args(argc, argv, "11", &path, &wrap);
rb_load_protect(path, RTEST(wrap), &state);
if (state) rb_jump_tag(state);
return Qnil;
}
void
Init_protect(void)
{
VALUE mod = rb_define_module("Bug");
rb_define_singleton_method(mod, "load_protect", load_protect, -1);
}

2
load.c
Просмотреть файл

@ -677,7 +677,7 @@ rb_load_protect(VALUE fname, int wrap, int *pstate)
}
POP_TAG();
if (state != TAG_NONE) state = rb_load_internal0(GET_THREAD(), path, wrap);
if (state == TAG_NONE) state = rb_load_internal0(GET_THREAD(), path, wrap);
if (state != TAG_NONE) *pstate = state;
}

Просмотреть файл

@ -0,0 +1,2 @@
# frozen_string_literal: true
raise "foo"

Просмотреть файл

@ -0,0 +1,14 @@
# frozen_string_literal: true
require 'test/unit'
require '-test-/load/protect'
class Test_Load_Protect < Test::Unit::TestCase
def test_load_protect
assert_raise(LoadError) {
Bug.load_protect(__dir__+"/nonexistent.rb")
}
assert_raise_with_message(RuntimeError, "foo") {
Bug.load_protect(__dir__+"/script.rb")
}
end
end