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:
parent
933e5e0911
commit
572b8b3749
3 changed files with 23 additions and 19 deletions
|
@ -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.
|
||||
|
|
|
@ -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}]/
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue