From 6dd5ee752ae1d6268619b96dec7d31e993cc59d9 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 12 Dec 2016 02:56:12 +0000 Subject: String#match? and Symbol#match? * string.c (rb_str_match_m_p): inverse of Regexp#match?. based on the patch by Herwin Weststrate . [Fix GH-1483] [Feature #12898] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- re.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 're.c') diff --git a/re.c b/re.c index 95ba903480..17893dd8e8 100644 --- a/re.c +++ b/re.c @@ -3225,19 +3225,22 @@ rb_reg_match_m(int argc, VALUE *argv, VALUE re) static VALUE rb_reg_match_m_p(int argc, VALUE *argv, VALUE re) { - VALUE str, initpos; - long pos = 0; + long pos = rb_check_arity(argc, 1, 2) > 1 ? NUM2LONG(argv[1]) : 0; + return rb_reg_match_p(re, argv[0], pos); +} + +VALUE +rb_reg_match_p(VALUE re, VALUE str, long pos) +{ regex_t *reg; onig_errmsg_buffer err = ""; OnigPosition result; const UChar *start, *end; int tmpreg; - rb_scan_args(argc, argv, "11", &str, &initpos); if (NIL_P(str)) return Qfalse; - str = SYMBOL_P(str) ? rb_sym2str(str) : rb_str_to_str(str); - if (argc == 2) { - pos = NUM2LONG(initpos); + str = SYMBOL_P(str) ? rb_sym2str(str) : StringValue(str); + if (pos) { if (pos < 0) { pos += NUM2LONG(rb_str_length(str)); if (pos < 0) return Qfalse; -- cgit v1.2.3