|
diff --git a/ChangeLog b/ChangeLog
|
|
index f87cbbb..5d76ee2 100644
|
|
diff --git a/eval.c b/eval.c
|
|
index 1b746f2..2041459 100644
|
|
--- a/eval.c
|
|
+++ b/eval.c
|
|
@@ -1512,7 +1512,7 @@ rb_f_callee_name(void)
|
|
static VALUE
|
|
f_current_dirname(void)
|
|
{
|
|
- VALUE base = rb_current_realfilepath();
|
|
+ VALUE base = rb_current_relative_realfilepath();
|
|
if (NIL_P(base)) {
|
|
return Qnil;
|
|
}
|
|
diff --git a/internal.h b/internal.h
|
|
index c8317a5..8ac577e 100644
|
|
--- a/internal.h
|
|
+++ b/internal.h
|
|
@@ -313,6 +313,7 @@ void rb_vm_bugreport(void);
|
|
/* vm_eval.c */
|
|
void Init_vm_eval(void);
|
|
VALUE rb_current_realfilepath(void);
|
|
+VALUE rb_current_relative_realfilepath(void);
|
|
VALUE rb_check_block_call(VALUE, ID, int, VALUE *, VALUE (*)(ANYARGS), VALUE);
|
|
typedef void rb_check_funcall_hook(int, VALUE, ID, int, VALUE *, VALUE);
|
|
VALUE rb_check_funcall_with_hook(VALUE recv, ID mid, int argc, VALUE *argv,
|
|
diff --git a/vm_eval.c b/vm_eval.c
|
|
index 2f4bbcb..04ec017 100644
|
|
--- a/vm_eval.c
|
|
+++ b/vm_eval.c
|
|
@@ -1905,6 +1905,16 @@ rb_current_realfilepath(void)
|
|
return Qnil;
|
|
}
|
|
|
|
+VALUE
|
|
+rb_current_relative_realfilepath(void)
|
|
+{
|
|
+ rb_thread_t *th = GET_THREAD();
|
|
+ rb_control_frame_t *cfp = th->cfp;
|
|
+ cfp = vm_get_ruby_level_caller_cfp(th, RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp));
|
|
+ if (cfp != 0) return cfp->iseq->location.path;
|
|
+ return Qnil;
|
|
+}
|
|
+
|
|
void
|
|
Init_vm_eval(void)
|
|
{
|