7#include <private/qqmlrefcount_p.h>
11#include <private/qqmlglobal_p.h>
13#include <private/qv4object_p.h>
14#include <private/qv4variantobject_p.h>
15#include <private/qv4functionobject_p.h>
16#include <private/qv4scopedvalue_p.h>
17#include <private/qv4jscall_p.h>
18#include <private/qv4qobjectwrapper_p.h>
19#include <private/qv4sequenceobject_p.h>
20#include <private/qqmlpropertycachecreator_p.h>
21#include <private/qqmlpropertycachemethodarguments_p.h>
22#include <private/qqmlvaluetypewrapper_p.h>
24#include <QtCore/qsequentialiterable.h>
35 quintptr inheritanceDepth = encodedIndex >> (usableBits / 2);
36 m_id = encodedIndex & ((
quintptr(1) << (usableBits / 2)) - 1);
40 while (inheritanceDepth--)
41 mo =
mo->parentVMEMetaObject();
59 const auto *
v = (md->data() + m_id)->as<QV4::VariantObject>();
79 resolved.
list()->append(
o);
101 resolved.
list()->clear();
120 resolved.
list()->removeLast();
129void QQmlVMEVariantQObjectPtr::objectDestroyedImpl(
QQmlGuardImpl *guard)
135 if (This->m_index >= 0) {
146 This->m_target->activate(This->m_target->object, This->m_target->methodOffset() + This->m_index,
nullptr);
200 int coreIndex = encodedIndex.
coreIndex();
207 void *argv[1] = { &
target };
210 pd = newPropertyCache->property(valueTypeIndex);
250 if (
Q_UNLIKELY(vi->m_propertyIndex.coreIndex() ==
index.coreIndex())) {
251 qWarning() <<
"Attempting to set another interceptor on "
252 <<
object->metaObject()->className() <<
"property"
253 <<
object->metaObject()->property(
index.coreIndex()).name()
258 interceptor->m_propertyIndex =
index;
259 interceptor->m_next = interceptors;
260 interceptors = interceptor;
270 return object->qt_metacall(
c,
id,
a);
276 if (vi->m_propertyIndex.coreIndex() !=
id)
279 const int valueIndex = vi->m_propertyIndex.valueTypeIndex();
281 const QMetaType metaType =
data->propertyCache->property(
id)->propType();
289 const int changedProperty
291 ? *
static_cast<int *
>(
a[4])
292 :
QV4::ReferenceObject::AllProperties;
294 || changedProperty == valueIndex) {
297 data->context->engine(), metaType);
334 valueType->
read(
object,
id);
345 valueType->
writeOnGadget(valueProp, std::move(prevComponentValue));
348 vi->write(newComponentValue);
355 object->qt_metacall(
c,
id,
a);
368 if (
o->qt_metacast(
mo->className()) !=
nullptr)
393 aliasEndpoints(
nullptr), compilationUnit(qmlCompilationUnit), compiledObject(
nullptr)
533 return s->toQString();
546 if (!
v ||
v->d()->data().userType() != QMetaType::QUrl)
548 return v->d()->data().value<
QUrl>();
560 if (!
v ||
v->d()->data().userType() != QMetaType::QDate)
562 return v->d()->data().value<
QDate>();
574 if (!
v ||
v->d()->data().userType() != QMetaType::QTime)
576 return v->d()->data().value<
QTime>();
588 if (!
v ||
v->d()->data().userType() != QMetaType::QDateTime)
593#if QT_CONFIG(regularexpression)
603 if (!
v ||
v->d()->data().userType() != QMetaType::QRegularExpression)
618 if (!
v ||
v->d()->data().userType() != QMetaType::QSizeF)
620 return v->d()->data().value<
QSizeF>();
632 if (!
v ||
v->d()->data().userType() != QMetaType::QPointF)
634 return v->d()->data().value<
QPointF>();
676 if (!
v ||
v->d()->data().userType() != QMetaType::QRectF)
678 return v->d()->data().value<
QRectF>();
700 if (
id < propertyCount) {
728 while (
mo &&
mo !=
this) {
729 mo =
mo->parentVMEMetaObject();
734 qmlWarning(
object) <<
"Too many objects in inheritance hierarchy "
739 qmlWarning(
object) <<
"Too many properties in object "
743 quintptr encodedIndex = (inheritanceDepth << idBits) +
id;
748 object,
reinterpret_cast<void *
>(
quintptr(encodedIndex)),
755 const void *
data = sequence
761 qmlWarning(
object) <<
"Cannot find member data";
789#if QT_CONFIG(regularexpression)
791 = readPropertyAsRegularExpression(
id);
827 *
reinterpret_cast<QObject **
>(
a[0]) =
nullptr;
830 const void *
data =
nullptr;
840 qmlWarning(
object) <<
"Cannot find member data";
845 bool needActivate =
false;
859 void *
data = sequence
876 QMetaType::fromType<QSequentialIterable>(),
879 engine, propType, iterable.metaContainer(),
a[0]);
884 if (sequence->isUndefined()) {
886 <<
"Could not create a QML sequence object for "
892 qmlWarning(
object) <<
"Cannot find member data";
927#if QT_CONFIG(regularexpression)
929 != readPropertyAsRegularExpression(
id);
964 needActivate =
wrap->object() !=
arg;
965 else if (
arg !=
nullptr || !sv->
isNull())
988 qmlWarning(
object) <<
"Cannot find member data";
1000 id -= propertyCount;
1002 if (
id < aliasCount) {
1007 *
reinterpret_cast<void **
>(
a[0]) =
nullptr;
1032 int coreIndex = encodedIndex.
coreIndex();
1033 const int valueTypePropertyIndex = encodedIndex.
valueTypeIndex();
1037 int flags = *
reinterpret_cast<int*
>(
a[3]);
1045 if (valueTypePropertyIndex != -1) {
1058 valueTypePropertyIndex);
1063 void *argv[1] = { &
target };
1082 int plainSignals =
signalCount + propertyCount + aliasCount;
1083 if (
id < plainSignals) {
1090 if (
id < methodCount) {
1110 "Exception occurred during compilation of function: ")
1116 auto methodData =
cache->method(_id);
1117 auto arguments = methodData->hasArguments() ? methodData->arguments() :
nullptr;
1127 const QMetaType returnType = methodData->propType();
1130 function->call(
nullptr,
a, &returnType, 0);
1135 if (
error.isValid())
1149 return object->qt_metacall(
c, _id,
a);
1155 qWarning(
"QQmlVMEMetaObject: Internal error - attempted to evaluate a function in an invalid context");
1172 return (md->
data() +
id)->asReturnedValue();
1185 return v->d()->data();
1205 QObject *valueObject =
nullptr;
1211 v->addVmePropertyReference();
1215 valueObject =
wrapper->object();
1218 if (valueObject && !guard) {
1225 if (
p->enforcesLocation()) {
1239 QV4::Heap::QQmlValueTypeWrapper *
p =
wrapper->d();
1271 v->addVmePropertyReference();
1279 bool needActivate =
false;
1280 if (
value.userType() == QMetaType::QObjectStar) {
1288 needActivate = (!
v ||
1289 v->d()->data().userType() !=
value.userType() ||
1290 v->d()->data() !=
value);
1378 *valueTypeIndex = -1;
1475 if ((*it)->m_index ==
index) {
\inmodule QtCore\reentrant
\inmodule QtCore \reentrant
qsizetype size() const noexcept
const_iterator constBegin() const noexcept
void append(parameter_type t)
const_iterator constEnd() const noexcept
QDynamicMetaObjectData * metaObject
static QObjectPrivate * get(QObject *o)
\inmodule QtCore\reentrant
QObject * idValue(int index) const
QQmlNotifier * idValueBindings(int index) const
QQmlEngine * engine() const
static QQmlPropertyCache::ConstPtr ensurePropertyCache(QObject *object)
QQmlPropertyCache::ConstPtr propertyCache
quint32 hasInterceptorMetaObject
static bool wasDeleted(const QObject *)
static QQmlData * get(QObjectPrivate *priv, bool create)
bool hasBindingBit(int) const
void warning(const QQmlError &)
static QQmlEnginePrivate * get(QQmlEngine *e)
void referenceScarceResources()
void dereferenceScarceResources()
The QQmlEngine class provides an environment for instantiating QML components.
The QQmlError class encapsulates a QML error.
void setValue(const QVariant &value)
static QQmlGadgetPtrWrapper * instance(QQmlEngine *engine, QMetaType type)
QMetaProperty property(int index) const
void write(QObject *obj, int idx, QQmlPropertyData::WriteFlags flags, int internalIndex=QV4::ReferenceObject::AllProperties) const
QVariant readOnGadget(const QMetaProperty &property) const
void read(QObject *obj, int idx)
void writeOnGadget(const QMetaProperty &property, const QVariant &value)
void setObject(QObject *g)
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
void connect(QObject *source, int sourceSignal, QQmlEngine *engine, bool doNotify=true)
QMetaType propType() const
@ RemoveBindingOnAliasWrite
static QQmlPropertyIndex fromEncoded(qint32 encodedIndex)
int valueTypeIndex() const
static void removeBinding(const QQmlProperty &that)
The QQmlPropertyValueInterceptor class is inherited by property interceptors such as Behavior.
bool isSequentialContainer() const
QVector< QQmlGuard< QObject > > * list() const
QQmlVMEResolvedList(QQmlListProperty< QObject > *prop)
void activateSignal() const
QQmlVMEMetaObject * m_target
void setGuardedValue(QObject *obj, QQmlVMEMetaObject *target, int index)
QQmlVMEVariantQObjectPtr()
\inmodule QtCore\reentrant
\inmodule QtCore \reentrant
The QSequentialIterable class is an iterable interface for a container in a QVariant.
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
T * data() const noexcept
\inmodule QtCore \reentrant
const CompiledObject * objectAt(int index) const
Managed * asManaged() const
void markOnce(MarkStack *markStack)
void set(ExecutionEngine *engine, const Value &value)
void * data()
Returns a pointer to the contained object as a generic void* that can be written to.
static auto fromValue(T &&value) noexcept(std::is_nothrow_copy_constructible_v< T > &&Private::CanUseInternalSpace< T >) -> std::enable_if_t< std::conjunction_v< std::is_copy_constructible< T >, std::is_destructible< T > >, QVariant >
QMetaType metaType() const
const void * constData() const
qDeleteAll(list.begin(), list.end())
QCache< int, Employee > cache
[0]
QSet< QString >::iterator it
QList< QVariant > arguments
Combined button and popup list for selecting options.
\qmltype Particle \inqmlmodule QtQuick.Particles
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction function
DBusConnection const char DBusError * error
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 * method
static QDBusError::ErrorType get(const char *name)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLdouble GLdouble GLdouble GLdouble top
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
static QT_BEGIN_NAMESPACE QAsn1Element wrap(quint8 type, const QAsn1Element &child)
#define QStringLiteral(str)
@ AliasPointsToPointerObject
qint32_le encodedMetaPropertyIndex
quint32 targetObjectId() const
bool isObjectAlias() const
bool hasFlag(Flag flag) const
bool isAliasToLocalAlias() const
quint32_le localAliasIndex
const Property * propertyTable() const
const Alias * aliasTable() const
CommonType commonType() const
static constexpr ReturnedValue undefined()
Heap::String * newString(const QString &s=QString())
QQmlError catchExceptionAsQmlError()
QV4::ReturnedValue fromVariant(const QVariant &)
static QVariant toVariant(const QV4::Value &value, QMetaType typeHint, bool createJSValueForObjectsAndSymbols=true)
Heap::Object * newVariantObject(const QMetaType type, const void *data)
ExecutionEngine * engine() const
static Heap::MemberData * allocate(QV4::ExecutionEngine *e, uint n, Heap::MemberData *old=nullptr)
const Value * data() const
void set(EngineBase *e, uint index, Value v)
static ReturnedValue wrap(ExecutionEngine *engine, QObject *object)
static constexpr const int AllProperties
static bool readReference(HeapObject *ref)
static HeapObject * detached(HeapObject *ref)
bool hasException() const
static void * getRawContainerPtr(const Sequence *object, QMetaType typeHint)
static ReturnedValue fromData(QV4::ExecutionEngine *engine, QMetaType type, QMetaSequence metaSequence, const void *data)
constexpr ReturnedValue asReturnedValue() const
QV4_NEARLY_ALWAYS_INLINE double doubleValue() const
bool booleanValue() const
static constexpr Value fromInt32(int i)
QML_NEARLY_ALWAYS_INLINE String * stringValue() const
static constexpr Value fromBoolean(bool b)
static constexpr Value undefinedValue()
static Value fromDouble(double d)
static constexpr Value fromReturnedValue(ReturnedValue val)
static constexpr Value nullValue()
V4_NEEDS_DESTROY void addVmePropertyReference() const
void removeVmePropertyReference() const
uchar data[MaxInternalSize]