Revert "Allow function assignment to cause binding for non-var props"
authorChris Adams <christopher.adams@nokia.com>
Mon, 14 May 2012 03:29:47 +0000 (13:29 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 15 May 2012 07:16:41 +0000 (09:16 +0200)
This reverts commit 92b1f9981d225ecee28da1f0a88fb3046000cb5e.

Conflicts:

src/qml/qml/v8/qv8qobjectwrapper.cpp

Also remove XPASS tests from qjsonbinding

Change-Id: Ibc9da28d5f0bdffbf62e7e20f12bb55ff36ae271
Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
src/qml/qml/v8/qv8qobjectwrapper.cpp
tests/auto/qml/qjsonbinding/tst_qjsonbinding.cpp
tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp

index fde7f66..5c0b592 100644 (file)
@@ -589,31 +589,11 @@ static inline void StoreProperty(QV8Engine *engine, QObject *object, QQmlPropert
     if (value->IsFunction()) {
         if (value->ToObject()->GetHiddenValue(engine->bindingFlagKey()).IsEmpty()) {
             if (!property->isVMEProperty()) {
-                // XXX TODO: uncomment the following lines
                 // assigning a JS function to a non-var-property is not allowed.
-                //QString error = QLatin1String("Cannot assign JavaScript function to ") +
-                //                QLatin1String(QMetaType::typeName(property->propType));
-                //v8::ThrowException(v8::Exception::Error(engine->toString(error)));
-                //return;
-                // XXX TODO: remove the following transition behaviour
-                // Temporarily allow assignment of functions to non-var properties
-                // to mean binding assignment (as per old behaviour).
-                QQmlContextData *context = engine->callingContext();
-                v8::Handle<v8::Function> function = v8::Handle<v8::Function>::Cast(value);
-
-                v8::Local<v8::StackTrace> trace =
-                    v8::StackTrace::CurrentStackTrace(1, (v8::StackTrace::StackTraceOptions)(v8::StackTrace::kLineNumber |
-                                                                                             v8::StackTrace::kScriptName));
-                v8::Local<v8::StackFrame> frame = trace->GetFrame(0);
-                int lineNumber = frame->GetLineNumber();
-                int columnNumber = frame->GetColumn();
-                QString url = engine->toString(frame->GetScriptName());
-
-                newBinding = new QQmlBinding(&function, object, context, url, lineNumber, columnNumber);
-                newBinding->setTarget(object, *property, context);
-                newBinding->setEvaluateFlags(newBinding->evaluateFlags() |
-                                             QQmlBinding::RequiresThisObject);
-                qWarning("WARNING: function assignment is DEPRECATED and will be removed!  Wrap RHS in Qt.binding(): %s:%d", qPrintable(engine->toString(frame->GetScriptName())), frame->GetLineNumber());
+                QString error = QLatin1String("Cannot assign JavaScript function to ") +
+                                QLatin1String(QMetaType::typeName(property->propType));
+                v8::ThrowException(v8::Exception::Error(engine->toString(error)));
+                return;
             }
         } else {
             // binding assignment.
index 09b2562..2900b5c 100644 (file)
@@ -412,9 +412,6 @@ void tst_qjsonbinding::writeProperty_incompatibleType()
 
     QJSValue ret = eng.evaluate(QString::fromLatin1("obj.%0 = %1")
                                 .arg(property).arg(expression));
-    QEXPECT_FAIL("value=function", "See 'XXX TODO: uncomment the following lines' in qv8qobjectwrapper.cpp", Abort);
-    QEXPECT_FAIL("object=function", "See 'XXX TODO: uncomment the following lines' in qv8qobjectwrapper.cpp", Abort);
-    QEXPECT_FAIL("array=function", "See 'XXX TODO: uncomment the following lines' in qv8qobjectwrapper.cpp", Abort);
     QVERIFY(ret.isError());
     QVERIFY(ret.toString().contains("Cannot assign"));
 }
index 40bff34..b910ec7 100644 (file)
@@ -5568,15 +5568,13 @@ void tst_qqmlecmascript::functionAssignment_afterBinding()
     QQmlComponent component(&engine, testFileUrl("functionAssignment.3.qml"));
 
     QString url = component.url().toString();
-    //QString w1 = url + ":16: Error: Cannot assign JavaScript function to int"; // for now, function assignment = binding assignment
-    QString w1 = QLatin1String("WARNING: function assignment is DEPRECATED and will be removed!  Wrap RHS in Qt.binding(): ") + url + QLatin1String(":16");
+    QString w1 = url + ":16: Error: Cannot assign JavaScript function to int";
     QTest::ignoreMessage(QtWarningMsg, w1.toLatin1().constData());
 
     QObject *o = component.create();
     QVERIFY(o != 0);
     QCOMPARE(o->property("t1"), QVariant::fromValue<int>(4)); // should have bound
-    //QCOMPARE(o->property("t2"), QVariant::fromValue<int>(2)); // should not have changed
-    QCOMPARE(o->property("t2"), QVariant::fromValue<int>(4)); // for now, function assignment = binding assignment
+    QCOMPARE(o->property("t2"), QVariant::fromValue<int>(2)); // should not have changed
 
     delete o;
 }