diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-08 02:57:39 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-09-08 02:57:39 +0000 |
commit | a31c632299b72cd9e4ff53cec6d7b56f1f8a54f7 (patch) | |
tree | 41e34ef0a04b01d6d0d26ca0a71e91aed4c7bd6a | |
parent | 922bc54adb2b1cbcc14edc93a37f626c7a784a02 (diff) |
* iseq.c (iseq_mark): no need to mark inline cache entries.
* insns.def (onceinlinecache, setinlinecache): save a value
to mark cached value.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | insns.def | 4 | ||||
-rw-r--r-- | iseq.c | 11 |
3 files changed, 11 insertions, 11 deletions
@@ -1,3 +1,10 @@ +Tue Sep 8 11:53:58 2009 Koichi Sasada <ko1@atdot.net> + + * iseq.c (iseq_mark): no need to mark inline cache entries. + + * insns.def (onceinlinecache, setinlinecache): save a value + to mark cached value. + Tue Sep 8 08:32:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> * test/dl/test_{cfunc,ptr}.rb: added tests from Aaron Patterson. @@ -1200,6 +1200,7 @@ onceinlinecache } else { /* none */ + ic->ic_value = Qundef; val = Qnil; } } @@ -1217,6 +1218,9 @@ setinlinecache { IC ic = GET_CONST_INLINE_CACHE(dst); + if (ic->ic_value == Qundef) { + rb_ary_push(GET_ISEQ()->mark_ary, val); + } ic->ic_value = val; ic->ic_vmstat = GET_VM_STATE_VERSION() - ruby_vm_const_missing_count; ruby_vm_const_missing_count = 0; @@ -90,7 +90,6 @@ iseq_mark(void *ptr) RUBY_MARK_ENTER("iseq"); if (ptr) { - int i; rb_iseq_t *iseq = ptr; RUBY_GC_INFO("%s @ %s\n", RSTRING_PTR(iseq->name), RSTRING_PTR(iseq->filename)); @@ -104,16 +103,6 @@ iseq_mark(void *ptr) /* RUBY_MARK_UNLESS_NULL(iseq->cached_special_block); */ RUBY_MARK_UNLESS_NULL(iseq->orig); - for (i=0; i<iseq->ic_size; i++) { - struct iseq_inline_cache_entry *const ic = &iseq->ic_entries[i]; - RUBY_MARK_UNLESS_NULL(ic->ic_class); - RUBY_MARK_UNLESS_NULL(ic->ic_value); - if (ic->ic_vmstat != GET_VM_STATE_VERSION()) continue; - if (ic->ic_method) { - rb_gc_mark_method_entry(ic->ic_method); - } - } - if (iseq->compile_data != 0) { struct iseq_compile_data *const compile_data = iseq->compile_data; RUBY_MARK_UNLESS_NULL(compile_data->mark_ary); |