summaryrefslogtreecommitdiffstats
path: root/src/script/api/qscriptengine.cpp
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@trolltech.com>2009-07-30 19:50:17 (GMT)
committerOlivier Goffart <ogoffart@trolltech.com>2009-07-31 14:11:29 (GMT)
commitbb1e71ac344b184d2ab13cd0ed7188eebb34aaf1 (patch)
treee2481d6ab859207c3cef2dd2822f9e0cb65da5cd /src/script/api/qscriptengine.cpp
parentf6713c0e69d2b2b20da00e9a9a4e23a8f4f85c3d (diff)
downloadQt-bb1e71ac344b184d2ab13cd0ed7188eebb34aaf1.zip
Qt-bb1e71ac344b184d2ab13cd0ed7188eebb34aaf1.tar.gz
Qt-bb1e71ac344b184d2ab13cd0ed7188eebb34aaf1.tar.bz2
Small Refactoring of QScript
- Create a scope (activation object) for the native constructor in QScriptClass - put the isCalledasConstructor in the activation object (so i can clean up the QScriptContext - Remove the code duplication in all native functions. Aknoweldged-by: Kent
Diffstat (limited to 'src/script/api/qscriptengine.cpp')
-rw-r--r--src/script/api/qscriptengine.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 6bf7354..4fe8f76 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -871,6 +871,26 @@ JSC::JSValue stringProtoFuncArg(JSC::ExecState *exec, JSC::JSObject*, JSC::JSVal
return JSC::jsString(exec, qtStringToJSCUString(result));
}
+
+QScriptPushScopeHelper::QScriptPushScopeHelper(JSC::CallFrame *exec, bool calledAsConstructor)
+{
+ engine = scriptEngineFromExec(exec);
+ previousFrame = engine->currentFrame;
+ engine->currentFrame = exec;
+ QScriptActivationObject *scope = new (exec) QScriptActivationObject(exec);
+ scope->d_ptr()->calledAsConstructor = calledAsConstructor;
+ exec->setScopeChain(exec->scopeChain()->copy()->push(scope));
+}
+
+QScriptPushScopeHelper::~QScriptPushScopeHelper()
+{
+ JSC::CallFrame *exec = engine->currentFrame;
+ exec->setScopeChain(exec->scopeChain()->pop());
+ exec->scopeChain()->deref();
+ engine->currentFrame = previousFrame;
+ engine->releaseContextForFrame(exec);
+}
+
} // namespace QScript
namespace JSC {