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
|
* Range#step now returns an instance of Enumerator::ArithmeticSequence
|
||||||
class rather than one of Enumerator class.
|
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]
|
[RubyVM::AbstractSyntaxTree]
|
||||||
|
|
||||||
[New methods]
|
[New methods]
|
||||||
|
36
load.c
36
load.c
@ -942,6 +942,42 @@ load_ext(VALUE path)
|
|||||||
return (VALUE)dln_load(RSTRING_PTR(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
|
* returns
|
||||||
* 0: if already loaded (false)
|
* 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);
|
static VALUE usage_analysis_register_stop(VALUE self);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
VALUE rb_resolve_feature_path(VALUE klass, VALUE fname);
|
||||||
|
|
||||||
void
|
void
|
||||||
Init_VM(void)
|
Init_VM(void)
|
||||||
{
|
{
|
||||||
@ -3171,6 +3173,8 @@ Init_VM(void)
|
|||||||
|
|
||||||
/* vm_backtrace.c */
|
/* vm_backtrace.c */
|
||||||
Init_vm_backtrace();
|
Init_vm_backtrace();
|
||||||
|
|
||||||
|
rb_define_singleton_method(rb_cRubyVM, "resolve_feature_path", rb_resolve_feature_path, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user