/* static */ void ArgumentsObject::MaybeForwardToCallObject(AbstractFramePtr frame, JSObject *obj, ArgumentsData *data) { JSScript *script = frame.script(); if (frame.fun()->isHeavyweight() && script->argsObjAliasesFormals()) { obj->initFixedSlot(MAYBE_CALL_SLOT, ObjectValue(frame.callObj())); for (AliasedFormalIter fi(script); fi; fi++) data->args[fi.frameIndex()] = JS::MagicValueUint32(fi.scopeSlot()); } }
/* static */ void ArgumentsObject::MaybeForwardToCallObject(AbstractFramePtr frame, ArgumentsObject* obj, ArgumentsData* data) { JSScript* script = frame.script(); if (frame.callee()->needsCallObject() && script->argumentsAliasesFormals()) { obj->initFixedSlot(MAYBE_CALL_SLOT, ObjectValue(frame.callObj())); for (PositionalFormalParameterIter fi(script); fi; fi++) { if (fi.closedOver()) data->args[fi.argumentSlot()] = MagicEnvSlotValue(fi.location().slot()); } } }
void js::SetReturnValueForClosingGenerator(JSContext* cx, AbstractFramePtr frame) { CallObject& callObj = frame.callObj(); // Get the generator object stored on the scope chain and close it. Shape* shape = callObj.lookup(cx, cx->names().dotGenerator); GeneratorObject& genObj = callObj.getSlot(shape->slot()).toObject().as<GeneratorObject>(); genObj.setClosed(); // Return value is already set in GeneratorThrowOrClose. if (genObj.is<StarGeneratorObject>()) return; // Legacy generator .close() always returns |undefined|. MOZ_ASSERT(genObj.is<LegacyGeneratorObject>()); frame.setReturnValue(UndefinedValue()); }
void js::SetReturnValueForClosingGenerator(JSContext *cx, AbstractFramePtr frame) { CallObject &callObj = frame.callObj(); // Get the generator object stored on the scope chain and close it. Shape *shape = callObj.lookup(cx, cx->names().dotGenerator); GeneratorObject &genObj = callObj.getSlot(shape->slot()).toObject().as<GeneratorObject>(); genObj.setClosed(); Value v; if (genObj.is<StarGeneratorObject>()) { // The return value is stored in the .genrval slot. shape = callObj.lookup(cx, cx->names().dotGenRVal); v = callObj.getSlot(shape->slot()); } else { // Legacy generator .close() always returns |undefined|. MOZ_ASSERT(genObj.is<LegacyGeneratorObject>()); v = UndefinedValue(); } frame.setReturnValue(v); }