Пример #1
0
/* 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());
    }
}
Пример #2
0
/* 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());
        }
    }
}
Пример #3
0
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());
}
Пример #4
0
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);
}