shape.c: fix off by one error in shape_tree_mark

This commit is contained in:
Jean Boussier 2025-06-03 22:11:10 +02:00
parent bbd5a5a81d
commit 6b8dcb7c8f
Notes: git 2025-06-04 05:59:35 +00:00
2 changed files with 6 additions and 1 deletions

View File

@ -381,6 +381,7 @@ managed_id_table_dup_i(ID id, VALUE val, void *data)
VALUE
rb_managed_id_table_dup(VALUE old_table)
{
RUBY_ASSERT(RB_TYPE_P(old_table, T_DATA));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(old_table), &managed_id_table_type));
struct rb_id_table *new_tbl;
@ -394,6 +395,7 @@ rb_managed_id_table_dup(VALUE old_table)
int
rb_managed_id_table_lookup(VALUE table, ID id, VALUE *valp)
{
RUBY_ASSERT(RB_TYPE_P(table, T_DATA));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
return rb_id_table_lookup(RTYPEDDATA_GET_DATA(table), id, valp);
@ -402,6 +404,7 @@ rb_managed_id_table_lookup(VALUE table, ID id, VALUE *valp)
int
rb_managed_id_table_insert(VALUE table, ID id, VALUE val)
{
RUBY_ASSERT(RB_TYPE_P(table, T_DATA));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
return rb_id_table_insert(RTYPEDDATA_GET_DATA(table), id, val);
@ -410,6 +413,7 @@ rb_managed_id_table_insert(VALUE table, ID id, VALUE val)
size_t
rb_managed_id_table_size(VALUE table)
{
RUBY_ASSERT(RB_TYPE_P(table, T_DATA));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
return rb_id_table_size(RTYPEDDATA_GET_DATA(table));
@ -418,6 +422,7 @@ rb_managed_id_table_size(VALUE table)
void
rb_managed_id_table_foreach(VALUE table, rb_id_table_foreach_func_t *func, void *data)
{
RUBY_ASSERT(RB_TYPE_P(table, T_DATA));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
rb_id_table_foreach(RTYPEDDATA_GET_DATA(table), func, data);

View File

@ -303,7 +303,7 @@ static void
shape_tree_mark(void *data)
{
rb_shape_t *cursor = rb_shape_get_root_shape();
rb_shape_t *end = RSHAPE(GET_SHAPE_TREE()->next_shape_id);
rb_shape_t *end = RSHAPE(GET_SHAPE_TREE()->next_shape_id - 1);
while (cursor < end) {
if (cursor->edges && !SINGLE_CHILD_P(cursor->edges)) {
// FIXME: GC compaction may call `rb_shape_traverse_from_new_root`