|
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 |
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 |
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 Sequence stores the contents of a sequential container and makes them acccessible to the JavaScript engine. It behaves mostly like a regular JavaScript array. The entries of the container are exposed as array elements.
Sequence 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 Sequence 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 Sequence can also be detached. This happens predominantly by assigning it to a QML-declared property. In that case, it becomes the Sequence's responsibility to track its contents. To do so, it does not necessarily keep an actual instance of the original container in this case, but may rather stores its contents as actual JavaScript array elements. This includes QObjectWrappers for all QObject pointers it may contain. The contents are then marked like all JavaScript array elements 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 container need to be updated. Therefore, the objects stored as array elements are created detached and won't read or write back.
For element types that don't need to be marked, Sequence will still use the original container for storage, even in the detached case. This is usually more efficient because because it saves some data conversion. The only types that need to be marked are pointers to QObject-derived types, either stored as-is or hidden inside QVariant. Whenever the container cannot possibly hold such elements (directly or indirectly), the original container is used.
Definition at line 143 of file qv4sequenceobject_p.h.