Skip to content

Commit

Permalink
Add autotest for qml/v8 optimization bug
Browse files Browse the repository at this point in the history
After a function that accesses a qml context property was
inlined, calls to global functions would fail with
"TypeError: Illegal invocation".
Fixed in qtbase's v8.

Task-number: QTBUG-22679
Change-Id: Id6e2604e5151585febfe1b667869dc3b1fad6e5e
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
  • Loading branch information
Kent Hansen authored and Qt by Nokia committed Nov 16, 2011
1 parent ddf9883 commit 92660b1
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
14 changes: 14 additions & 0 deletions tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22679.qml
@@ -0,0 +1,14 @@
import QtQuick 2.0

QtObject {
function accessContextProperty() {
for (var i = 0; i < contextProp.stringProperty.length; ++i) ;
}

Component.onCompleted: {
for (var i = 0; i < 1000; ++i)
accessContextProperty();
// Shouldn't cause "Illegal invocation" error.
gc();
}
}
Expand Up @@ -223,6 +223,7 @@ private slots:
void invokableObjectArg();
void invokableObjectRet();
void qtbug_20344();
void qtbug_22679();
void revisionErrors();
void revision();

Expand Down Expand Up @@ -5148,6 +5149,22 @@ void tst_qdeclarativeecmascript::deleteWhileBindingRunning()
delete object;
}

void tst_qdeclarativeecmascript::qtbug_22679()
{
MyQmlObject object;
object.setStringProperty(QLatin1String("Please work correctly"));
engine.rootContext()->setContextProperty("contextProp", &object);

QDeclarativeComponent component(&engine, TEST_FILE("qtbug_22679.qml"));
qRegisterMetaType<QList<QDeclarativeError> >("QList<QDeclarativeError>");
QSignalSpy warningsSpy(&engine, SIGNAL(warnings(QList<QDeclarativeError>)));

QObject *o = component.create();
QVERIFY(o != 0);
QCOMPARE(warningsSpy.count(), 0);
delete o;
}

QTEST_MAIN(tst_qdeclarativeecmascript)

#include "tst_qdeclarativeecmascript.moc"

0 comments on commit 92660b1

Please sign in to comment.