diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-12-12 02:56:12 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-12-12 02:56:12 +0000 |
commit | 6dd5ee752ae1d6268619b96dec7d31e993cc59d9 (patch) | |
tree | 85a4ba28f3d0b584438569244f45d12dedec138e /re.c | |
parent | 3f3fc0182ec0c60899e9bea5639b19981acc4a9a (diff) |
String#match? and Symbol#match?
* string.c (rb_str_match_m_p): inverse of Regexp#match?. based on
the patch by Herwin Weststrate <[email protected]>.
[Fix GH-1483] [Feature #12898]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -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; |