From d0d63cff8ac29b294d6751c61528bb01c4d30d64 Mon Sep 17 00:00:00 2001 From: charliesome Date: Sat, 31 Aug 2013 06:07:21 +0000 Subject: [PATCH] * compile.c (NODE_MATCH3): pass CALL_INFO to opt_regexpmatch2 * insns.def (opt_regexpmatch2): use CALL_SIMPLE_METHOD to call =~ if the receiver is not a T_STRING [Bug #8847] [ruby-core:56916] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42742 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ compile.c | 2 +- insns.def | 6 ++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8e2b7bf304..4b56d54687 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Aug 31 15:03:00 2013 Charlie Somerville + + * compile.c (NODE_MATCH3): pass CALL_INFO to opt_regexpmatch2 + + * insns.def (opt_regexpmatch2): use CALL_SIMPLE_METHOD to call =~ if + the receiver is not a T_STRING [Bug #8847] [ruby-core:56916] + Sat Aug 31 14:07:11 2013 Tanaka Akira * lib/securerandom.rb (random_bytes): Use Process.clock_gettime. diff --git a/compile.c b/compile.c index b364c9d9bf..bed329881e 100644 --- a/compile.c +++ b/compile.c @@ -4760,7 +4760,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) else { ADD_SEQ(ret, recv); ADD_SEQ(ret, val); - ADD_INSN(ret, line, opt_regexpmatch2); + ADD_INSN1(ret, line, opt_regexpmatch2, new_callinfo(iseq, idEqTilde, 1, 0, 0)); } } else { diff --git a/insns.def b/insns.def index 9a516ccbcd..20ba34f067 100644 --- a/insns.def +++ b/insns.def @@ -2090,7 +2090,7 @@ opt_regexpmatch1 */ DEFINE_INSN opt_regexpmatch2 -() +(CALL_INFO ci) (VALUE obj2, VALUE obj1) (VALUE val) { @@ -2098,7 +2098,9 @@ opt_regexpmatch2 val = rb_reg_match(obj1, obj2); } else { - val = rb_funcall(obj2, idEqTilde, 1, obj1); + PUSH(obj2); + PUSH(obj1); + CALL_SIMPLE_METHOD(obj2); } }