summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-12 07:00:12 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-12 07:00:12 +0000
commitafdfbde4e73135985a3762adc437c6e317b0904e (patch)
treeafe03ca2839d53bedcd03f4fc86b272f493a2d3a
parent6483a1057abdacff541641d117c364591bfb3e13 (diff)
* vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
vm_insnhelper.c (vm_search_method): revert r37616 because it's too slow. [ruby-dev:46477] * test/ruby/test_refinement.rb (test_inline_method_cache): skip the test until the bug is fixed efficiently. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--compile.c1
-rw-r--r--test/ruby/test_refinement.rb1
-rw-r--r--vm_core.h1
-rw-r--r--vm_insnhelper.c17
5 files changed, 13 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index eb2cf2ef67..6eb9edc01a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Mon Nov 12 15:59:38 2012 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo),
+ vm_insnhelper.c (vm_search_method): revert r37616 because it's too
+ slow. [ruby-dev:46477]
+
+ * test/ruby/test_refinement.rb (test_inline_method_cache): skip
+ the test until the bug is fixed efficiently.
+
Mon Nov 12 14:28:01 2012 NAKAMURA Usaku <usa@ruby-lang.org>
* win32/mkexports.rb (each_export): skip garbages generated by VS2012's
diff --git a/compile.c b/compile.c
index eb824caf23..16bfcefdbb 100644
--- a/compile.c
+++ b/compile.c
@@ -954,7 +954,6 @@ new_callinfo(rb_iseq_t *iseq, ID mid, int argc, VALUE block, unsigned long flag)
}
}
ci->vmstat = 0;
- ci->refinements = Qundef;
ci->blockptr = 0;
ci->recv = Qundef;
ci->call = 0; /* TODO: should set default function? */
diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb
index 9343f543f2..e367532ec5 100644
--- a/test/ruby/test_refinement.rb
+++ b/test/ruby/test_refinement.rb
@@ -726,6 +726,7 @@ class TestRefinement < Test::Unit::TestCase
end
def test_inline_method_cache
+ skip "can't implement efficiently with the current implementation of refinements"
c = InlineMethodCache::C.new
f = Proc.new { c.foo }
assert_equal("original", f.call)
diff --git a/vm_core.h b/vm_core.h
index 82400a3530..dd9e3872e2 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -153,7 +153,6 @@ typedef struct rb_call_info_struct {
/* inline cache: keys */
VALUE vmstat;
VALUE klass;
- VALUE refinements;
/* inline cache: values */
const rb_method_entry_t *me;
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index cf64c14684..554aad47b1 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -843,30 +843,19 @@ static void
vm_search_method(rb_call_info_t *ci, VALUE recv)
{
VALUE klass = CLASS_OF(recv);
- NODE *cref = rb_vm_cref();
- VALUE refinements = Qnil;
-
- if (cref && !NIL_P(cref->nd_refinements)) {
- refinements = cref->nd_refinements;
- }
#if OPT_INLINE_METHOD_CACHE
- if (LIKELY(GET_VM_STATE_VERSION() == ci->vmstat && klass == ci->klass &&
- refinements == ci->refinements)) {
+ if (LIKELY(GET_VM_STATE_VERSION() == ci->vmstat && klass == ci->klass)) {
/* cache hit! */
}
else {
- ci->me = rb_method_entry_get_with_refinements(refinements, klass,
- ci->mid,
- &ci->defined_class);
+ ci->me = rb_method_entry(klass, ci->mid, &ci->defined_class);
ci->klass = klass;
- ci->refinements = refinements;
ci->vmstat = GET_VM_STATE_VERSION();
ci->call = vm_call_general;
}
#else
- ci->me = rb_method_entry_get_with_refinements(refinements, klass, ci->mid,
- &ci->defined_class);
+ ci->me = rb_method_entry(klass, ci->mid, &ci->defined_class);
ci->call = vm_call_general;
ci->klass = klass;
#endif