Don't rewrite the body of function expressions
That is, don't look inside function expressions when rewriting bindings as closures. Task-number: QTBUG-25901 Change-Id: Ia4b99d3c58c4482e9505cf2461bd14942a9a00ca Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
This commit is contained in:
parent
70dee431e8
commit
d00fbd043e
|
@ -313,6 +313,16 @@ void RewriteBinding::endVisit(AST::LocalForEachStatement *)
|
||||||
--_inLoop;
|
--_inLoop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RewriteBinding::visit(AST::FunctionExpression *)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RewriteBinding::visit(AST::FunctionDeclaration *)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool RewriteBinding::visit(AST::CaseBlock *ast)
|
bool RewriteBinding::visit(AST::CaseBlock *ast)
|
||||||
{
|
{
|
||||||
// Process the initial sequence of the case clauses.
|
// Process the initial sequence of the case clauses.
|
||||||
|
|
|
@ -120,6 +120,9 @@ protected:
|
||||||
|
|
||||||
virtual bool visit(AST::CaseBlock *ast);
|
virtual bool visit(AST::CaseBlock *ast);
|
||||||
|
|
||||||
|
virtual bool visit(AST::FunctionExpression *ast);
|
||||||
|
virtual bool visit(AST::FunctionDeclaration *ast);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _inLoop;
|
int _inLoop;
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
import Qt.test 1.0
|
||||||
|
|
||||||
|
MyQmlObject {
|
||||||
|
property bool test: false
|
||||||
|
property string string1
|
||||||
|
|
||||||
|
qjsvalue: function () {
|
||||||
|
string1 = "Test case 1"
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
if (qjsvalue() != 100)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (string1 != "Test case 1")
|
||||||
|
return;
|
||||||
|
|
||||||
|
test = true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
property bool test: false
|
||||||
|
property string string1
|
||||||
|
property string string2
|
||||||
|
|
||||||
|
property var f1 : function () {
|
||||||
|
string1 = "Test case 1"
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
property var f2;
|
||||||
|
function testcase2() {
|
||||||
|
string2 = "Test case 2"
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
f2: testcase2
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
if (f1() != 100)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (f2() != 100)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (string1 != "Test case 1")
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (string2 != "Test case 2")
|
||||||
|
return;
|
||||||
|
|
||||||
|
test = true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4228,6 +4228,7 @@ void tst_qqmlecmascript::propertyVar_data()
|
||||||
QTest::newRow("declarative binding assignment") << testFileUrl("propertyVar.13.qml");
|
QTest::newRow("declarative binding assignment") << testFileUrl("propertyVar.13.qml");
|
||||||
QTest::newRow("imperative binding assignment") << testFileUrl("propertyVar.14.qml");
|
QTest::newRow("imperative binding assignment") << testFileUrl("propertyVar.14.qml");
|
||||||
QTest::newRow("stored binding assignment") << testFileUrl("propertyVar.15.qml");
|
QTest::newRow("stored binding assignment") << testFileUrl("propertyVar.15.qml");
|
||||||
|
QTest::newRow("function expression binding assignment") << testFileUrl("propertyVar.16.qml");
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_qqmlecmascript::propertyVar()
|
void tst_qqmlecmascript::propertyVar()
|
||||||
|
@ -4263,6 +4264,7 @@ void tst_qqmlecmascript::propertyQJSValue_data()
|
||||||
QTest::newRow("declarative binding assignment") << testFileUrl("propertyQJSValue.13.qml");
|
QTest::newRow("declarative binding assignment") << testFileUrl("propertyQJSValue.13.qml");
|
||||||
QTest::newRow("imperative binding assignment") << testFileUrl("propertyQJSValue.14.qml");
|
QTest::newRow("imperative binding assignment") << testFileUrl("propertyQJSValue.14.qml");
|
||||||
QTest::newRow("stored binding assignment") << testFileUrl("propertyQJSValue.15.qml");
|
QTest::newRow("stored binding assignment") << testFileUrl("propertyQJSValue.15.qml");
|
||||||
|
QTest::newRow("javascript function binding") << testFileUrl("propertyQJSValue.16.qml");
|
||||||
|
|
||||||
QTest::newRow("reset property") << testFileUrl("propertyQJSValue.reset.qml");
|
QTest::newRow("reset property") << testFileUrl("propertyQJSValue.reset.qml");
|
||||||
QTest::newRow("reset property in binding") << testFileUrl("propertyQJSValue.bindingreset.qml");
|
QTest::newRow("reset property in binding") << testFileUrl("propertyQJSValue.bindingreset.qml");
|
||||||
|
|
Loading…
Reference in New Issue