20#include <private/qv4heap_p.h>
21#include <private/qv4vtable_p.h>
27#define Q_MANAGED_CHECK \
28 template <typename Type> inline void qt_check_for_QMANAGED_macro(const Type *_q_argument) const \
29 { int i = qYouForgotTheQ_MANAGED_Macro(this, _q_argument); i = i + 1; }
34template <
typename T1,
typename T2>
37#define V4_MANAGED_SIZE_TEST void __dataTest() { static_assert (sizeof(*this) == sizeof(Managed), "Classes derived from Managed can't have own data members."); }
39#define V4_NEEDS_DESTROY static void virtualDestroy(QV4::Heap::Base *b) { static_cast<Data *>(b)->destroy(); }
42#define V4_MANAGED_ITSELF(DataClass, superClass) \
45 typedef QV4::Heap::DataClass Data; \
46 typedef superClass SuperClass; \
47 static const QV4::VTable static_vtbl; \
48 static inline const QV4::VTable *staticVTable() { return &static_vtbl; } \
49 V4_MANAGED_SIZE_TEST \
50 QV4::Heap::DataClass *d_unchecked() const { return static_cast<QV4::Heap::DataClass *>(m()); } \
51 QV4::Heap::DataClass *d() const { \
52 QV4::Heap::DataClass *dptr = d_unchecked(); \
53 dptr->_checkIsInitialized(); \
57#define V4_MANAGED(DataClass, superClass) \
59 DataClass() = delete; \
60 Q_DISABLE_COPY(DataClass) \
61 V4_MANAGED_ITSELF(DataClass, superClass) \
62 Q_STATIC_ASSERT(std::is_trivial_v<QV4::Heap::DataClass>);
64#define Q_MANAGED_TYPE(type) \
66 enum { MyType = Type_##type };
68#define V4_INTERNALCLASS(c) \
69 static Heap::InternalClass *defaultInternalClass(QV4::EngineBase *e) \
70 { return e->internalClasses(QV4::EngineBase::Class_##c); }
76 IsExecutionContext =
false,
78 IsStringOrSymbol =
false,
80 IsFunctionObject =
false,
81 IsErrorObject =
false,
85 void *
operator new(size_t);
90 enum { NInlineProperties = 0 };
135 bool isArrayLike()
const {
return isArrayObject() || isV4SequenceType() || isQmlListPropertyType(); }
137 bool isArrayObject()
const {
return d()->internalClass->vtable->type == Type_ArrayObject; }
138 bool isStringObject()
const {
return d()->internalClass->vtable->type == Type_StringObject; }
139 bool isSymbolObject()
const {
return d()->internalClass->vtable->type == Type_SymbolObject; }
144 {
return d()->internalClass->vtable->isEqualTo(
const_cast<Managed *
>(
this),
const_cast<Managed *
>(
other)); }
146 bool inUse()
const {
return d()->inUse(); }
154 template<
typename T>
inline T *
cast() {
155 return static_cast<T *
>(
this);
157 template<
typename T>
inline const T *
cast()
const {
158 return static_cast<const T *
>(
this);
166 friend struct Identifiers;
173 m()->mark(markStack);
195 return d()->changeVTable(vt);
198 return d()->changePrototype(proto);
201 return d()->addMember(identifier,
data,
entry);
205 return d()->changeMember(identifier,
data,
entry);
\macro QT_RESTRICTED_CAST_FROM_ASCII
Combined button and popup list for selecting options.
\qmltype Particle \inqmlmodule QtQuick.Particles
int qYouForgotTheQ_MANAGED_Macro(T, T)
#define Q_REQUIRED_RESULT
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
#define V4_MANAGED_ITSELF(DataClass, superClass)
#define Q_MANAGED_TYPE(type)
#define V4_INTERNALCLASS(c)
const char className[16]
[1]
Q_REQUIRED_RESULT Heap::InternalClass * changePrototype(Heap::Object *proto)
void operator=(Heap::InternalClass *ic)
V4_NEEDS_DESTROY Q_REQUIRED_RESULT Heap::InternalClass * changeVTable(const VTable *vt)
Q_REQUIRED_RESULT Heap::InternalClass * changeMember(PropertyKey identifier, PropertyAttributes data, InternalClassEntry *entry=nullptr)
Q_REQUIRED_RESULT Heap::InternalClass * addMember(PropertyKey identifier, PropertyAttributes data, InternalClassEntry *entry=nullptr)
const VTable * vtable() const
@ Type_ArrayIteratorObject
@ Type_StringIteratorObject
@ Type_UrlSearchParamsObject
bool isSymbolObject() const
void mark(MarkStack *markStack)
bool isV4SequenceType() const
bool isEqualTo(const Managed *other) const
bool isQmlListPropertyType() const
Q_ALWAYS_INLINE Heap::Base * heapObject() const
bool isStringObject() const
bool isArrayObject() const
ExecutionEngine * engine() const
QML_NEARLY_ALWAYS_INLINE ManagedPtr managed() const
QML_NEARLY_ALWAYS_INLINE Object * objectValue() const
Value & operator=(const ScopedValue &v)