summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-17 08:02:20 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-17 08:02:20 +0000
commit83fa0928d735f7076a7b755ff150cdec741a32ed (patch)
treec346640fe3a6accf7acacc21fe0c6ad339d95569 /string.c
parenteabd490119df3f6c15be62d26ed1f4d523a65f17 (diff)
* string.c (rb_str_match_m): String#match should also take
optional argument. [ruby-core:03205] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/string.c b/string.c
index 8e7ebff2e9..63816fdaff 100644
--- a/string.c
+++ b/string.c
@@ -1266,7 +1266,9 @@ static VALUE get_pat _((VALUE, int));
* str.match(pattern) => matchdata or nil
*
* Converts <i>pattern</i> to a <code>Regexp</code> (if it isn't already one),
- * then invokes its <code>match</code> method on <i>str</i>.
+ * then invokes its <code>match</code> method on <i>str</i>. If the second
+ * parameter is present, it specifies the position in the string to begin the
+ * search.
*
* 'hello'.match('(.)\1') #=> #<MatchData:0x401b3d30>
* 'hello'.match('(.)\1')[0] #=> "ll"
@@ -1275,10 +1277,17 @@ static VALUE get_pat _((VALUE, int));
*/
static VALUE
-rb_str_match_m(str, re)
- VALUE str, re;
+rb_str_match_m(argc, argv, str)
+ int argc;
+ VALUE *argv;
+ VALUE str;
{
- return rb_funcall(get_pat(re, 0), rb_intern("match"), 1, str);
+ VALUE re;
+ if (argc < 1)
+ rb_raise(rb_eArgError, "wrong number of arguments(%d for 1)", argc);
+ re = argv[0];
+ argv[0] = str;
+ return rb_funcall2(get_pat(re, 0), rb_intern("match"), argc, argv);
}
static char
@@ -4573,7 +4582,7 @@ Init_String()
rb_define_method(rb_cString, "size", rb_str_length, 0);
rb_define_method(rb_cString, "empty?", rb_str_empty, 0);
rb_define_method(rb_cString, "=~", rb_str_match, 1);
- rb_define_method(rb_cString, "match", rb_str_match_m, 1);
+ rb_define_method(rb_cString, "match", rb_str_match_m, -1);
rb_define_method(rb_cString, "succ", rb_str_succ, 0);
rb_define_method(rb_cString, "succ!", rb_str_succ_bang, 0);
rb_define_method(rb_cString, "next", rb_str_succ, 0);