1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/pathname/pathname.c (path_sub): Pathname#sub translated

from pathname.rb.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28812 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2010-08-01 00:22:18 +00:00
parent 933e5e0911
commit 572b8b3749
3 changed files with 23 additions and 19 deletions

View file

@ -1,3 +1,8 @@
Sun Aug 1 09:21:32 2010 Tanaka Akira <akr@fsij.org>
* ext/pathname/pathname.c (path_sub): Pathname#sub translated
from pathname.rb.
Sun Aug 1 09:12:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/win32.h: latest x86_64 mingw defines stati64.

View file

@ -31,25 +31,6 @@ class Pathname
# :startdoc:
# Return a pathname which is substituted by String#sub.
def sub(pattern, *rest, &block)
if block
path = @path.sub(pattern, *rest) {|*args|
begin
old = Thread.current[:pathname_sub_matchdata]
Thread.current[:pathname_sub_matchdata] = $~
eval("$~ = Thread.current[:pathname_sub_matchdata]", block.binding)
ensure
Thread.current[:pathname_sub_matchdata] = old
end
yield(*args)
}
else
path = @path.sub(pattern, *rest)
end
self.class.new(path)
end
if File::ALT_SEPARATOR
SEPARATOR_LIST = "#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}"
SEPARATOR_PAT = /[#{SEPARATOR_LIST}]/

View file

@ -150,6 +150,23 @@ path_inspect(VALUE self)
return rb_sprintf("#<%s:%s>", c, RSTRING_PTR(str));
}
/*
* Return a pathname which is substituted by String#sub.
*/
static VALUE
path_sub(int argc, VALUE *argv, VALUE self)
{
VALUE str = get_strpath(self);
if (rb_block_given_p()) {
str = rb_block_call(str, rb_intern("sub"), argc, argv, 0, 0);
}
else {
str = rb_funcall2(str, rb_intern("sub"), argc, argv);
}
return rb_class_new_instance(1, &str, rb_obj_class(self));
}
/*
* == Pathname
*
@ -346,4 +363,5 @@ Init_pathname()
rb_define_method(rb_cPathname, "to_s", path_to_s, 0);
rb_define_method(rb_cPathname, "to_path", path_to_s, 0);
rb_define_method(rb_cPathname, "inspect", path_inspect, 0);
rb_define_method(rb_cPathname, "sub", path_sub, -1);
}