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 205af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#ifndef qt_instance_h 215af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#define qt_instance_h 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2353733164eb6cabab5a1eddcabb42e4ce27eb0e44Ben Murdoch#include "BridgeJSC.h" 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "runtime_root.h" 251325a8463a7f9bc2ec969c7728aba33e3de91a17Steve Block#include <QtScript/qscriptengine.h> 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qhash.h> 271325a8463a7f9bc2ec969c7728aba33e3de91a17Steve Block#include <qpointer.h> 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qset.h> 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC { 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace Bindings { 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtClass; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtField; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtRuntimeMetaMethod; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QtInstance : public Instance { 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~QtInstance(); 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual Class* getClass() const; 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual RuntimeObject* newRuntimeObject(ExecState*); 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void begin(); 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void end(); 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual JSValue valueOf(ExecState*) const; 495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual JSValue defaultValue(ExecState*, PreferredPrimitiveType) const; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void markAggregate(MarkStack&); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual JSValue getMethod(ExecState* exec, const Identifier& propertyName); 545af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke virtual JSValue invokeMethod(ExecState*, RuntimeMethod*); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void getPropertyNames(ExecState*, PropertyNameArray&); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian JSValue stringValue(ExecState* exec) const; 595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian JSValue numberValue(ExecState* exec) const; 605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian JSValue booleanValue() const; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QObject* getObject() const { return m_object; } 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block QObject* hashKey() const { return m_hashkey; } 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian static PassRefPtr<QtInstance> getQtInstance(QObject*, PassRefPtr<RootObject>, QScriptEngine::ValueOwnership ownership); 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual bool getOwnPropertySlot(JSObject*, ExecState*, const Identifier&, PropertySlot&); 685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void put(JSObject*, ExecState*, const Identifier&, JSValue, PutPropertySlot&); 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void removeCachedMethod(JSObject*); 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static QtInstance* getInstance(JSObject*); 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian static PassRefPtr<QtInstance> create(QObject *instance, PassRefPtr<RootObject> rootObject, QScriptEngine::ValueOwnership ownership) 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return adoptRef(new QtInstance(instance, rootObject, ownership)); 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project friend class QtClass; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project friend class QtField; 828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian QtInstance(QObject*, PassRefPtr<RootObject>, QScriptEngine::ValueOwnership ownership); // Factory produced only.. 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mutable QtClass* m_class; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QPointer<QObject> m_object; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project QObject* m_hashkey; 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch mutable QHash<QByteArray, WriteBarrier<JSObject> > m_methods; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mutable QHash<QString, QtField*> m_fields; 882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block mutable WriteBarrier<QtRuntimeMetaMethod> m_defaultMethod; 898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian QScriptEngine::ValueOwnership m_ownership; 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace Bindings 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace JSC 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 97