mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Should require without wrapper module
This commit is contained in:
parent
a206738762
commit
ad3f7a3667
2 changed files with 20 additions and 0 deletions
7
load.c
7
load.c
|
@ -978,6 +978,9 @@ static int
|
||||||
require_internal(rb_execution_context_t *ec, VALUE fname, int safe, int exception)
|
require_internal(rb_execution_context_t *ec, VALUE fname, int safe, int exception)
|
||||||
{
|
{
|
||||||
volatile int result = -1;
|
volatile int result = -1;
|
||||||
|
rb_thread_t *th = rb_ec_thread_ptr(ec);
|
||||||
|
volatile VALUE wrapper = th->top_wrapper;
|
||||||
|
volatile VALUE self = th->top_self;
|
||||||
volatile VALUE errinfo = ec->errinfo;
|
volatile VALUE errinfo = ec->errinfo;
|
||||||
enum ruby_tag_type state;
|
enum ruby_tag_type state;
|
||||||
struct {
|
struct {
|
||||||
|
@ -993,6 +996,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int safe, int exceptio
|
||||||
EC_PUSH_TAG(ec);
|
EC_PUSH_TAG(ec);
|
||||||
saved.safe = rb_safe_level();
|
saved.safe = rb_safe_level();
|
||||||
ec->errinfo = Qnil; /* ensure */
|
ec->errinfo = Qnil; /* ensure */
|
||||||
|
th->top_wrapper = 0;
|
||||||
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
|
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
|
||||||
long handle;
|
long handle;
|
||||||
int found;
|
int found;
|
||||||
|
@ -1029,6 +1033,9 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int safe, int exceptio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EC_POP_TAG();
|
EC_POP_TAG();
|
||||||
|
th = rb_ec_thread_ptr(ec);
|
||||||
|
th->top_self = self;
|
||||||
|
th->top_wrapper = wrapper;
|
||||||
if (ftptr) load_unlock(RSTRING_PTR(path), !state);
|
if (ftptr) load_unlock(RSTRING_PTR(path), !state);
|
||||||
|
|
||||||
rb_set_safe_level_force(saved.safe);
|
rb_set_safe_level_force(saved.safe);
|
||||||
|
|
|
@ -384,6 +384,19 @@ class TestRequire < Test::Unit::TestCase
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_require_in_wrapped_load
|
||||||
|
Dir.mktmpdir do |tmp|
|
||||||
|
File.write("#{tmp}/1.rb", "require_relative '2'\n")
|
||||||
|
File.write("#{tmp}/2.rb", "class Foo\n""end\n")
|
||||||
|
assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
|
||||||
|
path = ""#{tmp.dump}"/1.rb"
|
||||||
|
begin;
|
||||||
|
load path, true
|
||||||
|
assert_instance_of(Class, Foo)
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_load_scope
|
def test_load_scope
|
||||||
bug1982 = '[ruby-core:25039] [Bug #1982]'
|
bug1982 = '[ruby-core:25039] [Bug #1982]'
|
||||||
Tempfile.create(["test_ruby_test_require", ".rb"]) {|t|
|
Tempfile.create(["test_ruby_test_require", ".rb"]) {|t|
|
||||||
|
|
Loading…
Reference in a new issue