diff options
Diffstat (limited to 'load.c')
-rw-r--r-- | load.c | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -943,6 +943,42 @@ load_ext(VALUE 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) * 1: successfully loaded (true) |