mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
OP_EQ should try direct compararison first
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user