load.c (RubyVM.resolve_feature_path): New method. [Feature #15230]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66237 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
98ff2bbd7a
commit
0cd28199e5
7
NEWS
7
NEWS
@ -266,6 +266,13 @@ sufficient information, see the ChangeLog file or Redmine
|
||||
* Range#step now returns an instance of Enumerator::ArithmeticSequence
|
||||
class rather than one of Enumerator class.
|
||||
|
||||
[RubyVM]
|
||||
|
||||
[New methods]
|
||||
|
||||
* RubyVM.resolve_feature_path identifies the file that will be loaded by
|
||||
"require(feature)". [experimental] [Feature #15230]
|
||||
|
||||
[RubyVM::AbstractSyntaxTree]
|
||||
|
||||
[New methods]
|
||||
|
36
load.c
36
load.c
@ -942,6 +942,42 @@ load_ext(VALUE path)
|
||||
return (VALUE)dln_load(RSTRING_PTR(path));
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* RubyVM.resolve_feature_path(feature) -> [:rb or :so, path]
|
||||
*
|
||||
* Identifies the file that will be loaded by "require(feature)".
|
||||
* This API is experimental and just for internal.
|
||||
*
|
||||
* RubyVM.resolve_feature_path("set")
|
||||
* #=> [:rb, "/path/to/feature.rb"]
|
||||
*/
|
||||
|
||||
VALUE
|
||||
rb_resolve_feature_path(VALUE klass, VALUE fname)
|
||||
{
|
||||
VALUE path;
|
||||
int found;
|
||||
VALUE sym;
|
||||
|
||||
fname = rb_get_path_check(fname, 0);
|
||||
path = rb_str_encode_ospath(fname);
|
||||
found = search_required(path, &path, 0);
|
||||
|
||||
switch (found) {
|
||||
case 'r':
|
||||
sym = ID2SYM(rb_intern("rb"));
|
||||
break;
|
||||
case 's':
|
||||
sym = ID2SYM(rb_intern("so"));
|
||||
break;
|
||||
default:
|
||||
load_failed(fname);
|
||||
}
|
||||
|
||||
return rb_ary_new_from_args(2, sym, path);
|
||||
}
|
||||
|
||||
/*
|
||||
* returns
|
||||
* 0: if already loaded (false)
|
||||
|
4
vm.c
4
vm.c
@ -2869,6 +2869,8 @@ static VALUE usage_analysis_operand_stop(VALUE self);
|
||||
static VALUE usage_analysis_register_stop(VALUE self);
|
||||
#endif
|
||||
|
||||
VALUE rb_resolve_feature_path(VALUE klass, VALUE fname);
|
||||
|
||||
void
|
||||
Init_VM(void)
|
||||
{
|
||||
@ -3171,6 +3173,8 @@ Init_VM(void)
|
||||
|
||||
/* vm_backtrace.c */
|
||||
Init_vm_backtrace();
|
||||
|
||||
rb_define_singleton_method(rb_cRubyVM, "resolve_feature_path", rb_resolve_feature_path, 1);
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
x
Reference in New Issue
Block a user