From 2d1020683ad9aa81ee78e1a5419a3b51d8b36270 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 29 Jul 2009 11:56:13 +0200 Subject: Move QScriptActivationObject to his own file --- src/script/bridge/bridge.pri | 6 +- src/script/bridge/qscriptactivationobject_p.h | 91 +++++++++++++++++++++++++++ src/script/bridge/qscriptfunction.cpp | 40 ++---------- 3 files changed, 100 insertions(+), 37 deletions(-) create mode 100644 src/script/bridge/qscriptactivationobject_p.h diff --git a/src/script/bridge/bridge.pri b/src/script/bridge/bridge.pri index cf8395a..f2883e7 100644 --- a/src/script/bridge/bridge.pri +++ b/src/script/bridge/bridge.pri @@ -3,11 +3,13 @@ SOURCES += \ $$PWD/qscriptobject.cpp \ $$PWD/qscriptclassobject.cpp \ $$PWD/qscriptvariant.cpp \ - $$PWD/qscriptqobject.cpp + $$PWD/qscriptqobject.cpp \ + $$PWD/qscriptactivationobject.cpp HEADERS += \ $$PWD/qscriptfunction_p.h \ $$PWD/qscriptobject_p.h \ $$PWD/qscriptclassobject_p.h \ $$PWD/qscriptvariant_p.h \ - $$PWD/qscriptqobject_p.h + $$PWD/qscriptqobject_p.h \ + $$PWD/qscriptactivationobject_p.h diff --git a/src/script/bridge/qscriptactivationobject_p.h b/src/script/bridge/qscriptactivationobject_p.h new file mode 100644 index 0000000..633cbf6 --- /dev/null +++ b/src/script/bridge/qscriptactivationobject_p.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtScript module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSCRIPTACTIVATIONOBJECT_P_H +#define QSCRIPTACTIVATIONOBJECT_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +#ifndef QT_NO_SCRIPT + +#include "JSVariableObject.h" + +QT_BEGIN_NAMESPACE + +class QScriptClass; + +namespace QScript +{ + +class QScriptActivationObject : public JSC::JSVariableObject { +public: + QScriptActivationObject(JSC::ExecState *callFrame); + virtual ~QScriptActivationObject(); + virtual bool isDynamicScope() const { return true; } + virtual void putWithAttributes(JSC::ExecState *exec, const JSC::Identifier &propertyName, JSC::JSValue value, unsigned attributes); +private: + struct QScriptActivationObjectData : public JSVariableObjectData { + QScriptActivationObjectData(JSC::Register* registers) + : JSVariableObjectData(&symbolTable, registers) + { } + JSC::SymbolTable symbolTable; + }; +}; + + +} // namespace QScript + +QT_END_NAMESPACE + +#endif // QT_NO_SCRIPT + +#endif diff --git a/src/script/bridge/qscriptfunction.cpp b/src/script/bridge/qscriptfunction.cpp index 777bd3b..309315c 100644 --- a/src/script/bridge/qscriptfunction.cpp +++ b/src/script/bridge/qscriptfunction.cpp @@ -46,11 +46,11 @@ #include "private/qscriptengine_p.h" #include "qscriptcontext.h" #include "private/qscriptcontext_p.h" +#include "qscriptactivationobject_p.h" #include "JSGlobalObject.h" -QT_BEGIN_NAMESPACE namespace JSC { ASSERT_CLASS_FITS_IN_CELL(QScript::FunctionWrapper); @@ -61,36 +61,6 @@ namespace QScript { -class QScriptActivation : public JSC::JSVariableObject { -public: - QScriptActivation(JSC::ExecState *callFrame) - : JSC::JSVariableObject(callFrame->globalData().activationStructure, new QScriptActivationData(callFrame->registers())) - {} - virtual ~QScriptActivation() { delete d; } - virtual bool isDynamicScope() const {return true; } -// virtual bool isActivationObject() const { return true; } - - virtual void putWithAttributes(JSC::ExecState *exec, const JSC::Identifier &propertyName, JSC::JSValue value, unsigned attributes) - { - if (symbolTablePutWithAttributes(propertyName, value, attributes)) - return; - - JSC::PutPropertySlot slot; - JSObject::putWithAttributes(exec, propertyName, value, attributes, true, slot); - } - - -private: - struct QScriptActivationData : public JSVariableObjectData { - QScriptActivationData(JSC::Register* registers) - : JSVariableObjectData(&symbolTable, registers) - { } - JSC::SymbolTable symbolTable; - }; -}; - - - FunctionWrapper::FunctionWrapper(QScriptEngine *engine, int length, const JSC::Identifier &name, QScriptEngine::FunctionSignature function) : JSC::PrototypeFunction(QScriptEnginePrivate::get(engine)->globalExec(), @@ -121,7 +91,7 @@ JSC::JSValue FunctionWrapper::proxyCall(JSC::ExecState *exec, JSC::JSObject *cal QScriptContext *ctx = eng_p->contextForFrame(exec); //We might have nested eval inside our function so we should create another scope - JSC::JSObject* scope = new (exec) QScriptActivation(exec); + JSC::JSObject* scope = new (exec) QScriptActivationObject(exec); exec->setScopeChain(exec->scopeChain()->copy()->push(scope)); QScriptValue result = self->data->function(ctx, self->data->engine); @@ -147,7 +117,7 @@ JSC::JSObject* FunctionWrapper::proxyConstruct(JSC::ExecState *exec, JSC::JSObje eng_p->currentFrame = exec; //We might have nested eval inside our function so we should create another scope - JSC::JSObject* scope = new (exec) QScriptActivation(exec); + JSC::JSObject* scope = new (exec) QScriptActivationObject(exec); exec->setScopeChain(exec->scopeChain()->copy()->push(scope)); QScriptValue defaultObject = ctx->thisObject(); @@ -194,7 +164,7 @@ JSC::JSValue FunctionWithArgWrapper::proxyCall(JSC::ExecState *exec, JSC::JSObje eng_p->currentFrame = exec; //We might have nested eval inside our function so we should create another scope - JSC::JSObject* scope = new (exec) QScriptActivation(exec); + JSC::JSObject* scope = new (exec) QScriptActivationObject(exec); exec->setScopeChain(exec->scopeChain()->copy()->push(scope)); QScriptValue result = self->data->function(ctx, self->data->engine, self->data->arg); @@ -218,7 +188,7 @@ JSC::JSObject* FunctionWithArgWrapper::proxyConstruct(JSC::ExecState *exec, JSC: eng_p->currentFrame = exec; //We might have nested eval inside our function so we should create another scope - JSC::JSObject* scope = new (exec) QScriptActivation(exec); + JSC::JSObject* scope = new (exec) QScriptActivationObject(exec); exec->setScopeChain(exec->scopeChain()->copy()->push(scope)); QScriptValue defaultObject = ctx->thisObject(); -- cgit v0.12