зеркало из https://github.com/github/ruby.git
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:
Родитель
1d44d10b48
Коммит
6f968cab15
|
@ -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
2
load.c
|
@ -677,7 +677,7 @@ rb_load_protect(VALUE fname, int wrap, int *pstate)
|
||||||
}
|
}
|
||||||
POP_TAG();
|
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;
|
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
|
Загрузка…
Ссылка в новой задаче