diff --git a/ChangeLog b/ChangeLog index 7e0665ed55..7bbf3380b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Thu Sep 11 19:32:30 2014 Koichi Sasada + + * gc.c (rb_gc_mark_values): added. + This function is similar to rb_gc_mark_locations(), but not + conservertive. + + * internal.h: ditto. + + * vm.c (env_mark): use rb_gc_mark_values() because env values should + be Ruby VALUEs. + Thu Sep 11 19:16:39 2014 Koichi Sasada * gc.c (gc_mark_ptr): rename to gc_mark_set. diff --git a/gc.c b/gc.c index 3970c8334d..8d56e3af0a 100644 --- a/gc.c +++ b/gc.c @@ -3639,6 +3639,17 @@ rb_gc_mark_locations(const VALUE *start, const VALUE *end) gc_mark_locations(&rb_objspace, start, end); } +void +rb_gc_mark_values(long n, const VALUE *values) +{ + rb_objspace_t *objspace = &rb_objspace; + long i; + + for (i=0; ienv\n"); - rb_gc_mark_locations(env->env, env->env + env->env_size); + rb_gc_mark_values((long)env->env_size, env->env); RUBY_GC_INFO("env->prev_envval\n"); RUBY_MARK_UNLESS_NULL(env->prev_envval);