summaryrefslogtreecommitdiff
path: root/ext/strscan
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2020-10-02 10:54:31 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2020-10-02 12:01:57 -0700
commit6aa466ba9cf3a0a597716bf7584735ca980622d0 (patch)
treeb01a19c80f40e07dd30ae5019223ccadecf079f9 /ext/strscan
parent873c8a14f0a12eaf47a064024184a4adfaa04dd9 (diff)
mark regex internal to string scanner
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3623
Diffstat (limited to 'ext/strscan')
-rw-r--r--ext/strscan/strscan.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c
index 61c8d8972c..db87818b44 100644
--- a/ext/strscan/strscan.c
+++ b/ext/strscan/strscan.c
@@ -176,6 +176,7 @@ strscan_mark(void *ptr)
{
struct strscanner *p = ptr;
rb_gc_mark(p->str);
+ rb_gc_mark(p->regex);
}
static void
@@ -212,6 +213,7 @@ strscan_s_allocate(VALUE klass)
CLEAR_MATCH_STATUS(p);
onig_region_init(&(p->regs));
p->str = Qnil;
+ p->regex = Qnil;
return obj;
}
@@ -1168,7 +1170,7 @@ strscan_aref(VALUE self, VALUE idx)
idx = rb_sym2str(idx);
/* fall through */
case T_STRING:
- if (!p->regex) return Qnil;
+ if (!RTEST(p->regex)) return Qnil;
RSTRING_GETMEM(idx, name, i);
i = name_to_backref_number(&(p->regs), p->regex, name, name + i, rb_enc_get(idx));
break;