[JAEGER] Added JSOP_INSTANCEOF.

This commit is contained in:
David Anderson 2010-06-08 21:46:38 -07:00
parent a385f71677
commit f251a97d3c
3 changed files with 30 additions and 0 deletions

View File

@ -896,6 +896,14 @@ mjit::Compiler::generateMethod()
frame.pop();
END_CASE(JSOP_THROW)
BEGIN_CASE(JSOP_INSTANCEOF)
prepareStubCall();
stubCall(stubs::InstanceOf, Uses(2), Defs(1));
frame.popn(2);
frame.takeReg(Registers::ReturnReg);
frame.pushTypedPayload(JSVAL_MASK32_BOOLEAN, Registers::ReturnReg);
END_CASE(JSOP_INSTANCEOF)
BEGIN_CASE(JSOP_LINENO)
END_CASE(JSOP_LINENO)

View File

@ -2473,3 +2473,24 @@ stubs::Arguments(VMFrame &f)
THROW();
}
JSBool JS_FASTCALL
stubs::InstanceOf(VMFrame &f)
{
JSContext *cx = f.cx;
JSFrameRegs &regs = f.regs;
const Value &rref = regs.sp[-1];
JSObject *obj;
if (rref.isPrimitive() ||
!(obj = &rref.asObject())->map->ops->hasInstance) {
js_ReportValueError(cx, JSMSG_BAD_INSTANCEOF_RHS,
-1, rref, NULL);
THROWV(JS_FALSE);
}
const Value &lref = regs.sp[-2];
JSBool cond = JS_FALSE;
if (!obj->map->ops->hasInstance(cx, obj, lref, &cond))
THROWV(JS_FALSE);
return cond;
}

View File

@ -128,6 +128,7 @@ void JS_FASTCALL ForName(VMFrame &f, JSAtom *atom);
JSBool JS_FASTCALL ValueToBoolean(VMFrame &f);
JSString * JS_FASTCALL TypeOf(VMFrame &f);
JSBool JS_FASTCALL InstanceOf(VMFrame &f);
}}} /* namespace stubs,mjit,js */