|
| V4_OBJECT2 (VariantAssociationObject, QV4::ReferenceObject) |
| V4_PROTOTYPE (variantAssociationPrototype) |
void | setInternalClass (Heap::InternalClass *ic) |
const Value * | propertyData (uint index) const |
Heap::ArrayData * | arrayData () const |
void | setArrayData (ArrayData *a) |
void | getProperty (const InternalClassEntry &entry, Property *p) const |
void | setProperty (const InternalClassEntry &entry, const Property *p) |
void | setProperty (uint index, Value v) const |
void | setProperty (uint index, Heap::Base *b) const |
void | setProperty (ExecutionEngine *engine, uint index, Value v) const |
void | setProperty (ExecutionEngine *engine, uint index, Heap::Base *b) const |
const VTable * | vtable () const |
PropertyAttributes | getOwnProperty (PropertyKey id, Property *p=nullptr) const |
PropertyIndex | getValueOrSetter (PropertyKey id, PropertyAttributes *attrs) |
bool | hasProperty (PropertyKey id) const |
bool | defineOwnProperty (PropertyKey id, const Property *p, PropertyAttributes attrs) |
ReturnedValue | getValue (const Value &v, PropertyAttributes attrs) const |
ReturnedValue | getValueByIndex (uint propertyIndex) const |
bool | putValue (uint memberIndex, PropertyAttributes attrs, const Value &value) |
void | defineDefaultProperty (StringOrSymbol *name, const Value &value, PropertyAttributes attributes=Attr_Data|Attr_NotEnumerable) |
void | defineDefaultProperty (const QString &name, const Value &value, PropertyAttributes attributes=Attr_Data|Attr_NotEnumerable) |
void | defineDefaultProperty (const QString &name, VTable::Call code, int argumentCount=0, PropertyAttributes attributes=Attr_Data|Attr_NotEnumerable) |
void | defineDefaultProperty (StringOrSymbol *name, VTable::Call code, int argumentCount=0, PropertyAttributes attributes=Attr_Data|Attr_NotEnumerable) |
void | defineAccessorProperty (const QString &name, VTable::Call getter, VTable::Call setter) |
void | defineAccessorProperty (StringOrSymbol *name, VTable::Call getter, VTable::Call setter) |
void | defineReadonlyProperty (const QString &name, const Value &value) |
void | defineReadonlyProperty (String *name, const Value &value) |
void | defineReadonlyConfigurableProperty (const QString &name, const Value &value) |
void | defineReadonlyConfigurableProperty (StringOrSymbol *name, const Value &value) |
void | addSymbolSpecies () |
void | insertMember (StringOrSymbol *s, const Value &v, PropertyAttributes attributes=Attr_Data) |
void | insertMember (StringOrSymbol *s, const Property *p, PropertyAttributes attributes) |
bool | isExtensible () const |
bool | preventExtensions () |
Heap::Object * | getPrototypeOf () const |
bool | setPrototypeOf (const Object *p) |
void | setPrototypeUnchecked (const Object *p) |
void | copyArrayData (Object *other) |
bool | setArrayLength (uint newLen) |
void | setArrayLengthUnchecked (uint l) |
void | arraySet (uint index, const Property *p, PropertyAttributes attributes=Attr_Data) |
void | arraySet (uint index, const Value &value) |
bool | arrayPut (uint index, const Value &value) |
bool | arrayPut (uint index, const Value *values, uint n) |
void | setArrayAttributes (uint i, PropertyAttributes a) |
void | push_back (const Value &v) |
ArrayData::Type | arrayType () const |
void | setArrayType (ArrayData::Type t) |
void | arrayReserve (uint n) |
void | arrayCreate () |
void | initSparseArray () |
SparseArrayNode * | sparseBegin () const |
SparseArrayNode * | sparseEnd () const |
bool | protoHasArray () |
ReturnedValue | get (StringOrSymbol *name, bool *hasProperty=nullptr, const Value *receiver=nullptr) const |
ReturnedValue | get (uint idx, bool *hasProperty=nullptr, const Value *receiver=nullptr) const |
QT_DEPRECATED ReturnedValue | getIndexed (uint idx, bool *hasProperty=nullptr) const |
ReturnedValue | get (PropertyKey id, const Value *receiver=nullptr, bool *hasProperty=nullptr) const |
bool | put (StringOrSymbol *name, const Value &v, Value *receiver=nullptr) |
bool | put (uint idx, const Value &v, Value *receiver=nullptr) |
QT_DEPRECATED bool | putIndexed (uint idx, const Value &v) |
bool | put (PropertyKey id, const Value &v, Value *receiver=nullptr) |
bool | setIndexed (uint idx, const Value &v, ThrowOnFailure shouldThrow) |
bool | set (StringOrSymbol *name, const Value &v, ThrowOnFailure shouldThrow) |
bool | deleteProperty (PropertyKey id) |
OwnPropertyKeyIterator * | ownPropertyKeys (Value *target) const |
qint64 | getLength () const |
ReturnedValue | instanceOf (const Value &var) const |
bool | isConcatSpreadable () const |
bool | isArray () const |
const FunctionObject * | speciesConstructor (Scope &scope, const FunctionObject *defaultConstructor) const |
bool | setProtoFromNewTarget (const Value *newTarget) |
ReturnedValue | resolveLookupGetter (ExecutionEngine *engine, Lookup *lookup) const |
bool | resolveLookupSetter (ExecutionEngine *engine, Lookup *lookup, const Value &value) |
int | metacall (QMetaObject::Call call, int index, void **a) |
Heap::InternalClass * | internalClass () const |
const VTable * | vtable () const |
ExecutionEngine * | engine () const |
bool | isV4SequenceType () const |
bool | isV4QObjectWrapper () const |
bool | isQmlListPropertyType () const |
bool | isArrayLike () const |
bool | isArrayObject () const |
bool | isStringObject () const |
bool | isSymbolObject () const |
QString | className () const |
bool | isEqualTo (const Managed *other) const |
bool | inUse () const |
bool | markBit () const |
void | mark (MarkStack *markStack) |
Q_ALWAYS_INLINE Heap::Base * | heapObject () const |
template<typename T> |
T * | cast () |
template<typename T> |
const T * | cast () const |
bool | isString () const |
bool | isStringOrSymbol () const |
bool | isSymbol () const |
bool | isObject () const |
bool | isFunctionObject () const |
QML_NEARLY_ALWAYS_INLINE String * | stringValue () const |
QML_NEARLY_ALWAYS_INLINE StringOrSymbol * | stringOrSymbolValue () const |
QML_NEARLY_ALWAYS_INLINE Symbol * | symbolValue () const |
QML_NEARLY_ALWAYS_INLINE Object * | objectValue () const |
QML_NEARLY_ALWAYS_INLINE ManagedPtr | managed () const |
QML_NEARLY_ALWAYS_INLINE Value::HeapBasePtr | heapObject () const |
int | toUInt16 () const |
int | toInt32 () const |
unsigned int | toUInt32 () const |
qint64 | toLength () const |
qint64 | toIndex () const |
bool | toBoolean () const |
double | toInteger () const |
ReturnedValue | convertedToNumber () const |
double | toNumber () const |
double | toNumberImpl () const |
QString | toQStringNoThrow () const |
QString | toQString () const |
QString | toQString (bool *ok) const |
Heap::String * | toString (ExecutionEngine *e) const |
QV4::PropertyKey | toPropertyKey (ExecutionEngine *e) const |
Heap::Object * | toObject (ExecutionEngine *e) const |
bool | isPrimitive () const |
template<typename T> |
const T * | as () const |
template<typename T> |
T * | as () |
template<typename T> |
T * | cast () |
template<typename T> |
const T * | cast () const |
uint | asArrayLength (bool *ok) const |
bool | sameValue (Value other) const |
bool | sameValueZero (Value other) const |
void | mark (MarkStack *markStack) |
Value & | operator= (const ScopedValue &v) |
Value & | operator= (ReturnedValue v) |
Value & | operator= (ManagedPtr m) |
Value & | operator= (HeapBasePtr o) |
template<typename T> |
Value & | operator= (const Scoped< T > &t) |
template<> |
const ArrayObject * | as () const |
template<> |
const FunctionObject * | as () const |
template<> |
const StringOrSymbol * | as () const |
template<> |
const String * | as () const |
template<> |
const DateObject * | as () const |
template<> |
const Managed * | as () const |
template<> |
const Object * | as () const |
template<> |
const ErrorObject * | as () const |
template<> |
const UrlObject * | as () const |
template<> |
const UrlSearchParamsObject * | as () const |
| StaticValue ()=default |
constexpr | StaticValue (quint64 val) |
StaticValue & | operator= (ReturnedValue v) |
template<typename Value> |
StaticValue & | operator= (const Value &) |
template<typename Value> |
const Value & | asValue () const |
template<typename Value> |
Value & | asValue () |
QV4_NEARLY_ALWAYS_INLINE constexpr quint64 & | rawValueRef () |
QV4_NEARLY_ALWAYS_INLINE constexpr quint64 | rawValue () const |
QV4_NEARLY_ALWAYS_INLINE constexpr void | setRawValue (quint64 raw) |
QV4_NEARLY_ALWAYS_INLINE constexpr void | setTagValue (quint32 tag, quint32 value) |
QV4_NEARLY_ALWAYS_INLINE constexpr quint32 | value () const |
QV4_NEARLY_ALWAYS_INLINE constexpr quint32 | tag () const |
QV4_NEARLY_ALWAYS_INLINE constexpr void | setTag (quint32 tag) |
QV4_NEARLY_ALWAYS_INLINE constexpr int | int_32 () const |
QV4_NEARLY_ALWAYS_INLINE constexpr void | setInt_32 (int i) |
QV4_NEARLY_ALWAYS_INLINE uint | uint_32 () const |
QV4_NEARLY_ALWAYS_INLINE constexpr void | setEmpty () |
Type | type () const |
quint64 | quickType () const |
bool | isEmpty () const |
bool | isNull () const |
bool | isBoolean () const |
bool | isInteger () const |
bool | isNullOrUndefined () const |
bool | isUndefined () const |
bool | isDouble () const |
bool | isNumber () const |
bool | isManagedOrUndefined () const |
bool | isManaged () const |
bool | isIntOrBool () const |
bool | integerCompatible () const |
bool | isNaN () const |
bool | isPositiveInt () const |
QV4_NEARLY_ALWAYS_INLINE double | doubleValue () const |
QV4_NEARLY_ALWAYS_INLINE void | setDouble (double d) |
bool | isInt32 () |
double | asDouble () const |
bool | booleanValue () const |
int | integerValue () const |
bool | tryIntegerConversion () |
bool | toBoolean () const |
int | toInt32 () const |
ReturnedValue * | data_ptr () |
constexpr ReturnedValue | asReturnedValue () const |
template<> |
StaticValue & | operator= (const Value &value) |
template<typename Managed> |
StaticValue & | operator= (const Managed &m) |
template<> |
Value & | asValue () |
template<> |
const Value & | asValue () const |
|
static V4_NEEDS_DESTROY bool | virtualPut (Managed *that, PropertyKey id, const QV4::Value &value, Value *receiver) |
static QV4::ReturnedValue | virtualGet (const QV4::Managed *that, PropertyKey id, const Value *receiver, bool *hasProperty) |
static bool | virtualDeleteProperty (QV4::Managed *that, PropertyKey id) |
static QV4::OwnPropertyKeyIterator * | virtualOwnPropertyKeys (const Object *m, Value *target) |
static PropertyAttributes | virtualGetOwnProperty (const Managed *m, PropertyKey id, Property *p) |
static int | virtualMetacall (Object *object, QMetaObject::Call call, int index, void **a) |
template<typename HeapObject> |
static bool | readReference (HeapObject *ref) |
template<typename HeapObject> |
static bool | writeBack (HeapObject *ref, int internalIndex=AllProperties) |
template<typename HeapObject> |
static HeapObject * | detached (HeapObject *ref) |
static ReturnedValue | getValue (const Value *thisObject, const Value &v, PropertyAttributes attrs) |
static ReturnedValue | getValueAccessor (const Value *thisObject, const Value &v, PropertyAttributes attrs) |
static ReturnedValue | checkedInstanceOf (ExecutionEngine *engine, const FunctionObject *typeObject, const Value &var) |
static QString | typeToString (Type) |
static constexpr Value | fromStaticValue (StaticValue staticValue) |
static constexpr Value | undefined () |
static Value | fromHeapObject (HeapBasePtr m) |
static bool | toBooleanImpl (Value val) |
static double | toNumberImpl (Value v) |
static Heap::String * | toString (ExecutionEngine *e, Value val) |
static Heap::Object * | toObject (ExecutionEngine *e, Value val) |
static constexpr Value | fromReturnedValue (ReturnedValue val) |
static double | toInteger (double d) |
static int | toInt32 (double d) |
static unsigned int | toUInt32 (double d) |
static constexpr Value | emptyValue () |
static constexpr Value | fromBoolean (bool b) |
static constexpr Value | fromInt32 (int i) |
static constexpr Value | undefinedValue () |
static constexpr Value | nullValue () |
static Value | fromDouble (double d) |
static Value | fromUInt32 (uint i) |
static int | valueOffset () |
static int | tagOffset () |
static constexpr quint64 | tagValue (quint32 tag, quint32 value) |
static constexpr quint64 | tagBitMask (TagBit bit) |
static bool | integerCompatible (StaticValue a, StaticValue b) |
static bool | bothDouble (StaticValue a, StaticValue b) |
static QV4_NEARLY_ALWAYS_INLINE bool | isInt32 (double d) |
static constexpr StaticValue | fromReturnedValue (ReturnedValue val) |
static constexpr StaticValue | emptyValue () |
static constexpr StaticValue | fromBoolean (bool b) |
static constexpr StaticValue | fromInt32 (int i) |
static constexpr StaticValue | undefinedValue () |
static constexpr StaticValue | nullValue () |
static StaticValue | fromDouble (double d) |
static StaticValue | fromUInt32 (uint i) |
static double | toInteger (double d) |
static int | toInt32 (double d) |
static unsigned int | toUInt32 (double d) |
|
enum | { NInlineProperties = 2
} |
enum | { IsObject = true
, GetterOffset = 0
, SetterOffset = 1
} |
enum | ThrowOnFailure { DoThrowOnRejection
, DoNotThrow
} |
enum | {
IsExecutionContext = false
, IsString = false
, IsStringOrSymbol = false
, IsObject = false
,
IsTailCallable = false
, IsErrorObject = false
, IsArrayData = false
} |
enum | { NInlineProperties = 0
} |
enum | Type {
Type_Invalid
, Type_String
, Type_Object
, Type_Symbol
,
Type_ArrayObject
, Type_FunctionObject
, Type_GeneratorObject
, Type_BooleanObject
,
Type_NumberObject
, Type_StringObject
, Type_SymbolObject
, Type_DateObject
,
Type_RegExpObject
, Type_ErrorObject
, Type_ArgumentsObject
, Type_JsonObject
,
Type_MathObject
, Type_ProxyObject
, Type_UrlObject
, Type_UrlSearchParamsObject
,
Type_ExecutionContext
, Type_InternalClass
, Type_SetIteratorObject
, Type_MapIteratorObject
,
Type_ArrayIteratorObject
, Type_StringIteratorObject
, Type_ForInIterator
, Type_RegExp
,
Type_V4Sequence
, Type_QmlListProperty
, Type_V4QObjectWrapper
, Type_QMLTypeWrapper
,
Type_V4ReferenceObject
, Type_QMLValueTypeWrapper
, Type_MemberData
, Type_ArrayData
,
Type_StringOrSymbol
} |
using | ManagedPtr = Managed * |
enum class | TagBit {
SpecialNegative = 0b10000000000000000000 << 12
, SpecialQNaN = 0b00000000000010000000 << 12
, Special = 0b00000000000001000000 << 12
, IntCompat = 0b00000000000000100000 << 12
,
Unmanaged = 0b00000000000000010000 << 12
, IntOrBool = 0b00000000000000001000 << 12
, Number = 0b00000000000000000100 << 12
} |
enum | Type {
Managed_Type = 0
, Double_Type = 1
, Undefined_Type = 2
, Empty_Type = quint32(TagBit::Unmanaged)
,
Null_Type = Empty_Type | quint32(TagBit::IntCompat)
, Boolean_Type = Null_Type | quint32(TagBit::IntOrBool)
, Integer_Type = Boolean_Type | quint32(TagBit::Number)
} |
enum | {
Tag_Shift = 32
, IsIntegerConvertible_Shift = 48
, IsIntegerConvertible_Value = 3
, IsIntegerOrBool_Shift = 47
,
IsIntegerOrBool_Value = 7
} |
enum class | QuickType : quint32 {
Managed = Managed_Type
, Empty = Empty_Type
, Null = Null_Type
, Boolean = Boolean_Type
,
Integer = Integer_Type
, PlusInf = quint32(TagBit::Number) | quint32(TagBit::Special) | quint32(TagBit::Unmanaged)
, MinusInf = PlusInf | quint32(TagBit::SpecialNegative)
, NaN = PlusInf | quint32(TagBit::SpecialQNaN)
,
MinusNaN = NaN | quint32(TagBit::SpecialNegative)
} |
enum | {
QT_Empty = Empty_Type
, QT_Null = Null_Type
, QT_Bool = Boolean_Type
, QT_Int = Integer_Type
,
QuickType_Shift = Tag_Shift
} |
using | HeapBasePtr = Heap::Base * |
using | ValueTypeInternal = QuickType |
quint64 | _val |
static constexpr const int | AllProperties = -1 |
static constexpr quint64 | ExponentMask = 0b0111111111110000ull << 48 |
static constexpr quint64 | Top1Mask = 0b1000000000000000ull << 48 |
static constexpr quint64 | Upper3Mask = 0b0000000000001110ull << 48 |
static constexpr quint64 | Lower5Mask = 0b0000000000011111ull |
static constexpr quint64 | ManagedMask = ExponentMask | quint64(TagBit::Unmanaged) << Tag_Shift |
static constexpr quint64 | DoubleMask = ManagedMask | quint64(TagBit::Special) << Tag_Shift |
static constexpr quint64 | NumberMask = ManagedMask | quint64(TagBit::Number) << Tag_Shift |
static constexpr quint64 | IntOrBoolMask = ManagedMask | quint64(TagBit::IntOrBool) << Tag_Shift |
static constexpr quint64 | IntCompatMask = ManagedMask | quint64(TagBit::IntCompat) << Tag_Shift |
static constexpr quint64 | EncodeMask = DoubleMask | NumberMask |
static constexpr quint64 | DoubleDiscriminator = ((quint64(TagBit::Unmanaged) | quint64(TagBit::Special)) << Tag_Shift) |
static constexpr quint64 | NumberDiscriminator = ((quint64(TagBit::Unmanaged) | quint64(TagBit::Number)) << Tag_Shift) |
static ReturnedValue | virtualGet (const Managed *m, PropertyKey id, const Value *receiver, bool *hasProperty) |
static bool | virtualPut (Managed *m, PropertyKey id, const Value &value, Value *receiver) |
static bool | virtualDeleteProperty (Managed *m, PropertyKey id) |
static bool | virtualHasProperty (const Managed *m, PropertyKey id) |
static PropertyAttributes | virtualGetOwnProperty (const Managed *m, PropertyKey id, Property *p) |
static bool | virtualDefineOwnProperty (Managed *m, PropertyKey id, const Property *p, PropertyAttributes attrs) |
static bool | virtualIsExtensible (const Managed *m) |
static bool | virtualPreventExtensions (Managed *) |
static Heap::Object * | virtualGetPrototypeOf (const Managed *) |
static bool | virtualSetPrototypeOf (Managed *, const Object *) |
static OwnPropertyKeyIterator * | virtualOwnPropertyKeys (const Object *m, Value *target) |
static qint64 | virtualGetLength (const Managed *m) |
static ReturnedValue | virtualInstanceOf (const Object *typeObject, const Value &var) |
static ReturnedValue | virtualResolveLookupGetter (const Object *object, ExecutionEngine *engine, Lookup *lookup) |
static bool | virtualResolveLookupSetter (Object *object, ExecutionEngine *engine, Lookup *lookup, const Value &value) |
static int | virtualMetacall (Object *object, QMetaObject::Call call, int index, void **a) |
static bool | virtualIsEqualTo (Managed *m, Managed *other) |
static constexpr VTable::Destroy | virtualDestroy = nullptr |
static constexpr VTable::IsEqualTo | virtualIsEqualTo = nullptr |
static constexpr VTable::Get | virtualGet = nullptr |
static constexpr VTable::Put | virtualPut = nullptr |
static constexpr VTable::DeleteProperty | virtualDeleteProperty = nullptr |
static constexpr VTable::HasProperty | virtualHasProperty = nullptr |
static constexpr VTable::GetOwnProperty | virtualGetOwnProperty = nullptr |
static constexpr VTable::DefineOwnProperty | virtualDefineOwnProperty = nullptr |
static constexpr VTable::IsExtensible | virtualIsExtensible = nullptr |
static constexpr VTable::PreventExtensions | virtualPreventExtensions = nullptr |
static constexpr VTable::GetPrototypeOf | virtualGetPrototypeOf = nullptr |
static constexpr VTable::SetPrototypeOf | virtualSetPrototypeOf = nullptr |
static constexpr VTable::GetLength | virtualGetLength = nullptr |
static constexpr VTable::OwnPropertyKeys | virtualOwnPropertyKeys = nullptr |
static constexpr VTable::InstanceOf | virtualInstanceOf = nullptr |
static constexpr VTable::Call | virtualCall = nullptr |
static constexpr VTable::CallAsConstructor | virtualCallAsConstructor = nullptr |
static constexpr VTable::CallWithMetaTypes | virtualCallWithMetaTypes = nullptr |
static constexpr VTable::CallWithMetaTypes | virtualConvertAndCall = nullptr |
static constexpr VTable::ResolveLookupGetter | virtualResolveLookupGetter = nullptr |
static constexpr VTable::ResolveLookupSetter | virtualResolveLookupSetter = nullptr |
static constexpr VTable::Metacall | virtualMetacall = nullptr |
A VariantAssociationObject stores the contents of a QVariantMap or QVariantHash and makes them acccessible to the JavaScript engine. It behaves mostly like a regular JavaScript object. The entries of the QVariantMap or QVariantHash are exposed as properties.
VariantAssociationObject is a ReferenceObject. Therefore it writes back its contents to the property it was retrieved from whenever it changes. It also re-reads the property whenever that one changes.
As long as a VariantAssociationObject is attached to a property this way, it is the responsibility of the property's surrounding (C++) object to keep the contents valid. It has to, for example, track pointers to QObjects potentially deleted in other places so that they don't become dangling.
However, the VariantAssociation can also be detached. This happens predominantly by assigning it to a QML-declared property. In that case, it becomes the VariantAssociationObject's responsibility to track its contents. To do so, it does not keep an actual QVariantMap or QVariantHash in this case, but rather stores its contents as actual JavaScript object properties. This includes QObjectWrappers for all QObject pointers it may contain. The contents are then marked like all JavaScript properties when the garbage collector runs, and QObjectWrapper also guards against external deletion. There is no property to read or write back in this case, and neither does the internal QVariantMap or QVariantHash need to be updated. Therefore, the objects stored in the individual properties are also created detached and won't read or write back.
Definition at line 104 of file qv4variantassociationobject_p.h.