aboutsummaryrefslogtreecommitdiffstats
path: root/enumerator.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2023-11-22 10:49:28 -0500
committerPeter Zhu <peter@peterzhu.ca>2023-11-27 08:29:35 -0500
commit2dadd17c780108d9f98989578149a091ff2c0f50 (patch)
tree85bae303fdc480fa598eb1bd14c8eee6de3e5756 /enumerator.c
parentd7165d88ec715f4c73b6fcbbbd6b185145359757 (diff)
downloadruby-2dadd17c780108d9f98989578149a091ff2c0f50.tar.gz
Implement Write Barriers on Enumerator::Generator
Diffstat (limited to 'enumerator.c')
-rw-r--r--enumerator.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/enumerator.c b/enumerator.c
index 602735119b..8e86176c90 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -1434,7 +1434,7 @@ static const rb_data_type_t generator_data_type = {
NULL,
generator_compact,
},
- 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_EMBEDDABLE
+ 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED | RUBY_TYPED_EMBEDDABLE
};
static struct generator *
@@ -1474,7 +1474,7 @@ generator_init(VALUE obj, VALUE proc)
rb_raise(rb_eArgError, "unallocated generator");
}
- ptr->proc = proc;
+ RB_OBJ_WRITE(obj, &ptr->proc, proc);
return obj;
}
@@ -1522,7 +1522,7 @@ generator_init_copy(VALUE obj, VALUE orig)
rb_raise(rb_eArgError, "unallocated generator");
}
- ptr1->proc = ptr0->proc;
+ RB_OBJ_WRITE(obj, &ptr1->proc, ptr0->proc);
return obj;
}
@@ -1689,7 +1689,7 @@ lazy_generator_init(VALUE enumerator, VALUE procs)
lazy_init_block, rb_ary_new3(2, obj, procs));
gen_ptr = generator_ptr(generator);
- gen_ptr->obj = obj;
+ RB_OBJ_WRITE(generator, &gen_ptr->obj, obj);
return generator;
}