diff options
author | nari <nari@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-03 01:37:50 +0000 |
---|---|---|
committer | nari <nari@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-03 01:37:50 +0000 |
commit | 805b08f2925f5ceec67bf472e76e869bbddc8c39 (patch) | |
tree | 95071dbe2bf00ba5d91d7c0e3c0c137ec9d32265 /eval.c | |
parent | d2fd7f32c8f4b134dc6716903be3be0f6c67760b (diff) | |
download | ruby-805b08f2925f5ceec67bf472e76e869bbddc8c39.tar.gz |
* eval.c (f_current_dirname): add the new method for Kernel.
This method almotst same as File.dirname(__FILE__). One
different behavior is it returns nil when __FILE__ returns nil.
[Feature #3346]
* NEWS: ditto
* test/ruby/test_method.rb: related test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37432 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -1556,6 +1556,25 @@ rb_f_callee_name(void) } } +/* + * call-seq: + * __dir__ -> string + * + * Returns the value of <code>File.dirname(__FILE__)</code> + * If <code>__FILE__</code> is <code>nil</code>, it returns <code>nil</code>. + * + */ +static VALUE +f_current_dirname(void) +{ + VALUE base = rb_current_realfilepath(); + if (NIL_P(base)) { + return Qnil; + } + base = rb_file_dirname(base); + return base; +} + void Init_eval(void) { @@ -1569,6 +1588,7 @@ Init_eval(void) rb_define_global_function("__method__", rb_f_method_name, 0); rb_define_global_function("__callee__", rb_f_callee_name, 0); + rb_define_global_function("__dir__", f_current_dirname, 0); rb_define_private_method(rb_cModule, "append_features", rb_mod_append_features, 1); rb_define_private_method(rb_cModule, "extend_object", rb_mod_extend_object, 1); |