18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Lesser General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Lesser General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Lesser General Public
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License along with this library; if not, write to the Free Software
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BINDINGS_QT_RUNTIME_H_
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define BINDINGS_QT_RUNTIME_H_
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2353733164eb6cabab5a1eddcabb42e4ce27eb0e44Ben Murdoch#include "BridgeJSC.h"
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Completion.h"
252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "Strong.h"
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "runtime_method.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qbytearray.h>
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qmetaobject.h>
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qpointer.h>
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qvariant.h>
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC {
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace Bindings {
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtInstance;
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtField : public Field {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    typedef enum {
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        MetaProperty,
43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef QT_NO_PROPERTIES
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        DynamicProperty,
45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ChildObject
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } QtFieldType;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtField(const QMetaProperty &p)
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        : m_type(MetaProperty), m_property(p)
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {}
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef QT_NO_PROPERTIES
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtField(const QByteArray &b)
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        : m_type(DynamicProperty), m_dynamicProperty(b)
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {}
57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtField(QObject *child)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        : m_type(ChildObject), m_childObject(child)
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {}
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual JSValue valueFromInstance(ExecState*, const Instance*) const;
645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const;
656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    QByteArray name() const;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtFieldType fieldType() const {return m_type;}
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtFieldType m_type;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QByteArray m_dynamicProperty;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QMetaProperty m_property;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QPointer<QObject> m_childObject;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtMethod : public Method
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtMethod(const QMetaObject *mo, int i, const QByteArray &ident, int numParameters)
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        : m_metaObject(mo),
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project          m_index(i),
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project          m_identifier(ident),
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project          m_nParams(numParameters)
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        { }
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual const char* name() const { return m_identifier.constData(); }
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int numParameters() const { return m_nParams; }
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    friend class QtInstance;
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const QMetaObject *m_metaObject;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int m_index;
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QByteArray m_identifier;
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int m_nParams;
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttemplate <typename T> class QtArray : public Array
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtArray(QList<T> list, QMetaType::Type type, PassRefPtr<RootObject>);
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ~QtArray();
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RootObject* rootObject() const;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual void setValueAt(ExecState*, unsigned index, JSValue) const;
1065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual JSValue valueAt(ExecState*, unsigned index) const;
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual unsigned int getLength() const {return m_length;}
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    mutable QList<T> m_list; // setValueAt is const!
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    unsigned int m_length;
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QMetaType::Type m_type;
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Based on RuntimeMethod
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Extra data classes (to avoid the CELL_SIZE limit on JS objects)
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeMethodData {
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual ~QtRuntimeMethodData();
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RefPtr<QtInstance> m_instance;
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeConnectionMethod;
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeMetaMethodData : public QtRuntimeMethodData {
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ~QtRuntimeMetaMethodData();
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QByteArray m_signature;
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_allowPrivate;
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_index;
1322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        WriteBarrier<QtRuntimeConnectionMethod> m_connect;
1332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        WriteBarrier<QtRuntimeConnectionMethod> m_disconnect;
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeConnectionMethodData : public QtRuntimeMethodData {
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ~QtRuntimeConnectionMethodData();
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        QByteArray m_signature;
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_index;
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_isConnect;
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Common base class (doesn't really do anything interesting)
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeMethod : public InternalFunction {
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ~QtRuntimeMethod();
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static const ClassInfo s_info;
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    static FunctionPrototype* createPrototype(ExecState*, JSGlobalObject* globalObject)
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        return globalObject->functionPrototype();
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    static Structure* createStructure(JSGlobalData& globalData, JSValue prototype)
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1582bde8e466a4451c7319e3a072d118917957d6554Steve Block        return Structure::create(globalData, prototype, TypeInfo(ObjectType,  StructureFlags), AnonymousSlotCount, &s_info);
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected:
162d0825bca7fe65beaee391d30da42e937db621564Steve Block    static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesGetPropertyNames | InternalFunction::StructureFlags | OverridesMarkChildren;
163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtRuntimeMethodData *d_func() const {return d_ptr;}
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtRuntimeMethod(QtRuntimeMethodData *dd, ExecState *exec, const Identifier &n, PassRefPtr<QtInstance> inst);
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtRuntimeMethodData *d_ptr;
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeMetaMethod : public QtRuntimeMethod
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtRuntimeMetaMethod(ExecState *exec, const Identifier &n, PassRefPtr<QtInstance> inst, int index, const QByteArray& signature, bool allowPrivate);
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool getOwnPropertySlot(ExecState *, const Identifier&, PropertySlot&);
175d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
176d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    virtual void markChildren(MarkStack& markStack);
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected:
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtRuntimeMetaMethodData* d_func() const {return reinterpret_cast<QtRuntimeMetaMethodData*>(d_ptr);}
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual CallType getCallData(CallData&);
185545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    static EncodedJSValue JSC_HOST_CALL call(ExecState* exec);
186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static JSValue lengthGetter(ExecState*, JSValue, const Identifier&);
187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static JSValue connectGetter(ExecState*, JSValue, const Identifier&);
188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static JSValue disconnectGetter(ExecState*, JSValue, const Identifier&);
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtConnectionObject;
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeConnectionMethod : public QtRuntimeMethod
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtRuntimeConnectionMethod(ExecState *exec, const Identifier &n, bool isConnect, PassRefPtr<QtInstance> inst, int index, const QByteArray& signature );
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool getOwnPropertySlot(ExecState *, const Identifier&, PropertySlot&);
198d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
199d0825bca7fe65beaee391d30da42e937db621564Steve Block    virtual void getOwnPropertyNames(ExecState*, PropertyNameArray&, EnumerationMode mode = ExcludeDontEnumProperties);
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected:
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QtRuntimeConnectionMethodData* d_func() const {return reinterpret_cast<QtRuntimeConnectionMethodData*>(d_ptr);}
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual CallType getCallData(CallData&);
206545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    static EncodedJSValue JSC_HOST_CALL call(ExecState* exec);
207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static JSValue lengthGetter(ExecState*, JSValue, const Identifier&);
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static QMultiMap<QObject *, QtConnectionObject *> connections;
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    friend class QtConnectionObject;
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtConnectionObject: public QObject
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
21581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    QtConnectionObject(JSGlobalData&, PassRefPtr<QtInstance> instance, int signalIndex, JSObject* thisObject, JSObject* funcObject);
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ~QtConnectionObject();
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static const QMetaObject staticMetaObject;
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual const QMetaObject *metaObject() const;
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void *qt_metacast(const char *);
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int qt_metacall(QMetaObject::Call, int, void **argv);
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool match(QObject *sender, int signalIndex, JSObject* thisObject, JSObject *funcObject);
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // actual slot:
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void execute(void **argv);
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<QtInstance> m_instance;
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int m_signalIndex;
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QObject* m_originalObject; // only used as a key, not dereferenced
2322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    Strong<JSObject> m_thisObject;
2332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    Strong<JSObject> m_funcObject;
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2365f1ab04193ad0130ca8204aadaceae083aca9881Feng QianQVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type hint, int *distance);
2375f1ab04193ad0130ca8204aadaceae083aca9881Feng QianJSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, const QVariant& variant);
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace Bindings
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace JSC
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
243