18#include <QtCore/qmetaobject.h>
46 typedef Heap::Object *(*GetPrototypeOf)(
const Managed *);
103template<VTable::CallWithMetaTypes call>
106template<VTable::Call call>
117 if constexpr (!std::is_same_v<
120 return Class::virtualCallWithMetaTypes;
123 if constexpr (!std::is_same_v<
129 return Class::virtualCallWithMetaTypes;
140 if constexpr (!std::is_same_v<
143 return Class::virtualCall;
146 if constexpr (!std::is_same_v<
152 return Class::virtualCall;
183 template<
class Class>
186 template<
class Class>
190#define DEFINE_MANAGED_VTABLE_INT(classname, parentVTable) \
193 (sizeof(classname::Data) + sizeof(QV4::Value) - 1)/sizeof(QV4::Value), \
194 (sizeof(classname::Data) + (classname::NInlineProperties*sizeof(QV4::Value)) + QV4::Chunk::SlotSize - 1)/QV4::Chunk::SlotSize*QV4::Chunk::SlotSize/sizeof(QV4::Value) \
195 - (sizeof(classname::Data) + sizeof(QV4::Value) - 1)/sizeof(QV4::Value), \
196 classname::IsExecutionContext, \
197 classname::IsString, \
198 classname::IsObject, \
199 classname::IsFunctionObject, \
200 classname::IsErrorObject, \
201 classname::IsArrayData, \
202 classname::IsStringOrSymbol, \
207 classname::virtualDestroy, \
208 classname::Data::markObjects, \
209 classname::virtualIsEqualTo, \
211 classname::virtualGet, \
212 classname::virtualPut, \
213 classname::virtualDeleteProperty, \
214 classname::virtualHasProperty, \
215 classname::virtualGetOwnProperty, \
216 classname::virtualDefineOwnProperty, \
217 classname::virtualIsExtensible, \
218 classname::virtualPreventExtensions, \
219 classname::virtualGetPrototypeOf, \
220 classname::virtualSetPrototypeOf, \
221 classname::virtualGetLength, \
222 classname::virtualOwnPropertyKeys, \
223 classname::virtualInstanceOf, \
225 QV4::vtableJsTypesCallEntry<classname>(), \
226 classname::virtualCallAsConstructor, \
227 QV4::vtableMetaTypesCallEntry<classname>(), \
229 classname::virtualResolveLookupGetter, \
230 classname::virtualResolveLookupSetter, \
231 classname::virtualMetacall \
234#define DEFINE_MANAGED_VTABLE(classname) \
235const QV4::VTable classname::static_vtbl = DEFINE_MANAGED_VTABLE_INT(classname, 0)
237#define V4_OBJECT2(DataClass, superClass) \
239 DataClass() = delete; \
240 Q_DISABLE_COPY(DataClass) \
243 typedef QV4::Heap::DataClass Data; \
244 typedef superClass SuperClass; \
245 static const QV4::VTable static_vtbl; \
246 static inline const QV4::VTable *staticVTable() { return &static_vtbl; } \
247 V4_MANAGED_SIZE_TEST \
248 QV4::Heap::DataClass *d_unchecked() const { return static_cast<QV4::Heap::DataClass *>(m()); } \
249 QV4::Heap::DataClass *d() const { \
250 QV4::Heap::DataClass *dptr = d_unchecked(); \
251 dptr->_checkIsInitialized(); \
254 Q_STATIC_ASSERT(std::is_trivial_v<QV4::Heap::DataClass>);
256#define V4_PROTOTYPE(p) \
257 static QV4::Object *defaultPrototype(QV4::ExecutionEngine *e) \
261#define DEFINE_OBJECT_VTABLE_BASE(classname) \
262 const QV4::VTable classname::static_vtbl = DEFINE_MANAGED_VTABLE_INT(classname, (std::is_same<classname::SuperClass, Object>::value) ? nullptr : &classname::SuperClass::static_vtbl)
264#define DEFINE_OBJECT_VTABLE(classname) \
265DEFINE_OBJECT_VTABLE_BASE(classname)
267#define DEFINE_OBJECT_TEMPLATE_VTABLE(classname) \
268template<> DEFINE_OBJECT_VTABLE_BASE(classname)
Combined button and popup list for selecting options.
\qmltype Particle \inqmlmodule QtQuick.Particles
constexpr VTable::Call vtableJsTypesCallEntry()
constexpr VTable::CallWithMetaTypes vtableMetaTypesCallEntry()
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
static struct AttrInfo attrs[]
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
virtual PropertyKey next(const Object *o, Property *p=nullptr, PropertyAttributes *attrs=nullptr)=0
static constexpr VTable::SetPrototypeOf virtualSetPrototypeOf
static constexpr VTable::DefineOwnProperty virtualDefineOwnProperty
static constexpr VTable::OwnPropertyKeys virtualOwnPropertyKeys
static constexpr VTable::GetOwnProperty virtualGetOwnProperty
static constexpr VTable::CallAsConstructor virtualCallAsConstructor
static constexpr VTable::Call virtualCall
static constexpr VTable::PreventExtensions virtualPreventExtensions
static constexpr VTable::GetPrototypeOf virtualGetPrototypeOf
friend constexpr VTable::Call vtableJsTypesCallEntry()
static constexpr VTable::DeleteProperty virtualDeleteProperty
static constexpr VTable::Get virtualGet
static constexpr VTable::Metacall virtualMetacall
static constexpr VTable::GetLength virtualGetLength
static constexpr VTable::CallWithMetaTypes virtualCallWithMetaTypes
static constexpr VTable::InstanceOf virtualInstanceOf
static constexpr VTable::HasProperty virtualHasProperty
static constexpr VTable::Put virtualPut
static constexpr VTable::IsEqualTo virtualIsEqualTo
static constexpr VTable::ResolveLookupGetter virtualResolveLookupGetter
static constexpr VTable::Destroy virtualDestroy
friend constexpr VTable::CallWithMetaTypes vtableMetaTypesCallEntry()
static constexpr VTable::ResolveLookupSetter virtualResolveLookupSetter
static constexpr VTable::IsExtensible virtualIsExtensible
const VTable *const parent
ResolveLookupSetter resolveLookupSetter
GetPrototypeOf getPrototypeOf
ReturnedValue(* CallAsConstructor)(const FunctionObject *, const Value *argv, int argc, const Value *newTarget)
quint16 inlinePropertyOffset
CallWithMetaTypes callWithMetaTypes
bool(* PreventExtensions)(Managed *)
ReturnedValue(* Call)(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
OwnPropertyKeyIterator *(* OwnPropertyKeys)(const Object *m, Value *target)
PreventExtensions preventExtensions
CallAsConstructor callAsConstructor
OwnPropertyKeys ownPropertyKeys
GetOwnProperty getOwnProperty
bool(* HasProperty)(const Managed *m, PropertyKey id)
bool(* DeleteProperty)(Managed *m, PropertyKey id)
DefineOwnProperty defineOwnProperty
int(* Metacall)(Object *, QMetaObject::Call, int, void **)
ReturnedValue(* InstanceOf)(const Object *typeObject, const Value &var)
DeleteProperty deleteProperty
void(* CallWithMetaTypes)(const FunctionObject *, QObject *, void **, const QMetaType *, int)
bool(* IsEqualTo)(Managed *m, Managed *other)
bool(* ResolveLookupSetter)(Object *, ExecutionEngine *, Lookup *, const Value &)
void(* Destroy)(Heap::Base *)
bool(* DefineOwnProperty)(Managed *m, PropertyKey id, const Property *p, PropertyAttributes attrs)
Heap::Object *(* GetPrototypeOf)(const Managed *)
bool(* IsExtensible)(const Managed *)
IsExtensible isExtensible
ReturnedValue(* ResolveLookupGetter)(const Object *, ExecutionEngine *, Lookup *)
quint16 nInlineProperties
void(* MarkObjects)(Heap::Base *, MarkStack *markStack)
bool(* Put)(Managed *, PropertyKey id, const Value &value, Value *receiver)
PropertyAttributes(* GetOwnProperty)(const Managed *m, PropertyKey id, Property *p)
SetPrototypeOf setPrototypeOf
ReturnedValue(* Get)(const Managed *, PropertyKey id, const Value *receiver, bool *hasProperty)
qint64(* GetLength)(const Managed *m)
quint8 isExecutionContext
ResolveLookupGetter resolveLookupGetter
bool(* SetPrototypeOf)(Managed *, const Object *)