summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-09-10 22:09:24 +0900
committerYukihiro Matsumoto <[email protected]>2012-09-10 22:09:24 +0900
commite49224284d9e3ddb3499c6f4a4f36a2d5c9f2af4 (patch)
treec0683131bade104a8305948fdb733fb2eb6a5277 /src
parentb21afdfbaf6da36788578959d70c00d2e1aab2be (diff)
downloadmruby-e49224284d9e3ddb3499c6f4a4f36a2d5c9f2af4.tar.gz
mruby-e49224284d9e3ddb3499c6f4a4f36a2d5c9f2af4.zip
OP_EQ should try direct compararison first
Diffstat (limited to 'src')
-rw-r--r--src/vm.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index c49d106c2..75a4cd442 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1495,7 +1495,13 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
CASE(OP_EQ) {
/* A B C R(A) := R(A)<R(A+1) (Syms[B]=:<,C=1)*/
- OP_CMP(==);
+ int a = GETARG_A(i);
+ if (mrb_obj_eq(mrb, regs[a], regs[a+1])) {
+ SET_TRUE_VALUE(regs[a]);
+ }
+ else {
+ OP_CMP(==);
+ }
NEXT;
}