* 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
@ -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>
|
Sun Aug 1 09:12:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* include/ruby/win32.h: latest x86_64 mingw defines stati64.
|
* include/ruby/win32.h: latest x86_64 mingw defines stati64.
|
||||||
|
@ -31,25 +31,6 @@ class Pathname
|
|||||||
|
|
||||||
# :startdoc:
|
# :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
|
if File::ALT_SEPARATOR
|
||||||
SEPARATOR_LIST = "#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}"
|
SEPARATOR_LIST = "#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}"
|
||||||
SEPARATOR_PAT = /[#{SEPARATOR_LIST}]/
|
SEPARATOR_PAT = /[#{SEPARATOR_LIST}]/
|
||||||
|
@ -150,6 +150,23 @@ path_inspect(VALUE self)
|
|||||||
return rb_sprintf("#<%s:%s>", c, RSTRING_PTR(str));
|
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
|
* == Pathname
|
||||||
*
|
*
|
||||||
@ -346,4 +363,5 @@ Init_pathname()
|
|||||||
rb_define_method(rb_cPathname, "to_s", path_to_s, 0);
|
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, "to_path", path_to_s, 0);
|
||||||
rb_define_method(rb_cPathname, "inspect", path_inspect, 0);
|
rb_define_method(rb_cPathname, "inspect", path_inspect, 0);
|
||||||
|
rb_define_method(rb_cPathname, "sub", path_sub, -1);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user