summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorDaniel Colson <[email protected]>2025-05-25 17:26:07 -0400
committerHiroshi SHIBATA <[email protected]>2025-06-06 11:29:42 +0900
commitdeb70925a2e5f4a272b2ecb4571adfe5b7ca97f2 ()
tree657b1bd3d8d80206e4eb88287936b9d4b8a409c7 /ext
parent1dd8671c46c155920b141407ba442523758a7128 (diff)
[ruby/strscan] Implement Write Barrier
(https://.com/ruby/strscan/pull/156) StringScanner holds the string being scanned, and a regex for methods like `match?`. Triggering the write barrier for those allows us to mark this as WB protected. https://.com/ruby/strscan/commit/32fec70407
-rw-r--r--ext/strscan/strscan.c10
1 files changed, 5 insertions, 5 deletions
@@ -209,7 +209,7 @@ strscan_memsize(const void *ptr)
static const rb_data_type_t strscanner_type = {
"StringScanner",
{strscan_mark, strscan_free, strscan_memsize},
- 0, 0, RUBY_TYPED_FREE_IMMEDIATELY
};
static VALUE
@@ -273,7 +273,7 @@ strscan_initialize(int argc, VALUE *argv, VALUE self)
p->fixed_anchor_p = false;
}
StringValue(str);
- p->str = str;
return self;
}
@@ -303,7 +303,7 @@ strscan_init_copy(VALUE vself, VALUE vorig)
orig = check_strscan(vorig);
if (self != orig) {
self->flags = orig->flags;
- self->str = orig->str;
self->prev = orig->prev;
self->curr = orig->curr;
if (rb_reg_region_copy(&self->regs, &orig->regs))
@@ -467,7 +467,7 @@ strscan_set_string(VALUE self, VALUE str)
struct strscanner *p = check_strscan(self);
StringValue(str);
- p->str = str;
p->curr = 0;
CLEAR_MATCH_STATUS(p);
return str;
@@ -712,7 +712,7 @@ strscan_do_scan(VALUE self, VALUE pattern, int succptr, int getstr, int headonly
if (RB_TYPE_P(pattern, T_REGEXP)) {
OnigPosition ret;
- p->regex = pattern;
ret = rb_reg_onig_match(p->regex,
p->str,
headonly ? strscan_match : strscan_search,