bool GlobalObject::getOwnPropertySlot(JSC::ExecState* exec, const JSC::Identifier& propertyName, JSC::PropertySlot& slot) { QScriptEnginePrivate *engine = scriptEngineFromExec(exec); if (propertyName == exec->propertyNames().arguments && engine->currentFrame->argumentCount() > 0) { JSC::JSValue args = engine->scriptValueToJSCValue(engine->contextForFrame(engine->currentFrame)->argumentsObject()); slot.setValue(args); return true; } if (customGlobalObject) return customGlobalObject->getOwnPropertySlot(exec, propertyName, slot); return JSC::JSGlobalObject::getOwnPropertySlot(exec, propertyName, slot); }
/*! Enters a new execution context and returns the associated QScriptContext object. Once you are done with the context, you should call popContext() to restore the old context. By default, the `this' object of the new context is the Global Object. The context's \l{QScriptContext::callee()}{callee}() will be invalid. Unlike pushContext(), the default scope chain is reset to include only the global object and the QScriptContext's activation object. \sa QScriptEngine::popContext() */ QScriptContext * QScriptDeclarativeClass::pushCleanContext(QScriptEngine *engine) { if (!engine) return 0; QScriptEnginePrivate *d = QScriptEnginePrivate::get(engine); JSC::CallFrame* newFrame = d->pushContext(d->currentFrame, d->currentFrame->globalData().dynamicGlobalObject, JSC::ArgList(), /*callee = */0, false, true); if (engine->agent()) engine->agent()->contextPush(); return d->contextForFrame(newFrame); }
bool GlobalObject::getOwnPropertyDescriptor(JSC::ExecState* exec, const JSC::Identifier& propertyName, JSC::PropertyDescriptor& descriptor) { // Must match the logic of getOwnPropertySlot(). QScriptEnginePrivate *engine = scriptEngineFromExec(exec); if (propertyName == exec->propertyNames().arguments && engine->currentFrame->argumentCount() > 0) { // ### Can we get rid of this special handling of the arguments property? JSC::JSValue args = engine->scriptValueToJSCValue(engine->contextForFrame(engine->currentFrame)->argumentsObject()); descriptor.setValue(args); return true; } if (customGlobalObject) return customGlobalObject->getOwnPropertyDescriptor(exec, propertyName, descriptor); return JSC::JSGlobalObject::getOwnPropertyDescriptor(exec, propertyName, descriptor); }