[JAEGER] Added JSOP_LAMBDA.

This commit is contained in:
David Anderson 2010-06-05 18:17:41 -07:00
parent 5eddc9e757
commit ebc66018d0
3 changed files with 35 additions and 0 deletions

View File

@ -732,6 +732,17 @@ mjit::Compiler::generateMethod()
stubCall(stubs::DefFun, Uses(0), Defs(0));
END_CASE(JSOP_DEFFUN)
BEGIN_CASE(JSOP_LAMBDA)
{
JSFunction *fun = script->getFunction(fullAtomIndex(PC));
prepareStubCall();
masm.move(ImmPtr(fun), Registers::ArgReg1);
stubCall(stubs::Lambda, Uses(0), Defs(1));
frame.takeReg(Registers::ReturnReg);
frame.pushTypedPayload(JSVAL_MASK32_FUNOBJ, Registers::ReturnReg);
}
END_CASE(JSOP_LAMBDA)
BEGIN_CASE(JSOP_GETDSLOT)
BEGIN_CASE(JSOP_CALLDSLOT)
{

View File

@ -1855,3 +1855,25 @@ stubs::RegExp(VMFrame &f, JSObject *regex)
return obj;
}
JSObject * JS_FASTCALL
stubs::Lambda(VMFrame &f, JSFunction *fun)
{
JSObject *obj = FUN_OBJECT(fun);
JSObject *parent;
if (FUN_NULL_CLOSURE(fun)) {
parent = f.fp->scopeChain;
} else {
parent = js_GetScopeChain(f.cx, f.fp);
if (!parent)
THROWV(NULL);
}
obj = CloneFunctionObject(f.cx, fun, parent);
if (!obj)
THROWV(NULL);
return obj;
}

View File

@ -65,9 +65,11 @@ void JS_FASTCALL GetElem(VMFrame &f);
void JS_FASTCALL SetElem(VMFrame &f);
void JS_FASTCALL CallName(VMFrame &f, uint32 index);
void JS_FASTCALL GetUpvar(VMFrame &f, uint32 index);
void JS_FASTCALL DefFun(VMFrame &f, uint32 index);
JSObject * JS_FASTCALL DefLocalFun(VMFrame &f, JSFunction *fun);
JSObject * JS_FASTCALL RegExp(VMFrame &f, JSObject *regex);
JSObject * JS_FASTCALL Lambda(VMFrame &f, JSFunction *fun);
void JS_FASTCALL VpInc(VMFrame &f, Value *vp);
void JS_FASTCALL VpDec(VMFrame &f, Value *vp);