diff options
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | src/vm.c | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/include/mruby.h b/include/mruby.h index 3063358f1..2f2f3753d 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -216,6 +216,7 @@ void mrb_p(mrb_state*, mrb_value); mrb_int mrb_obj_id(mrb_value obj); mrb_sym mrb_to_id(mrb_state *mrb, mrb_value name); +int mrb_obj_eq(mrb_state*, mrb_value, mrb_value); int mrb_obj_equal(mrb_state*, mrb_value, mrb_value); int mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2); mrb_value mrb_Integer(mrb_state *mrb, mrb_value val); @@ -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; } |
