From 2e8dfb5d5cd02cf2ca281f19bfb9966c97f35db7 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Mon, 11 Nov 2013 16:13:00 +0100 Subject: V4 IR: scan arguments when entering function scope in QML. When doing IR generation for a function declaration in a QML object, call through the helper methods to check for forbidden names, and most importantly, also checks if the function has parameters. If the latter is the case, they need to be added as a member for the current scope in order to get IR generation correct. Task-number: QTBUG-34493 Change-Id: I0ade15ee19e1b1ac8ee2f2d3fa186d1551800199 Reviewed-by: Lars Knoll --- tests/auto/qml/qqmlecmascript/data/qtbug_34493.qml | 19 +++++++++++++++++++ tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 14 ++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 tests/auto/qml/qqmlecmascript/data/qtbug_34493.qml (limited to 'tests/auto') diff --git a/tests/auto/qml/qqmlecmascript/data/qtbug_34493.qml b/tests/auto/qml/qqmlecmascript/data/qtbug_34493.qml new file mode 100644 index 0000000000..7e7d350aae --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/qtbug_34493.qml @@ -0,0 +1,19 @@ +import Qt.test 1.0 +import QtQuick 2.0 + +MyQmlObject { + function doIt() { + d.hello("World") + } + + property QtObject subobject: QtObject { + id: d + function hello(input) { + var temp = "Hello " + input; + var input = temp + "!"; + prop = input + } + } + + property string prop +} diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 478611546e..defa708de5 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -309,6 +309,7 @@ private slots: void qtbug_32801(); void thisObject(); void qtbug_33754(); + void qtbug_34493(); private: // static void propertyVarWeakRefCallback(v8::Persistent object, void* parameter); @@ -7330,6 +7331,19 @@ void tst_qqmlecmascript::qtbug_33754() QVERIFY(obj != 0); } +void tst_qqmlecmascript::qtbug_34493() +{ + QQmlComponent component(&engine, testFileUrl("qtbug_34493.qml")); + + QScopedPointer obj(component.create()); + if (component.errors().size()) + qDebug() << component.errors(); + QVERIFY(component.errors().isEmpty()); + QVERIFY(obj != 0); + QVERIFY(QMetaObject::invokeMethod(obj.data(), "doIt")); + QTRY_VERIFY(obj->property("prop").toString() == QLatin1String("Hello World!")); +} + QTEST_MAIN(tst_qqmlecmascript) #include "tst_qqmlecmascript.moc" -- cgit v1.2.3