summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharliesome <charliesome@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-08-31 06:07:21 +0000
committercharliesome <charliesome@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-08-31 06:07:21 +0000
commitd0d63cff8ac29b294d6751c61528bb01c4d30d64 (patch)
tree28290b6adb997772aee4a541bb70adcac486b838
parente1fd7fa03e254e5bcb99f14d2ef56bf144afb2fc (diff)
* 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
-rw-r--r--ChangeLog7
-rw-r--r--compile.c2
-rw-r--r--insns.def6
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 <charliesome@ruby-lang.org>
+
+ * 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 <akr@fsij.org>
* 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);
}
}