return d->toVariant();
}
+/*!
+ Calls this QJSValue as a function, passing \a args as arguments
+ to the function, and using the globalObject() as the "this"-object.
+ Returns the value returned from the function.
+
+ If this QJSValue is not callable, call() does nothing and
+ returns an undefined QJSValue.
+
+ Calling call() can cause an exception to occur in the script engine;
+ in that case, call() returns the value that was thrown (typically an
+ \c{Error} object). You can call
+ QJSEngine::hasUncaughtException() to determine if an exception
+ occurred.
+
+ \sa isCallable()
+*/
+QJSValue QJSValue::call(const QJSValueList &args)
+{
+ Q_D(QJSValue);
+ QScriptIsolate api(d->engine());
+ return d->call(/*thisObject=*/0, args);
+}
/*!
Calls this QJSValue as a function, using \a thisObject as
QCOMPARE(r.toString(), QString::fromLatin1("/foo/gim"));
QJSValue rxCtor = eng.globalObject().property("RegExp");
- QJSValue r2 = rxCtor.call(QJSValue(), QJSValueList() << r);
+ QJSValue r2 = rxCtor.call(QJSValueList() << r);
QVERIFY(r2.isRegExp());
QVERIFY(r2.strictlyEquals(r));
- QJSValue r3 = rxCtor.call(QJSValue(), QJSValueList() << r << "gim");
+ QJSValue r3 = rxCtor.call(QJSValueList() << r << "gim");
QVERIFY(r3.isError());
QVERIFY(r3.toString().contains(QString::fromLatin1("TypeError"))); // Cannot supply flags when constructing one RegExp from another
- QJSValue r4 = rxCtor.call(QJSValue(), QJSValueList() << "foo" << "gim");
+ QJSValue r4 = rxCtor.call(QJSValueList() << "foo" << "gim");
QVERIFY(r4.isRegExp());
QJSValue r5 = rxCtor.construct(QJSValueList() << r);
static QScriptValue instanceofJS(const QScriptValue &inst, const QScriptValue &ctor)
{
return inst.engine()->evaluate("(function(inst, ctor) { return inst instanceof ctor; })")
- .call(QScriptValue(), QScriptValueList() << inst << ctor);
+ .call(QScriptValueList() << inst << ctor);
}
void tst_QJSEngine::newQMetaObject()
{
QJSValue ret = eng.evaluate("foo('bar')");
QVERIFY(ret.isCallable());
- QJSValue ret2 = ret.call(QJSValue());
+ QJSValue ret2 = ret.call();
QCOMPARE(ret2.toString(), QString::fromLatin1("bar"));
QVERIFY(!eng.globalObject().property("bar").isValid());
QVERIFY(!eng.globalObject().property("baz").isValid());
{
QJSValue ret = eng.evaluate("foo('baz')");
QVERIFY(ret.isCallable());
- QJSValue ret2 = ret.call(QJSValue());
+ QJSValue ret2 = ret.call();
QCOMPARE(ret2.toString(), QString::fromLatin1("baz"));
QVERIFY(!eng.globalObject().property("bar").isValid());
QVERIFY(!eng.globalObject().property("baz").isValid());
// There is no context, but it shouldn't crash
QCOMPARE(engine.globalObject().property("qsTr").call(
- QScriptValue(), QScriptValueList() << "One").toString(), QString::fromLatin1("One"));
+ QScriptValueList() << "One").toString(), QString::fromLatin1("One"));
}
void tst_QJSEngine::translateWithInvalidArgs_data()
QScriptEngine eng;
{
QScriptValue fun = eng.newFunction(counter);
- QScriptValue cnt = fun.call(QScriptValue(), QScriptValueList() << 123);
+ QScriptValue cnt = fun.call(QScriptValueList() << 123);
QVERIFY(cnt.isCallable());
{
QScriptValue ret = cnt.call();
}
{
QScriptValue fun = eng.newFunction(counter_hybrid);
- QScriptValue cnt = fun.call(QScriptValue(), QScriptValueList() << 123);
+ QScriptValue cnt = fun.call(QScriptValueList() << 123);
QVERIFY(cnt.isCallable());
{
QScriptValue ret = cnt.call();
{
QScriptValue fun = eng.newFunction(createProgram);
QScriptProgram program = qscriptvalue_cast<QScriptProgram>(
- fun.call(QScriptValue(), QScriptValueList() << "a + 1"));
+ fun.call(QScriptValueList() << "a + 1"));
QVERIFY(!program.isNull());
eng.globalObject().setProperty("a", QScriptValue());
{
QVERIFY(rexp.isCallable());
QJSValue func = eng.evaluate("(function(string, regexp) { return string.match(regexp); })");
- QJSValue result = func.call(QJSValue(), QJSValueList() << string << rexp);
+ QJSValue result = func.call(QJSValueList() << string << rexp);
rx.indexIn(string);
for (int i = 0; i <= rx.captureCount(); i++) {
{
QJSValueList args;
args << QJSValue();
- QJSValue ret = fun.call(QJSValue(), args);
+ QJSValue ret = fun.call(args);
QVERIFY(!eng.hasUncaughtException());
QCOMPARE(ret.isValid(), true);
QCOMPARE(ret.isUndefined(), true);
{
QJSValueList args;
args << QJSValue();
- QJSValue ret = fun.call(QJSValue(), args);
+ QJSValue ret = fun.call(args);
QCOMPARE(ret.isValid(), true);
QCOMPARE(ret.isUndefined(), true);
}
{
QJSValueList args;
args << QJSValue() << QJSValue();
- QJSValue ret = fun.call(QJSValue(), args);
+ QJSValue ret = fun.call(args);
QCOMPARE(ret.isValid(), true);
QCOMPARE(ret.isNumber(), true);
QCOMPARE(qIsNaN(ret.toNumber()), true);
QTest::ignoreMessage(QtWarningMsg, "QJSValue::call() failed: "
"cannot call function with argument created in "
"a different engine");
- QCOMPARE(fun.call(QJSValue(), QJSValueList() << QJSValue(&eng, 123)).isValid(), false);
+ QCOMPARE(fun.call(QJSValueList() << QJSValue(&eng, 123)).isValid(), false);
{
QJSValue fun = eng.evaluate("Object");
QVERIFY(fun.isCallable());
QJSValueList args;
args << objectInDifferentEngine;
QTest::ignoreMessage(QtWarningMsg, "QJSValue::call() failed: cannot call function with argument created in a different engine");
- fun.call(QJSValue(), args);
+ fun.call(args);
}
}
QJSValue compareFun = eng.evaluate("(function(a, b) { return a == b; })");
QVERIFY(compareFun.isCallable());
{
- QJSValue ret = compareFun.call(QJSValue(), QJSValueList() << qobj1 << qobj2);
+ QJSValue ret = compareFun.call(QJSValueList() << qobj1 << qobj2);
QVERIFY(ret.isBool());
- ret = compareFun.call(QJSValue(), QJSValueList() << qobj1 << qobj3);
+ ret = compareFun.call(QJSValueList() << qobj1 << qobj3);
QVERIFY(ret.isBool());
QVERIFY(!ret.toBool());
- ret = compareFun.call(QJSValue(), QJSValueList() << qobj1 << qobj4);
+ ret = compareFun.call(QJSValueList() << qobj1 << qobj4);
QVERIFY(ret.isBool());
QVERIFY(!ret.toBool());
- ret = compareFun.call(QJSValue(), QJSValueList() << qobj1 << obj1);
+ ret = compareFun.call(QJSValueList() << qobj1 << obj1);
QVERIFY(ret.isBool());
QVERIFY(!ret.toBool());
}