summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@trolltech.com>2009-08-24 09:54:07 +0200
committerOlivier Goffart <ogoffart@trolltech.com>2009-08-24 09:57:20 +0200
commit351870317388ac7479b39015263f1db440cc6587 (patch)
tree002db88e8f3a1c52c4fa19431b2f8e13eae7c78d
parentf737db46ba81ce0b15cd7e7b2060863c9973b26c (diff)
QScriptValue: No need to create the activation object for call or construct
It is uneeded and add useless overhead
-rw-r--r--src/script/api/qscriptvalue.cpp4
-rw-r--r--tests/auto/qscriptengine/tst_qscriptengine.cpp32
2 files changed, 23 insertions, 13 deletions
diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp
index 73c8d1bba..93d6be8b4 100644
--- a/src/script/api/qscriptvalue.cpp
+++ b/src/script/api/qscriptvalue.cpp
@@ -1936,7 +1936,6 @@ QScriptValue QScriptValue::call(const QScriptValue &thisObject,
"a different engine");
return QScriptValue();
}
- engine()->currentContext()->activationObject(); //force the creation of a context for native function;
JSC::ExecState *exec = d->engine->currentFrame;
@@ -2011,7 +2010,6 @@ QScriptValue QScriptValue::call(const QScriptValue &thisObject,
"a different engine");
return QScriptValue();
}
- engine()->currentContext()->activationObject(); //force the creation of a context for native function;
JSC::ExecState *exec = d->engine->currentFrame;
@@ -2077,7 +2075,6 @@ QScriptValue QScriptValue::construct(const QScriptValueList &args)
Q_D(const QScriptValue);
if (!isFunction())
return QScriptValue();
- engine()->currentContext()->activationObject(); //force the creation of a context for native function;
JSC::ExecState *exec = d->engine->currentFrame;
QVector<JSC::JSValue> argsVector;
@@ -2125,7 +2122,6 @@ QScriptValue QScriptValue::construct(const QScriptValue &arguments)
Q_D(QScriptValue);
if (!isFunction())
return QScriptValue();
- engine()->currentContext()->activationObject(); //force the creation of a context for native function;
JSC::ExecState *exec = d->engine->currentFrame;
JSC::JSValue array = d->engine->scriptValueToJSCValue(arguments);
diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp
index 85cee280a..0c679875d 100644
--- a/tests/auto/qscriptengine/tst_qscriptengine.cpp
+++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp
@@ -1518,15 +1518,29 @@ static QScriptValue eval_nested(QScriptContext *ctx, QScriptEngine *eng)
void tst_QScriptEngine::nestedEvaluate()
{
QScriptEngine eng;
- eng.globalObject().setProperty("fun", eng.newFunction(eval_nested));
- QScriptValue result = eng.evaluate("o = { id:'foo'}; o.fun = fun; o.fun()");
- QCOMPARE(result.property("local_bar").toString(), QString("local"));
- QCOMPARE(result.property("thisObjectIdBefore").toString(), QString("foo"));
- QCOMPARE(result.property("thisObjectIdAfter").toString(), QString("foo"));
- QCOMPARE(result.property("evaluatedThisObjectId").toString(), QString("foo"));
- QScriptValue bar = eng.evaluate("bar");
- QVERIFY(bar.isError());
- QCOMPARE(bar.toString(), QString::fromLatin1("ReferenceError: Can't find variable: bar"));
+ QScriptValue fun = eng.newFunction(eval_nested);
+ eng.globalObject().setProperty("fun", fun);
+ {
+ QScriptValue result = eng.evaluate("o = { id:'foo'}; o.fun = fun; o.fun()");
+ QCOMPARE(result.property("local_bar").toString(), QString("local"));
+ QCOMPARE(result.property("thisObjectIdBefore").toString(), QString("foo"));
+ QCOMPARE(result.property("thisObjectIdAfter").toString(), QString("foo"));
+ QCOMPARE(result.property("evaluatedThisObjectId").toString(), QString("foo"));
+ QScriptValue bar = eng.evaluate("bar");
+ QVERIFY(bar.isError());
+ QCOMPARE(bar.toString(), QString::fromLatin1("ReferenceError: Can't find variable: bar"));
+ }
+
+ {
+ QScriptValue result = fun.call(eng.evaluate("p = { id:'foo' }") , QScriptValueList() );
+ QCOMPARE(result.property("local_bar").toString(), QString("local"));
+ QCOMPARE(result.property("thisObjectIdBefore").toString(), QString("foo"));
+ QCOMPARE(result.property("thisObjectIdAfter").toString(), QString("foo"));
+ QCOMPARE(result.property("evaluatedThisObjectId").toString(), QString("foo"));
+ QScriptValue bar = eng.evaluate("bar");
+ QVERIFY(bar.isError());
+ QCOMPARE(bar.toString(), QString::fromLatin1("ReferenceError: Can't find variable: bar"));
+ }
}
void tst_QScriptEngine::uncaughtException()