2008-09-23 Tor Arne Vestbø <tavestbo@trolltech.com>
authorvestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Sep 2008 13:47:06 +0000 (13:47 +0000)
committervestbo@webkit.org <vestbo@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 24 Sep 2008 13:47:06 +0000 (13:47 +0000)
        Reviewed by Simon.

        Remove deprecated JS Qt bindings object call/construct code and fix autotests

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@36848 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/bridge/qt/qt_instance.cpp
WebCore/bridge/qt/qt_instance.h
WebKit/qt/ChangeLog
WebKit/qt/tests/qwebframe/tst_qwebframe.cpp

index 928419edefabe2b42e0fab9aef4c224c72d27898..a05cbc88945ae4632d505aa1d4f80c74a62eb508 100644 (file)
@@ -1,3 +1,13 @@
+2008-09-23  Tor Arne Vestbø  <tavestbo@trolltech.com>
+
+        Reviewed by Simon.
+
+        Remove deprecated JS Qt bindings object call/construct code and fix autotests
+
+        * bridge/qt/qt_instance.cpp:
+        (JSC::Bindings::QtInstance::QtInstance):
+        * bridge/qt/qt_instance.h:
+
 2008-09-23  Julien Chaffraix  <jchaffraix@pleyo.com>
 
         Reviewed by Alp Toker. Landed by Jan Alonzo.
index 07fdf9094515772689b01f901570637f4481ad8c..3d8af4251e0b0fcc9509cddb795496f7d17fa9eb 100644 (file)
@@ -61,9 +61,6 @@ class QtRuntimeObjectImp : public RuntimeObjectImp {
             RuntimeObjectImp::mark();
         }
 
-        // Additions
-        virtual ConstructType getConstructData(ConstructData&);
-        virtual JSObject* construct(ExecState* exec, const ArgList& args);
     protected:
         void removeFromCache();
 };
@@ -92,38 +89,6 @@ void QtRuntimeObjectImp::removeFromCache()
         cachedObjects.remove(key);
 }
 
-ConstructType QtRuntimeObjectImp::getConstructData(ConstructData& constructData)
-{
-    CallData callData;
-    ConstructType type = ConstructTypeNone;
-    switch (getCallData(callData)) {
-    case CallTypeNone:
-        break;
-    case CallTypeHost:
-        type = ConstructTypeHost;
-        break;
-    case CallTypeJS:
-        type = ConstructTypeJS;
-        constructData.js.functionBody = callData.js.functionBody;
-        constructData.js.scopeChain = callData.js.scopeChain;
-        break;
-    }
-    return type;
-}
-
-JSObject* QtRuntimeObjectImp::construct(ExecState* exec, const ArgList& args)
-{
-    // ECMA 15.2.2.1 (?)
-    CallData callData;
-    CallType callType = getCallData(callData);
-    JSValue* val = call(exec, this, callType, callData, this, args);
-
-    if (!val || val->isUndefinedOrNull())
-        return new (exec) JSObject(exec->lexicalGlobalObject()->emptyObjectStructure());
-    else
-        return val->toObject(exec);
-}
-
 // QtInstance
 QtInstance::QtInstance(QObject* o, PassRefPtr<RootObject> rootObject)
     : Instance(rootObject)
@@ -131,7 +96,6 @@ QtInstance::QtInstance(QObject* o, PassRefPtr<RootObject> rootObject)
     , m_object(o)
     , m_hashkey(o)
     , m_defaultMethod(0)
-    , m_defaultMethodIndex(-2)
 {
 }
 
@@ -248,52 +212,6 @@ JSValue* QtInstance::invokeMethod(ExecState*, const MethodList&, const ArgList&)
     return jsUndefined();
 }
 
-CallType QtInstance::getCallData(CallData&)
-{
-    // See if we have qscript_call
-    if (m_defaultMethodIndex == -2) {
-        if (m_object) {
-            const QMetaObject* meta = m_object->metaObject();
-            int count = meta->methodCount();
-            const QByteArray defsig("qscript_call");
-            for (int index = count - 1; index >= 0; --index) {
-                const QMetaMethod m = meta->method(index);
-
-                QByteArray signature = m.signature();
-                signature.truncate(signature.indexOf('('));
-
-                if (defsig == signature) {
-                    m_defaultMethodIndex = index;
-                    break;
-                }
-            }
-        }
-
-        if (m_defaultMethodIndex == -2) // Not checked
-            m_defaultMethodIndex = -1; // No qscript_call
-    }
-
-    // typeof object that implements call == function
-    return (m_defaultMethodIndex >= 0 ? CallTypeHost : CallTypeNone);
-}
-
-JSValue* QtInstance::invokeDefaultMethod(ExecState* exec, const ArgList& args)
-{
-    // QtScript tries to invoke a meta method qscript_call
-    if (!getObject())
-        return throwError(exec, GeneralError, "cannot call function of deleted QObject");
-
-    // implementsCall will update our default method cache, if possible
-    CallData callData;
-    CallType callType = getCallData(callData);
-    if (callType != CallTypeNone) {
-        if (!m_defaultMethod)
-            m_defaultMethod = new (exec) QtRuntimeMetaMethod(exec, Identifier(exec, "[[Call]]"),this, m_defaultMethodIndex, QByteArray("qscript_call"), true);
-
-        return call(exec, m_defaultMethod, callType, callData, 0, args); // Luckily QtRuntimeMetaMethod ignores the obj parameter
-    } else
-        return throwError(exec, TypeError, "not a function");
-}
 
 JSValue* QtInstance::defaultValue(ExecState* exec, PreferredPrimitiveType hint) const
 {
index e157c52a7648c181b9afd79c36aca504bcd5d69c..af6abda00ee290c80d8d71919afaea3f96a759ec 100644 (file)
@@ -47,12 +47,9 @@ public:
     virtual JSValue* valueOf(ExecState* exec) const;
     virtual JSValue* defaultValue(ExecState*, PreferredPrimitiveType) const;
 
-    virtual CallType getCallData(CallData&);
-
     virtual void mark(); // This isn't inherited
 
     virtual JSValue* invokeMethod (ExecState *exec, const MethodList &method, const ArgList &args);
-    virtual JSValue* invokeDefaultMethod (ExecState *exec, const ArgList &args);
 
     virtual void getPropertyNames(ExecState*, PropertyNameArray&);
 
@@ -83,7 +80,6 @@ private:
     mutable QHash<QString,QtField*> m_fields;
     mutable QSet<JSValue*> m_children;
     mutable QtRuntimeMetaMethod* m_defaultMethod;
-    mutable int m_defaultMethodIndex;
 };
 
 } // namespace Bindings
index 79fe1116231e66f7a8a11d917fb76a902c69b6b8..3a227078b8295c3a31887e727028e1b063025c19 100644 (file)
@@ -1,3 +1,11 @@
+2008-09-23  Tor Arne Vestbø  <tavestbo@trolltech.com>
+
+        Reviewed by Simon.
+
+        Remove deprecated JS Qt bindings object call/construct code and fix autotests
+
+        * tests/qwebframe/tst_qwebframe.cpp:
+
 2008-09-16  Alp Toker  <alp@nuanti.com>
 
         Prospective Qt build fix. ScrollBar.h -> Scrollbar.h
index 8b549e480b849d50d4147cb9221744ba23513112..3cb27760ca16ad0240c59cb32cafe738937dc3fa 100644 (file)
@@ -1021,7 +1021,7 @@ void tst_QWebFrame::callQtInvokable()
         QVariant ret = evalJSV("myObject.myInvokableReturningQObjectStar()", type);
         QCOMPARE(m_myObject->qtFunctionInvoked(), 13);
         QCOMPARE(m_myObject->qtFunctionActuals().size(), 0);
-        QCOMPARE(type, sFunction);
+        QCOMPARE(type, sObject);
         QCOMPARE(ret.userType(), int(QMetaType::QObjectStar));
     }
 
@@ -1137,7 +1137,7 @@ void tst_QWebFrame::callQtInvokable()
         QCOMPARE(ret.userType(), int(QMetaType::QObjectStar));
         QCOMPARE(qvariant_cast<QObject*>(ret), (QObject*)m_myObject);
 
-        QCOMPARE(type, sFunction); // implements call, so Function, not object
+        QCOMPARE(type, sObject);
     }
 
     m_myObject->resetQtFunctionInvoked();
@@ -1202,26 +1202,6 @@ void tst_QWebFrame::callQtInvokable()
         QCOMPARE(ret, QLatin1String("TypeError: incompatible type of argument(s) in call to myInvokableWithQBrushArg(); candidates were\n    myInvokableWithQBrushArg(QBrush)"));
         QCOMPARE(m_myObject->qtFunctionInvoked(), -1);
     }
-
-    // qscript_call()
-    {
-        m_myObject->resetQtFunctionInvoked();
-        QString type;
-        evalJS("new myObject(123)", type);
-        QCOMPARE(type, sObject);
-        QCOMPARE(m_myObject->qtFunctionInvoked(), 40);
-        QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
-        QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), 123);
-    }
-    {
-        m_myObject->resetQtFunctionInvoked();
-        QString type;
-        evalJS("myObject(123)", type);
-        QCOMPARE(type, sUndefined);
-        QCOMPARE(m_myObject->qtFunctionInvoked(), 40);
-        QCOMPARE(m_myObject->qtFunctionActuals().size(), 1);
-        QCOMPARE(m_myObject->qtFunctionActuals().at(0).toInt(), 123);
-    }
 }
 
 void tst_QWebFrame::connectAndDisconnect()
@@ -1396,26 +1376,26 @@ void tst_QWebFrame::connectAndDisconnect()
         QString type;
         QString ret = evalJS("(function() { }).connect()", type);
         QCOMPARE(type, sError);
-        QCOMPARE(ret, QLatin1String("TypeError: Value undefined (result of expression (function ()\n{\n}).connect) is not object."));
+        QCOMPARE(ret, QLatin1String("TypeError: Result of expression '(function() { }).connect' [undefined] is not a function."));
     }
     {
         QString type;
         QString ret = evalJS("var o = { }; o.connect = Function.prototype.connect;  o.connect()", type);
         QCOMPARE(type, sError);
-        QCOMPARE(ret, QLatin1String("TypeError: Value undefined (result of expression o.connect) is not object."));
+        QCOMPARE(ret, QLatin1String("TypeError: Result of expression 'o.connect' [undefined] is not a function."));
     }
 
     {
         QString type;
         QString ret = evalJS("(function() { }).connect(123)", type);
         QCOMPARE(type, sError);
-        QCOMPARE(ret, QLatin1String("TypeError: Value undefined (result of expression (function ()\n{\n}).connect) is not object."));
+        QCOMPARE(ret, QLatin1String("TypeError: Result of expression '(function() { }).connect' [undefined] is not a function."));
     }
     {
         QString type;
         QString ret = evalJS("var o = { }; o.connect = Function.prototype.connect;  o.connect(123)", type);
         QCOMPARE(type, sError);
-        QCOMPARE(ret, QLatin1String("TypeError: Value undefined (result of expression o.connect) is not object."));
+        QCOMPARE(ret, QLatin1String("TypeError: Result of expression 'o.connect' [undefined] is not a function."));
     }
 
     {
@@ -1879,7 +1859,7 @@ void tst_QWebFrame::objectDeleted()
     // now delete the object
     delete qobj;
 
-    QCOMPARE(evalJS("typeof bar"), sFunction);
+    QCOMPARE(evalJS("typeof bar"), sObject);
 
     // any attempt to access properties of the object should result in an exception
     {
@@ -1895,13 +1875,6 @@ void tst_QWebFrame::objectDeleted()
         QCOMPARE(ret, QLatin1String("Error: cannot access member `objectName' of deleted QObject"));
     }
 
-    {
-        QString type;
-        QString ret = evalJS("bar()", type);
-        QCOMPARE(type, sError);
-        QCOMPARE(ret, QLatin1String("Error: cannot call function of deleted QObject"));
-    }
-
     // myInvokable is stored in member table (since we've accessed it before deletion)
     {
         QString type;
@@ -1926,12 +1899,6 @@ void tst_QWebFrame::objectDeleted()
 
     // access from script
     evalJS("window.o = bar;");
-    {
-        QString type;
-        QString ret = evalJS("o()", type);
-        QCOMPARE(type, sError);
-        QCOMPARE(ret, QLatin1String("Error: cannot call function of deleted QObject"));
-    }
     {
         QString type;
         QString ret = evalJS("o.objectName", type);