aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/jsruntime/qv4argumentsobject.cpp6
-rw-r--r--src/qml/jsruntime/qv4argumentsobject_p.h6
-rw-r--r--src/qml/jsruntime/qv4arraydata.cpp52
-rw-r--r--src/qml/jsruntime/qv4arraydata_p.h89
-rw-r--r--src/qml/jsruntime/qv4arrayobject.cpp11
-rw-r--r--src/qml/jsruntime/qv4context.cpp2
-rw-r--r--src/qml/jsruntime/qv4context_p.h6
-rw-r--r--src/qml/jsruntime/qv4dataview.cpp2
-rw-r--r--src/qml/jsruntime/qv4dataview_p.h2
-rw-r--r--src/qml/jsruntime/qv4engine_p.h6
-rw-r--r--src/qml/jsruntime/qv4errorobject.cpp2
-rw-r--r--src/qml/jsruntime/qv4errorobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4functionobject.cpp6
-rw-r--r--src/qml/jsruntime/qv4functionobject_p.h6
-rw-r--r--src/qml/jsruntime/qv4global_p.h5
-rw-r--r--src/qml/jsruntime/qv4lookup.cpp8
-rw-r--r--src/qml/jsruntime/qv4managed.cpp2
-rw-r--r--src/qml/jsruntime/qv4managed_p.h24
-rw-r--r--src/qml/jsruntime/qv4memberdata.cpp10
-rw-r--r--src/qml/jsruntime/qv4memberdata_p.h25
-rw-r--r--src/qml/jsruntime/qv4mm.cpp4
-rw-r--r--src/qml/jsruntime/qv4object.cpp10
-rw-r--r--src/qml/jsruntime/qv4object_p.h22
-rw-r--r--src/qml/jsruntime/qv4objectiterator.cpp4
-rw-r--r--src/qml/jsruntime/qv4objectiterator_p.h2
-rw-r--r--src/qml/jsruntime/qv4qobjectwrapper.cpp2
-rw-r--r--src/qml/jsruntime/qv4qobjectwrapper_p.h2
-rw-r--r--src/qml/jsruntime/qv4regexp.cpp4
-rw-r--r--src/qml/jsruntime/qv4regexp_p.h4
-rw-r--r--src/qml/jsruntime/qv4regexpobject.cpp4
-rw-r--r--src/qml/jsruntime/qv4regexpobject_p.h4
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp2
-rw-r--r--src/qml/jsruntime/qv4scopedvalue_p.h8
-rw-r--r--src/qml/jsruntime/qv4script.cpp2
-rw-r--r--src/qml/jsruntime/qv4script_p.h2
-rw-r--r--src/qml/jsruntime/qv4sequenceobject.cpp4
-rw-r--r--src/qml/jsruntime/qv4string.cpp6
-rw-r--r--src/qml/jsruntime/qv4string_p.h4
-rw-r--r--src/qml/jsruntime/qv4stringobject.cpp2
-rw-r--r--src/qml/jsruntime/qv4stringobject_p.h2
-rw-r--r--src/qml/jsruntime/qv4typedarray.cpp2
-rw-r--r--src/qml/jsruntime/qv4typedarray_p.h2
-rw-r--r--src/qml/jsruntime/qv4value_inl_p.h4
-rw-r--r--src/qml/jsruntime/qv4value_p.h32
-rw-r--r--src/qml/qml/qqmlcomponent.cpp4
-rw-r--r--src/qml/qml/qqmlcontextwrapper.cpp4
-rw-r--r--src/qml/qml/qqmlcontextwrapper_p.h4
-rw-r--r--src/qml/qml/qqmllistwrapper.cpp2
-rw-r--r--src/qml/qml/qqmlxmlhttprequest.cpp2
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions.cpp2
-rw-r--r--src/qml/qml/v8/qqmlbuiltinfunctions_p.h2
-rw-r--r--src/qml/types/qqmldelegatemodel.cpp2
-rw-r--r--src/quick/items/context2d/qquickcontext2d.cpp4
-rw-r--r--src/quick/items/qquickview.cpp2
-rw-r--r--src/quick/items/qquickview_p.h2
55 files changed, 233 insertions, 203 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp
index c020e99cbb..209d99fea0 100644
--- a/src/qml/jsruntime/qv4argumentsobject.cpp
+++ b/src/qml/jsruntime/qv4argumentsobject.cpp
@@ -49,7 +49,7 @@ ArgumentsObject::Data::Data(CallContext *context)
Scope scope(v4);
Scoped<ArgumentsObject> args(scope, this);
- args->setArrayType(ArrayData::Complex);
+ args->setArrayType(Heap::ArrayData::Complex);
if (context->d()->strictMode) {
Q_ASSERT(CalleePropertyIndex == args->internalClass()->find(context->d()->engine->id_callee));
@@ -78,7 +78,7 @@ void ArgumentsObject::fullyCreate()
uint numAccessors = qMin((int)context()->d()->function->formalParameterCount(), context()->d()->realArgumentCount);
uint argCount = qMin(context()->d()->realArgumentCount, context()->d()->callData->argc);
- ArrayData::realloc(this, ArrayData::Sparse, argCount, true);
+ ArrayData::realloc(this, Heap::ArrayData::Sparse, argCount, true);
context()->d()->engine->requireArgumentsAccessors(numAccessors);
Scope scope(engine());
@@ -226,7 +226,7 @@ ReturnedValue ArgumentsSetterFunction::call(Managed *setter, CallData *callData)
return Encode::undefined();
}
-void ArgumentsObject::markObjects(HeapObject *that, ExecutionEngine *e)
+void ArgumentsObject::markObjects(Heap::Base *that, ExecutionEngine *e)
{
ArgumentsObject::Data *o = static_cast<ArgumentsObject::Data *>(that);
if (o->context)
diff --git a/src/qml/jsruntime/qv4argumentsobject_p.h b/src/qml/jsruntime/qv4argumentsobject_p.h
index d961d0881f..28b03c5cf9 100644
--- a/src/qml/jsruntime/qv4argumentsobject_p.h
+++ b/src/qml/jsruntime/qv4argumentsobject_p.h
@@ -82,14 +82,14 @@ struct ArgumentsObject: Object {
Data(CallContext *context);
CallContext *context;
bool fullyCreated;
- MemberData::Data *mappedArguments;
+ Heap::MemberData *mappedArguments;
};
V4_OBJECT(Object)
Q_MANAGED_TYPE(ArgumentsObject)
CallContext *context() const { return d()->context; }
bool fullyCreated() const { return d()->fullyCreated; }
- MemberData::Data *mappedArguments() { return d()->mappedArguments; }
+ Heap::MemberData *mappedArguments() { return d()->mappedArguments; }
static bool isNonStrictArgumentsObject(Managed *m) {
return m->internalClass()->vtable->type == Type_ArgumentsObject &&
@@ -106,7 +106,7 @@ struct ArgumentsObject: Object {
static void putIndexed(Managed *m, uint index, const ValueRef value);
static bool deleteIndexedProperty(Managed *m, uint index);
static PropertyAttributes queryIndexed(const Managed *m, uint index);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
void fullyCreate();
};
diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp
index 5aaed1a98d..d7af678402 100644
--- a/src/qml/jsruntime/qv4arraydata.cpp
+++ b/src/qml/jsruntime/qv4arraydata.cpp
@@ -57,7 +57,7 @@ const QV4::ManagedVTable QV4::ArrayData::static_vtbl = {
const ArrayVTable SimpleArrayData::static_vtbl =
{
DEFINE_MANAGED_VTABLE_INT(SimpleArrayData, 0),
- SimpleArrayData::Simple,
+ Heap::ArrayData::Simple,
SimpleArrayData::reallocate,
SimpleArrayData::get,
SimpleArrayData::put,
@@ -74,7 +74,7 @@ const ArrayVTable SimpleArrayData::static_vtbl =
const ArrayVTable SparseArrayData::static_vtbl =
{
DEFINE_MANAGED_VTABLE_INT(SparseArrayData, 0),
- ArrayData::Sparse,
+ Heap::ArrayData::Sparse,
SparseArrayData::reallocate,
SparseArrayData::get,
SparseArrayData::put,
@@ -88,8 +88,8 @@ const ArrayVTable SparseArrayData::static_vtbl =
SparseArrayData::length
};
-Q_STATIC_ASSERT(sizeof(ArrayData::Data) == sizeof(SimpleArrayData::Data));
-Q_STATIC_ASSERT(sizeof(ArrayData::Data) == sizeof(SparseArrayData::Data));
+Q_STATIC_ASSERT(sizeof(Heap::ArrayData) == sizeof(Heap::SimpleArrayData));
+Q_STATIC_ASSERT(sizeof(Heap::ArrayData) == sizeof(Heap::SparseArrayData));
void ArrayData::realloc(Object *o, Type newType, uint requested, bool enforceAttributes)
{
@@ -108,7 +108,7 @@ void ArrayData::realloc(Object *o, Type newType, uint requested, bool enforceAtt
if (alloc < d->alloc())
alloc = d->alloc();
- if (d->type() < Sparse) {
+ if (d->type() < Heap::ArrayData::Sparse) {
offset = static_cast<SimpleArrayData *>(d)->d()->offset;
toCopy = static_cast<SimpleArrayData *>(d)->len();
} else {
@@ -117,25 +117,25 @@ void ArrayData::realloc(Object *o, Type newType, uint requested, bool enforceAtt
if (d->type() > newType)
newType = d->type();
}
- if (enforceAttributes && newType == Simple)
- newType = Complex;
+ if (enforceAttributes && newType == Heap::ArrayData::Simple)
+ newType = Heap::ArrayData::Complex;
while (alloc < requested)
alloc *= 2;
- size_t size = sizeof(ArrayData::Data) + (alloc - 1)*sizeof(Value);
+ size_t size = sizeof(Heap::ArrayData) + (alloc - 1)*sizeof(Value);
if (enforceAttributes)
size += alloc*sizeof(PropertyAttributes);
ArrayData *newData;
- if (newType < Sparse) {
+ if (newType < Heap::ArrayData::Sparse) {
SimpleArrayData *n = static_cast<SimpleArrayData *>(o->engine()->memoryManager->allocManaged(size));
- new (n->d()) SimpleArrayData::Data(o->engine());
+ new (n->d()) Heap::SimpleArrayData(o->engine());
n->d()->offset = 0;
n->len() = d ? static_cast<SimpleArrayData *>(d)->len() : 0;
newData = n;
} else {
SparseArrayData *n = static_cast<SparseArrayData *>(o->engine()->memoryManager->allocManaged(size));
- new (n->d()) SparseArrayData::Data(o->engine());
+ new (n->d()) Heap::SparseArrayData(o->engine());
newData = n;
}
newData->setAlloc(alloc);
@@ -160,13 +160,13 @@ void ArrayData::realloc(Object *o, Type newType, uint requested, bool enforceAtt
memcpy(o->arrayData()->d()->arrayData, d->d()->arrayData + offset, sizeof(Value)*toCopy);
}
- if (newType != Sparse)
+ if (newType != Heap::ArrayData::Sparse)
return;
SparseArrayData *sparse = static_cast<SparseArrayData *>(o->arrayData());
uint *lastFree;
- if (d && d->type() == Sparse) {
+ if (d && d->type() == Heap::ArrayData::Sparse) {
SparseArrayData *old = static_cast<SparseArrayData *>(d);
sparse->setSparse(old->sparse());
old->setSparse(0);
@@ -200,7 +200,7 @@ void ArrayData::realloc(Object *o, Type newType, uint requested, bool enforceAtt
ArrayData *SimpleArrayData::reallocate(Object *o, uint n, bool enforceAttributes)
{
- realloc(o, Simple, n, enforceAttributes);
+ realloc(o, Heap::ArrayData::Simple, n, enforceAttributes);
return o->arrayData();
}
@@ -209,13 +209,13 @@ void ArrayData::ensureAttributes(Object *o)
if (o->arrayData() && o->arrayData()->attrs())
return;
- ArrayData::realloc(o, Simple, 0, true);
+ ArrayData::realloc(o, Heap::ArrayData::Simple, 0, true);
}
-void SimpleArrayData::markObjects(HeapObject *d, ExecutionEngine *e)
+void SimpleArrayData::markObjects(Heap::Base *d, ExecutionEngine *e)
{
- SimpleArrayData::Data *dd = static_cast<SimpleArrayData::Data *>(d);
+ Heap::SimpleArrayData *dd = static_cast<Heap::SimpleArrayData *>(d);
uint l = dd->len;
for (uint i = 0; i < l; ++i)
dd->arrayData[i].mark(e);
@@ -275,7 +275,7 @@ void SimpleArrayData::push_front(Object *o, Value *values, uint n)
SimpleArrayData *dd = static_cast<SimpleArrayData *>(o->arrayData());
Q_ASSERT(!dd->attrs());
if (dd->len() + n > dd->alloc()) {
- realloc(o, Simple, dd->len() + n, false);
+ realloc(o, Heap::ArrayData::Simple, dd->len() + n, false);
dd = static_cast<SimpleArrayData *>(o->arrayData());
}
dd->d()->offset = (dd->d()->offset - n) % dd->d()->alloc;
@@ -338,7 +338,7 @@ bool SimpleArrayData::putArray(Object *o, uint index, Value *values, uint n)
void SparseArrayData::free(ArrayData *d, uint idx)
{
- Q_ASSERT(d && d->type() == ArrayData::Sparse);
+ Q_ASSERT(d && d->type() == Heap::ArrayData::Sparse);
SparseArrayData *dd = static_cast<SparseArrayData *>(d);
Value *v = dd->arrayData() + idx;
if (dd->attrs() && dd->attrs()[idx].isAccessor()) {
@@ -363,9 +363,9 @@ void SparseArrayData::destroy(Managed *d)
delete dd->sparse();
}
-void SparseArrayData::markObjects(HeapObject *d, ExecutionEngine *e)
+void SparseArrayData::markObjects(Heap::Base *d, ExecutionEngine *e)
{
- SparseArrayData::Data *dd = static_cast<SparseArrayData::Data *>(d);
+ Heap::SparseArrayData *dd = static_cast<Heap::SparseArrayData *>(d);
uint l = dd->alloc;
for (uint i = 0; i < l; ++i)
dd->arrayData[i].mark(e);
@@ -373,14 +373,14 @@ void SparseArrayData::markObjects(HeapObject *d, ExecutionEngine *e)
ArrayData *SparseArrayData::reallocate(Object *o, uint n, bool enforceAttributes)
{
- realloc(o, Sparse, n, enforceAttributes);
+ realloc(o, Heap::ArrayData::Sparse, n, enforceAttributes);
return o->arrayData();
}
// double slots are required for accessor properties
uint SparseArrayData::allocate(Object *o, bool doubleSlot)
{
- Q_ASSERT(o->arrayData()->type() == ArrayData::Sparse);
+ Q_ASSERT(o->arrayData()->type() == Heap::ArrayData::Sparse);
SparseArrayData *dd = static_cast<SparseArrayData *>(o->arrayData());
if (doubleSlot) {
uint *last = &dd->freeList();
@@ -618,7 +618,7 @@ uint ArrayData::append(Object *obj, ArrayObject *otherObj, uint n)
Property *ArrayData::insert(Object *o, uint index, bool isAccessor)
{
- if (!isAccessor && o->arrayData()->type() != ArrayData::Sparse) {
+ if (!isAccessor && o->arrayData()->type() != Heap::ArrayData::Sparse) {
SimpleArrayData *d = static_cast<SimpleArrayData *>(o->arrayData());
if (index < 0x1000 || index < d->len() + (d->len() >> 2)) {
if (index >= o->arrayData()->alloc()) {
@@ -754,7 +754,7 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
// The spec says the sorting goes through a series of get,put and delete operations.
// this implies that the attributes don't get sorted around.
- if (thisObject->arrayData()->type() == ArrayData::Sparse) {
+ if (thisObject->arrayData()->type() == Heap::ArrayData::Sparse) {
// since we sort anyway, we can simply iterate over the entries in the sparse
// array and append them one by one to a regular one.
SparseArrayData *sparse = static_cast<SparseArrayData *>(thisObject->arrayData());
@@ -763,7 +763,7 @@ void ArrayData::sort(ExecutionContext *context, Object *thisObject, const ValueR
return;
thisObject->setArrayData(0);
- ArrayData::realloc(thisObject, ArrayData::Simple, sparse->sparse()->nEntries(), sparse->attrs() ? true : false);
+ ArrayData::realloc(thisObject, Heap::ArrayData::Simple, sparse->sparse()->nEntries(), sparse->attrs() ? true : false);
SimpleArrayData *d = static_cast<SimpleArrayData *>(thisObject->arrayData());
SparseArrayNode *n = sparse->sparse()->begin();
diff --git a/src/qml/jsruntime/qv4arraydata_p.h b/src/qml/jsruntime/qv4arraydata_p.h
index 5286be875b..10997a8e55 100644
--- a/src/qml/jsruntime/qv4arraydata_p.h
+++ b/src/qml/jsruntime/qv4arraydata_p.h
@@ -42,7 +42,7 @@ QT_BEGIN_NAMESPACE
namespace QV4 {
-#define V4_ARRAYDATA \
+#define V4_ARRAYDATA(Data) \
public: \
Q_MANAGED_CHECK \
static const QV4::ArrayVTable static_vtbl; \
@@ -50,8 +50,8 @@ namespace QV4 {
template <typename T> \
QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \
V4_MANAGED_SIZE_TEST \
- const Data *d() const { return &static_cast<const Data &>(Managed::data); } \
- Data *d() { return &static_cast<Data &>(Managed::data); }
+ const QV4::Heap::Data *d() const { return &static_cast<const QV4::Heap::Data &>(Managed::data); } \
+ QV4::Heap::Data *d() { return &static_cast<QV4::Heap::Data &>(Managed::data); }
struct ArrayData;
@@ -73,9 +73,12 @@ struct ArrayVTable
uint (*length)(const ArrayData *d);
};
+namespace Heap {
-struct Q_QML_EXPORT ArrayData : public Managed
-{
+struct ArrayData : public Base {
+ ArrayData(InternalClass *ic)
+ : Base(ic)
+ {}
enum Type {
Simple = 0,
Complex = 1,
@@ -83,24 +86,36 @@ struct Q_QML_EXPORT ArrayData : public Managed
Custom = 3
};
- struct Data : public Managed::Data {
- Data(InternalClass *ic)
- : Managed::Data(ic)
- {}
- uint alloc;
- Type type;
- PropertyAttributes *attrs;
- union {
- uint len;
- uint freeList;
- };
- union {
- uint offset;
- SparseArray *sparse;
- };
- Value arrayData[1];
+ uint alloc;
+ Type type;
+ PropertyAttributes *attrs;
+ union {
+ uint len;
+ uint freeList;
+ };
+ union {
+ uint offset;
+ SparseArray *sparse;
};
- V4_MANAGED(Managed)
+ Value arrayData[1];
+};
+
+struct SimpleArrayData : public ArrayData {
+ SimpleArrayData(ExecutionEngine *engine)
+ : ArrayData(engine->simpleArrayDataClass)
+ {}
+};
+
+struct SparseArrayData : public ArrayData {
+ inline SparseArrayData(ExecutionEngine *engine);
+};
+
+}
+
+struct Q_QML_EXPORT ArrayData : public Managed
+{
+ typedef Heap::ArrayData::Type Type;
+ V4_MANAGED2(ArrayData, Managed)
uint alloc() const { return d()->alloc; }
uint &alloc() { return d()->alloc; }
@@ -113,7 +128,7 @@ struct Q_QML_EXPORT ArrayData : public Managed
Value *arrayData() { return &d()->arrayData[0]; }
const ArrayVTable *vtable() const { return reinterpret_cast<const ArrayVTable *>(internalClass()->vtable); }
- bool isSparse() const { return type() == Sparse; }
+ bool isSparse() const { return type() == Heap::ArrayData::Sparse; }
uint length() const {
return vtable()->length(this);
@@ -146,13 +161,7 @@ struct Q_QML_EXPORT ArrayData : public Managed
struct Q_QML_EXPORT SimpleArrayData : public ArrayData
{
-
- struct Data : public ArrayData::Data {
- Data(ExecutionEngine *engine)
- : ArrayData::Data(engine->simpleArrayDataClass)
- {}
- };
- V4_ARRAYDATA
+ V4_ARRAYDATA(SimpleArrayData)
uint mappedIndex(uint index) const { return (index + d()->offset) % d()->alloc; }
Value data(uint index) const { return d()->arrayData[mappedIndex(index)]; }
@@ -172,7 +181,7 @@ struct Q_QML_EXPORT SimpleArrayData : public ArrayData
static ArrayData *reallocate(Object *o, uint n, bool enforceAttributes);
- static void markObjects(HeapObject *d, ExecutionEngine *e);
+ static void markObjects(Heap::Base *d, ExecutionEngine *e);
static ReturnedValue get(const ArrayData *d, uint index);
static bool put(Object *o, uint index, ValueRef value);
@@ -188,12 +197,7 @@ struct Q_QML_EXPORT SimpleArrayData : public ArrayData
struct Q_QML_EXPORT SparseArrayData : public ArrayData
{
- struct Data : public ArrayData::Data {
- Data(ExecutionEngine *engine)
- : ArrayData::Data(engine->emptyClass)
- { setVTable(staticVTable()); }
- };
- V4_ARRAYDATA
+ V4_ARRAYDATA(SparseArrayData)
uint &freeList() { return d()->freeList; }
uint freeList() const { return d()->freeList; }
@@ -218,7 +222,7 @@ struct Q_QML_EXPORT SparseArrayData : public ArrayData
}
static void destroy(Managed *d);
- static void markObjects(HeapObject *d, ExecutionEngine *e);
+ static void markObjects(Heap::Base *d, ExecutionEngine *e);
static ArrayData *reallocate(Object *o, uint n, bool enforceAttributes);
static ReturnedValue get(const ArrayData *d, uint index);
@@ -233,10 +237,17 @@ struct Q_QML_EXPORT SparseArrayData : public ArrayData
static uint length(const ArrayData *d);
};
+namespace Heap {
+inline SparseArrayData::SparseArrayData(ExecutionEngine *engine)
+ : ArrayData(engine->emptyClass)
+{
+ setVTable(QV4::SparseArrayData::staticVTable());
+}
+}
inline Property *ArrayData::getProperty(uint index)
{
- if (type() != Sparse) {
+ if (type() != Heap::ArrayData::Sparse) {
SimpleArrayData *that = static_cast<SimpleArrayData *>(this);
return that->getProperty(index);
} else {
diff --git a/src/qml/jsruntime/qv4arrayobject.cpp b/src/qml/jsruntime/qv4arrayobject.cpp
index bbc0867c22..59d0c35be3 100644
--- a/src/qml/jsruntime/qv4arrayobject.cpp
+++ b/src/qml/jsruntime/qv4arrayobject.cpp
@@ -293,7 +293,7 @@ ReturnedValue ArrayPrototype::method_push(CallContext *ctx)
if (!ctx->d()->callData->argc) {
;
- } else if (!instance->protoHasArray() && instance->arrayData()->length() <= len && instance->arrayType() == ArrayData::Simple) {
+ } else if (!instance->protoHasArray() && instance->arrayData()->length() <= len && instance->arrayType() == Heap::ArrayData::Simple) {
instance->arrayData()->vtable()->putArray(instance.getPointer(), len, ctx->d()->callData->args, ctx->d()->callData->argc);
len = instance->arrayData()->length();
} else {
@@ -361,7 +361,7 @@ ReturnedValue ArrayPrototype::method_shift(CallContext *ctx)
ScopedValue result(scope);
- if (!instance->protoHasArray() && !instance->arrayData()->hasAttributes() && instance->arrayData()->length() <= len && instance->arrayData()->type() != ArrayData::Custom) {
+ if (!instance->protoHasArray() && !instance->arrayData()->hasAttributes() && instance->arrayData()->length() <= len && instance->arrayData()->type() != Heap::ArrayData::Custom) {
result = instance->arrayData()->vtable()->pop_front(instance.getPointer());
} else {
result = instance->getIndexed(0);
@@ -541,7 +541,8 @@ ReturnedValue ArrayPrototype::method_unshift(CallContext *ctx)
uint len = instance->getLength();
- if (!instance->protoHasArray() && !instance->arrayData()->hasAttributes() && instance->arrayData()->length() <= len && instance->arrayData()->type() != ArrayData::Custom) {
+ if (!instance->protoHasArray() && !instance->arrayData()->hasAttributes() && instance->arrayData()->length() <= len &&
+ instance->arrayData()->type() != Heap::ArrayData::Custom) {
instance->arrayData()->vtable()->push_front(instance.getPointer(), ctx->d()->callData->args, ctx->d()->callData->argc);
} else {
ScopedValue v(scope);
@@ -604,7 +605,7 @@ ReturnedValue ArrayPrototype::method_indexOf(CallContext *ctx)
ScopedValue value(scope);
- if (instance->hasAccessorProperty() || (instance->arrayType() >= ArrayData::Sparse) || instance->protoHasArray()) {
+ if (instance->hasAccessorProperty() || (instance->arrayType() >= Heap::ArrayData::Sparse) || instance->protoHasArray()) {
// lets be safe and slow
for (uint i = fromIndex; i < len; ++i) {
bool exists;
@@ -617,7 +618,7 @@ ReturnedValue ArrayPrototype::method_indexOf(CallContext *ctx)
} else if (!instance->arrayData()) {
return Encode(-1);
} else {
- Q_ASSERT(instance->arrayType() == ArrayData::Simple || instance->arrayType() == ArrayData::Complex);
+ Q_ASSERT(instance->arrayType() == Heap::ArrayData::Simple || instance->arrayType() == Heap::ArrayData::Complex);
SimpleArrayData *sa = static_cast<SimpleArrayData *>(instance->arrayData());
if (len > sa->len())
len = sa->len();
diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp
index 2dc8e8b608..2863068d41 100644
--- a/src/qml/jsruntime/qv4context.cpp
+++ b/src/qml/jsruntime/qv4context.cpp
@@ -246,7 +246,7 @@ bool CallContext::needsOwnArguments() const
return d()->function->needsActivation() || d()->callData->argc < static_cast<int>(d()->function->formalParameterCount());
}
-void ExecutionContext::markObjects(HeapObject *m, ExecutionEngine *engine)
+void ExecutionContext::markObjects(Heap::Base *m, ExecutionEngine *engine)
{
ExecutionContext::Data *ctx = static_cast<ExecutionContext::Data *>(m);
diff --git a/src/qml/jsruntime/qv4context_p.h b/src/qml/jsruntime/qv4context_p.h
index a942c12f6c..e45e82fda2 100644
--- a/src/qml/jsruntime/qv4context_p.h
+++ b/src/qml/jsruntime/qv4context_p.h
@@ -71,9 +71,9 @@ struct Q_QML_EXPORT ExecutionContext : public Managed
EvalCode *next;
};
- struct Data : Managed::Data {
+ struct Data : Heap::Base {
Data(ExecutionEngine *engine, ContextType t)
- : Managed::Data(engine->executionContextClass)
+ : Heap::Base(engine->executionContextClass)
, type(t)
, strictMode(false)
, engine(engine)
@@ -137,7 +137,7 @@ struct Q_QML_EXPORT ExecutionContext : public Managed
inline CallContext *asCallContext();
inline const CallContext *asCallContext() const;
- static void markObjects(HeapObject *m, ExecutionEngine *e);
+ static void markObjects(Heap::Base *m, ExecutionEngine *e);
};
struct CallContext : public ExecutionContext
diff --git a/src/qml/jsruntime/qv4dataview.cpp b/src/qml/jsruntime/qv4dataview.cpp
index 11cb04e22f..4d7e065580 100644
--- a/src/qml/jsruntime/qv4dataview.cpp
+++ b/src/qml/jsruntime/qv4dataview.cpp
@@ -85,7 +85,7 @@ DataView::Data::Data(ExecutionEngine *e)
}
-void DataView::markObjects(HeapObject *that, ExecutionEngine *e)
+void DataView::markObjects(Heap::Base *that, ExecutionEngine *e)
{
DataView::Data *v = static_cast<DataView::Data *>(that);
v->buffer->mark(e);
diff --git a/src/qml/jsruntime/qv4dataview_p.h b/src/qml/jsruntime/qv4dataview_p.h
index b1c2e361f4..e1a8aa79d9 100644
--- a/src/qml/jsruntime/qv4dataview_p.h
+++ b/src/qml/jsruntime/qv4dataview_p.h
@@ -64,7 +64,7 @@ struct DataView : Object
};
V4_OBJECT(Object)
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
struct DataViewPrototype: Object
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index ff9d2cc181..fea731ae48 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -151,11 +151,11 @@ public:
jsStackTop -= nValues;
}
- void pushForGC(HeapObject *m) {
+ void pushForGC(Heap::Base *m) {
*jsStackTop = Value::fromHeapObject(m);
++jsStackTop;
}
- HeapObject *popForGC() {
+ Heap::Base *popForGC() {
--jsStackTop;
return jsStackTop->heapObject();
}
@@ -398,7 +398,7 @@ void Managed::mark(QV4::ExecutionEngine *engine)
inline
-void HeapObject::mark(QV4::ExecutionEngine *engine)
+void Heap::Base::mark(QV4::ExecutionEngine *engine)
{
Q_ASSERT(inUse);
if (markBit)
diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp
index ef664f2830..f0c151a644 100644
--- a/src/qml/jsruntime/qv4errorobject.cpp
+++ b/src/qml/jsruntime/qv4errorobject.cpp
@@ -170,7 +170,7 @@ ReturnedValue ErrorObject::method_get_stack(CallContext *ctx)
return This->d()->stack->asReturnedValue();
}
-void ErrorObject::markObjects(HeapObject *that, ExecutionEngine *e)
+void ErrorObject::markObjects(Heap::Base *that, ExecutionEngine *e)
{
ErrorObject::Data *This = static_cast<ErrorObject::Data *>(that);
if (This->stack)
diff --git a/src/qml/jsruntime/qv4errorobject_p.h b/src/qml/jsruntime/qv4errorobject_p.h
index ffbdafcc43..359395ed72 100644
--- a/src/qml/jsruntime/qv4errorobject_p.h
+++ b/src/qml/jsruntime/qv4errorobject_p.h
@@ -70,7 +70,7 @@ struct ErrorObject: Object {
SyntaxErrorObject *asSyntaxError();
static ReturnedValue method_get_stack(CallContext *ctx);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
static void destroy(Managed *that) { static_cast<ErrorObject *>(that)->d()->~Data(); }
};
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp
index 7c93cab0ca..216f732231 100644
--- a/src/qml/jsruntime/qv4functionobject.cpp
+++ b/src/qml/jsruntime/qv4functionobject.cpp
@@ -155,7 +155,7 @@ ReturnedValue FunctionObject::call(Managed *, CallData *)
return Encode::undefined();
}
-void FunctionObject::markObjects(HeapObject *that, ExecutionEngine *e)
+void FunctionObject::markObjects(Heap::Base *that, ExecutionEngine *e)
{
FunctionObject::Data *o = static_cast<FunctionObject::Data *>(that);
if (o->scope)
@@ -293,7 +293,7 @@ ReturnedValue FunctionPrototype::method_apply(CallContext *ctx)
ScopedCallData callData(scope, len);
if (len) {
- if (arr->arrayType() != ArrayData::Simple || arr->protoHasArray() || arr->hasAccessorProperty()) {
+ if (arr->arrayType() != Heap::ArrayData::Simple || arr->protoHasArray() || arr->hasAccessorProperty()) {
for (quint32 i = 0; i < len; ++i)
callData->args[i] = arr->getIndexed(i);
} else {
@@ -649,7 +649,7 @@ ReturnedValue BoundFunction::construct(Managed *that, CallData *dd)
return f->target()->construct(callData);
}
-void BoundFunction::markObjects(HeapObject *that, ExecutionEngine *e)
+void BoundFunction::markObjects(Heap::Base *that, ExecutionEngine *e)
{
BoundFunction::Data *o = static_cast<BoundFunction::Data *>(that);
o->target->mark(e);
diff --git a/src/qml/jsruntime/qv4functionobject_p.h b/src/qml/jsruntime/qv4functionobject_p.h
index 07a8c45aed..58b957125e 100644
--- a/src/qml/jsruntime/qv4functionobject_p.h
+++ b/src/qml/jsruntime/qv4functionobject_p.h
@@ -102,7 +102,7 @@ struct Q_QML_EXPORT FunctionObject: Object {
bool strictMode() const { return d()->strictMode; }
bool bindingKeyFlag() const { return d()->bindingKeyFlag; }
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
template<>
@@ -205,7 +205,7 @@ struct BoundFunction: FunctionObject {
Data(ExecutionContext *scope, FunctionObject *target, const ValueRef boundThis, MemberData *boundArgs);
FunctionObject *target;
Value boundThis;
- MemberData::Data *boundArgs;
+ Heap::MemberData *boundArgs;
};
V4_OBJECT(FunctionObject)
@@ -222,7 +222,7 @@ struct BoundFunction: FunctionObject {
static ReturnedValue construct(Managed *, CallData *d);
static ReturnedValue call(Managed *that, CallData *dd);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
}
diff --git a/src/qml/jsruntime/qv4global_p.h b/src/qml/jsruntime/qv4global_p.h
index 71f217395b..b1e1f3ada6 100644
--- a/src/qml/jsruntime/qv4global_p.h
+++ b/src/qml/jsruntime/qv4global_p.h
@@ -114,6 +114,10 @@ QT_BEGIN_NAMESPACE
namespace QV4 {
+namespace Heap {
+ struct Base;
+}
+
class MemoryManager;
struct String;
struct Object;
@@ -127,7 +131,6 @@ struct InternalClass;
struct Property;
struct Value;
struct Lookup;
-struct HeapObject;
struct ArrayData;
struct ManagedVTable;
diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp
index 9d4649b287..d14898d8f7 100644
--- a/src/qml/jsruntime/qv4lookup.cpp
+++ b/src/qml/jsruntime/qv4lookup.cpp
@@ -163,7 +163,7 @@ ReturnedValue Lookup::indexedGetterObjectInt(Lookup *l, const ValueRef object, c
return indexedGetterGeneric(l, object, index);
Object *o = object->objectValue();
- if (o->arrayData() && o->arrayData()->type() == ArrayData::Simple) {
+ if (o->arrayData() && o->arrayData()->type() == Heap::ArrayData::Simple) {
SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
if (idx < s->len())
if (!s->data(idx).isEmpty())
@@ -177,7 +177,7 @@ void Lookup::indexedSetterGeneric(Lookup *l, const ValueRef object, const ValueR
{
if (object->isObject()) {
Object *o = object->objectValue();
- if (o->arrayData() && o->arrayData()->type() == ArrayData::Simple && index->asArrayIndex() < UINT_MAX) {
+ if (o->arrayData() && o->arrayData()->type() == Heap::ArrayData::Simple && index->asArrayIndex() < UINT_MAX) {
l->indexedSetter = indexedSetterObjectInt;
indexedSetterObjectInt(l, object, index, v);
return;
@@ -196,7 +196,7 @@ void Lookup::indexedSetterFallback(Lookup *l, const ValueRef object, const Value
uint idx = index->asArrayIndex();
if (idx < UINT_MAX) {
- if (o->arrayData() && o->arrayData()->type() == ArrayData::Simple) {
+ if (o->arrayData() && o->arrayData()->type() == Heap::ArrayData::Simple) {
SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
if (idx < s->len() && !s->data(idx).isEmpty()) {
s->data(idx) = value;
@@ -220,7 +220,7 @@ void Lookup::indexedSetterObjectInt(Lookup *l, const ValueRef object, const Valu
}
Object *o = object->objectValue();
- if (o->arrayData() && o->arrayData()->type() == ArrayData::Simple) {
+ if (o->arrayData() && o->arrayData()->type() == Heap::ArrayData::Simple) {
SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
if (idx < s->len() && !s->data(idx).isEmpty()) {
s->data(idx) = v;
diff --git a/src/qml/jsruntime/qv4managed.cpp b/src/qml/jsruntime/qv4managed.cpp
index 93286b3945..acaebdfc75 100644
--- a/src/qml/jsruntime/qv4managed.cpp
+++ b/src/qml/jsruntime/qv4managed.cpp
@@ -157,7 +157,7 @@ void Managed::setVTable(const ManagedVTable *vt)
d()->internalClass = internalClass()->changeVTable(vt);
}
-void HeapObject::setVTable(const ManagedVTable *vt)
+void Heap::Base::setVTable(const ManagedVTable *vt)
{
Q_ASSERT(internalClass);
internalClass = internalClass->changeVTable(vt);
diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h
index 91dc0fb034..cc7ce9d6b9 100644
--- a/src/qml/jsruntime/qv4managed_p.h
+++ b/src/qml/jsruntime/qv4managed_p.h
@@ -69,6 +69,18 @@ inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {}
const Data *d() const { return &static_cast<const Data &>(Managed::data); } \
Data *d() { return &static_cast<Data &>(Managed::data); }
+#define V4_MANAGED2(Data, superClass) \
+ public: \
+ Q_MANAGED_CHECK \
+ typedef superClass SuperClass; \
+ static const QV4::ManagedVTable static_vtbl; \
+ static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl; } \
+ template <typename _T> \
+ QV4::Returned<_T> *asReturned() { return QV4::Returned<_T>::create(this); } \
+ V4_MANAGED_SIZE_TEST \
+ const QV4::Heap::Data *d() const { return &static_cast<const QV4::Heap::Data &>(Managed::data); } \
+ QV4::Heap::Data *d() { return &static_cast<QV4::Heap::Data &>(Managed::data); }
+
#define V4_OBJECT(superClass) \
public: \
Q_MANAGED_CHECK \
@@ -110,7 +122,7 @@ struct ManagedVTable
uint type : 8;
const char *className;
void (*destroy)(Managed *);
- void (*markObjects)(HeapObject *, ExecutionEngine *e);
+ void (*markObjects)(Heap::Base *, ExecutionEngine *e);
bool (*isEqualTo)(Managed *m, Managed *other);
};
@@ -176,14 +188,8 @@ const QV4::ObjectVTable classname::static_vtbl = \
struct Q_QML_PRIVATE_EXPORT Managed
{
- struct Q_QML_PRIVATE_EXPORT Data : HeapObject {
- Data() : HeapObject(0) {}
- Data(InternalClass *internal)
- : HeapObject(internal)
- {}
- };
- Data data;
- V4_MANAGED(Managed)
+ Heap::Base data;
+ V4_MANAGED2(Base, Managed)
enum {
IsExecutionContext = false,
IsString = false,
diff --git a/src/qml/jsruntime/qv4memberdata.cpp b/src/qml/jsruntime/qv4memberdata.cpp
index bf07a74b96..fe670992d2 100644
--- a/src/qml/jsruntime/qv4memberdata.cpp
+++ b/src/qml/jsruntime/qv4memberdata.cpp
@@ -38,24 +38,24 @@ using namespace QV4;
DEFINE_MANAGED_VTABLE(MemberData);
-void MemberData::markObjects(HeapObject *that, ExecutionEngine *e)
+void MemberData::markObjects(Heap::Base *that, ExecutionEngine *e)
{
- MemberData::Data *m = static_cast<MemberData::Data *>(that);
+ Heap::MemberData *m = static_cast<Heap::MemberData *>(that);
for (uint i = 0; i < m->size; ++i)
m->data[i].mark(e);
}
-MemberData::Data *MemberData::reallocate(ExecutionEngine *e, Data *old, uint idx)
+Heap::MemberData *MemberData::reallocate(ExecutionEngine *e, Heap::MemberData *old, uint idx)
{
uint s = old ? old->size : 0;
if (idx < s)
return old;
int newAlloc = qMax((uint)4, 2*idx);
- uint alloc = sizeof(Data) + (newAlloc)*sizeof(Value);
+ uint alloc = sizeof(Heap::MemberData) + (newAlloc)*sizeof(Value);
MemberData *newMemberData = static_cast<MemberData *>(e->memoryManager->allocManaged(alloc));
if (old)
- memcpy(newMemberData, old, sizeof(MemberData::Data) + s*sizeof(Value));
+ memcpy(newMemberData, old, sizeof(Heap::MemberData) + s*sizeof(Value));
else
new (newMemberData) MemberData(e->memberDataClass);
newMemberData->d()->size = newAlloc;
diff --git a/src/qml/jsruntime/qv4memberdata_p.h b/src/qml/jsruntime/qv4memberdata_p.h
index 0177601b9f..c3c95079dd 100644
--- a/src/qml/jsruntime/qv4memberdata_p.h
+++ b/src/qml/jsruntime/qv4memberdata_p.h
@@ -40,16 +40,21 @@ QT_BEGIN_NAMESPACE
namespace QV4 {
+namespace Heap {
+
+struct MemberData : Base {
+ union {
+ uint size;
+ double _dummy;
+ };
+ Value data[1];
+};
+
+}
+
struct MemberData : Managed
{
- struct Data : Managed::Data {
- union {
- uint size;
- double _dummy;
- };
- Value data[1];
- };
- V4_MANAGED(Managed)
+ V4_MANAGED2(MemberData, Managed)
MemberData(QV4::InternalClass *ic) : Managed(ic) {}
Value &operator[] (uint idx) { return d()->data[idx]; }
@@ -57,9 +62,9 @@ struct MemberData : Managed
Value *data() { return d()->data; }
inline uint size() const { return d()->size; }
- static MemberData::Data *reallocate(QV4::ExecutionEngine *e, MemberData::Data *old, uint idx);
+ static Heap::MemberData *reallocate(QV4::ExecutionEngine *e, Heap::MemberData *old, uint idx);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
}
diff --git a/src/qml/jsruntime/qv4mm.cpp b/src/qml/jsruntime/qv4mm.cpp
index df439e1c5e..2e15c249ca 100644
--- a/src/qml/jsruntime/qv4mm.cpp
+++ b/src/qml/jsruntime/qv4mm.cpp
@@ -264,7 +264,7 @@ Managed *MemoryManager::allocData(std::size_t size)
static void drainMarkStack(QV4::ExecutionEngine *engine, Value *markBase)
{
while (engine->jsStackTop > markBase) {
- HeapObject *h = engine->popForGC();
+ Heap::Base *h = engine->popForGC();
Q_ASSERT (h->internalClass->vtable->markObjects);
h->internalClass->vtable->markObjects(h, engine);
}
@@ -492,7 +492,7 @@ size_t MemoryManager::getUsedMem() const
char *chunkStart = reinterpret_cast<char *>(i->memory.base());
char *chunkEnd = chunkStart + i->memory.size() - i->chunkSize;
for (char *chunk = chunkStart; chunk <= chunkEnd; chunk += i->chunkSize) {
- Managed::Data *m = reinterpret_cast<Managed::Data *>(chunk);
+ Heap::Base *m = reinterpret_cast<Heap::Base *>(chunk);
Q_ASSERT((qintptr) chunk % 16 == 0);
if (m->inUse)
usedMem += i->chunkSize;
diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp
index f8b0c9f0a0..0859537c58 100644
--- a/src/qml/jsruntime/qv4object.cpp
+++ b/src/qml/jsruntime/qv4object.cpp
@@ -50,7 +50,7 @@ using namespace QV4;
DEFINE_OBJECT_VTABLE(Object);
Object::Data::Data(InternalClass *internalClass)
- : Managed::Data(internalClass)
+ : Heap::Base(internalClass)
{
if (internalClass->size) {
Scope scope(internalClass->engine);
@@ -178,7 +178,7 @@ void Object::defineReadonlyProperty(String *name, ValueRef value)
insertMember(name, value, Attr_ReadOnly);
}
-void Object::markObjects(HeapObject *that, ExecutionEngine *e)
+void Object::markObjects(Heap::Base *that, ExecutionEngine *e)
{
Object::Data *o = static_cast<Object::Data *>(that);
@@ -1072,7 +1072,7 @@ void Object::copyArrayData(Object *other)
} else {
Q_ASSERT(!arrayData() && other->arrayData());
ArrayData::realloc(this, other->arrayData()->type(), other->arrayData()->alloc(), false);
- if (other->arrayType() == ArrayData::Sparse) {
+ if (other->arrayType() == Heap::ArrayData::Sparse) {
SparseArrayData *od = static_cast<SparseArrayData *>(other->arrayData());
SparseArrayData *dd = static_cast<SparseArrayData *>(arrayData());
dd->setSparse(new SparseArray(*od->sparse()));
@@ -1120,10 +1120,10 @@ bool Object::setArrayLength(uint newLen)
void Object::initSparseArray()
{
- if (arrayType() == ArrayData::Sparse)
+ if (arrayType() == Heap::ArrayData::Sparse)
return;
- ArrayData::realloc(this, ArrayData::Sparse, 0, false);
+ ArrayData::realloc(this, Heap::ArrayData::Sparse, 0, false);
}
diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h
index 7347232857..ac3490c3f6 100644
--- a/src/qml/jsruntime/qv4object_p.h
+++ b/src/qml/jsruntime/qv4object_p.h
@@ -42,15 +42,15 @@ QT_BEGIN_NAMESPACE
namespace QV4 {
struct Q_QML_EXPORT Object: Managed {
- struct Data : Managed::Data {
+ struct Data : Heap::Base {
Data(ExecutionEngine *engine)
- : Managed::Data(engine->objectClass)
+ : Heap::Base(engine->objectClass)
{
}
Data(InternalClass *internal = 0);
- MemberData::Data *memberData;
- ArrayData::Data *arrayData;
+ Heap::MemberData *memberData;
+ Heap::ArrayData *arrayData;
};
V4_OBJECT(Object)
Q_MANAGED_TYPE(Object)
@@ -164,30 +164,30 @@ public:
void push_back(const ValueRef v);
ArrayData::Type arrayType() const {
- return arrayData() ? arrayData()->type() : ArrayData::Simple;
+ return arrayData() ? arrayData()->type() : Heap::ArrayData::Simple;
}
// ### remove me
void setArrayType(ArrayData::Type t) {
- Q_ASSERT(t != ArrayData::Simple && t != ArrayData::Sparse);
+ Q_ASSERT(t != Heap::ArrayData::Simple && t != Heap::ArrayData::Sparse);
arrayCreate();
arrayData()->setType(t);
}
inline void arrayReserve(uint n) {
- ArrayData::realloc(this, ArrayData::Simple, n, false);
+ ArrayData::realloc(this, Heap::ArrayData::Simple, n, false);
}
void arrayCreate() {
if (!arrayData())
- ArrayData::realloc(this, ArrayData::Simple, 0, false);
+ ArrayData::realloc(this, Heap::ArrayData::Simple, 0, false);
#ifdef CHECK_SPARSE_ARRAYS
initSparseArray();
#endif
}
void initSparseArray();
- SparseArrayNode *sparseBegin() { return arrayType() == ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData())->sparse()->begin() : 0; }
- SparseArrayNode *sparseEnd() { return arrayType() == ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData())->sparse()->end() : 0; }
+ SparseArrayNode *sparseBegin() { return arrayType() == Heap::ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData())->sparse()->begin() : 0; }
+ SparseArrayNode *sparseEnd() { return arrayType() == Heap::ArrayData::Sparse ? static_cast<SparseArrayData *>(arrayData())->sparse()->end() : 0; }
inline bool protoHasArray() {
Scope scope(engine());
@@ -230,7 +230,7 @@ public:
inline ReturnedValue call(CallData *d)
{ return vtable()->call(this, d); }
protected:
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
static ReturnedValue construct(Managed *m, CallData *);
static ReturnedValue call(Managed *m, CallData *);
static ReturnedValue get(Managed *m, String *name, bool *hasProperty);
diff --git a/src/qml/jsruntime/qv4objectiterator.cpp b/src/qml/jsruntime/qv4objectiterator.cpp
index e0f7087437..dfe37dfd53 100644
--- a/src/qml/jsruntime/qv4objectiterator.cpp
+++ b/src/qml/jsruntime/qv4objectiterator.cpp
@@ -129,7 +129,7 @@ void ObjectIterator::next(String *&name, uint *index, Property *pd, PropertyAttr
Object *proto = current->objectValue()->prototype();
current->m = proto ? &proto->data : 0;
} else
- current->m = (HeapObject *)0;
+ current->m = (Heap::Base *)0;
arrayIndex = 0;
memberIndex = 0;
@@ -210,7 +210,7 @@ ReturnedValue ObjectIterator::nextPropertyNameAsString()
DEFINE_OBJECT_VTABLE(ForEachIteratorObject);
-void ForEachIteratorObject::markObjects(HeapObject *that, ExecutionEngine *e)
+void ForEachIteratorObject::markObjects(Heap::Base *that, ExecutionEngine *e)
{
ForEachIteratorObject::Data *o = static_cast<ForEachIteratorObject::Data *>(that);
o->workArea[0].mark(e);
diff --git a/src/qml/jsruntime/qv4objectiterator_p.h b/src/qml/jsruntime/qv4objectiterator_p.h
index 10f75a1e0d..00d7c490e3 100644
--- a/src/qml/jsruntime/qv4objectiterator_p.h
+++ b/src/qml/jsruntime/qv4objectiterator_p.h
@@ -83,7 +83,7 @@ struct ForEachIteratorObject: Object {
ReturnedValue nextPropertyName() { return d()->it.nextPropertyNameAsString(); }
protected:
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp
index cf59fe027c..23ce1e118f 100644
--- a/src/qml/jsruntime/qv4qobjectwrapper.cpp
+++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp
@@ -985,7 +985,7 @@ static void markChildQObjectsRecursively(QObject *parent, QV4::ExecutionEngine *
}
}
-void QObjectWrapper::markObjects(HeapObject *that, QV4::ExecutionEngine *e)
+void QObjectWrapper::markObjects(Heap::Base *that, QV4::ExecutionEngine *e)
{
QObjectWrapper::Data *This = static_cast<QObjectWrapper::Data *>(that);
diff --git a/src/qml/jsruntime/qv4qobjectwrapper_p.h b/src/qml/jsruntime/qv4qobjectwrapper_p.h
index 6458f03037..8bcde64cb6 100644
--- a/src/qml/jsruntime/qv4qobjectwrapper_p.h
+++ b/src/qml/jsruntime/qv4qobjectwrapper_p.h
@@ -108,7 +108,7 @@ private:
static void put(Managed *m, String *name, const ValueRef value);
static PropertyAttributes query(const Managed *, String *name);
static void advanceIterator(Managed *m, ObjectIterator *it, String *&name, uint *index, Property *p, PropertyAttributes *attributes);
- static void markObjects(HeapObject *that, QV4::ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, QV4::ExecutionEngine *e);
static void destroy(Managed *that);
static ReturnedValue method_connect(CallContext *ctx);
diff --git a/src/qml/jsruntime/qv4regexp.cpp b/src/qml/jsruntime/qv4regexp.cpp
index 659221b0d9..eab364c418 100644
--- a/src/qml/jsruntime/qv4regexp.cpp
+++ b/src/qml/jsruntime/qv4regexp.cpp
@@ -86,7 +86,7 @@ Returned<RegExp> *RegExp::create(ExecutionEngine* engine, const QString& pattern
}
RegExp::Data::Data(ExecutionEngine* engine, const QString &pattern, bool ignoreCase, bool multiline)
- : Managed::Data(engine->regExpValueClass)
+ : Heap::Base(engine->regExpValueClass)
, pattern(pattern)
, ignoreCase(ignoreCase)
, multiLine(multiline)
@@ -119,7 +119,7 @@ void RegExp::destroy(Managed *that)
static_cast<RegExp*>(that)->d()->~Data();
}
-void RegExp::markObjects(HeapObject *that, ExecutionEngine *e)
+void RegExp::markObjects(Heap::Base *that, ExecutionEngine *e)
{
Q_UNUSED(that);
Q_UNUSED(e);
diff --git a/src/qml/jsruntime/qv4regexp_p.h b/src/qml/jsruntime/qv4regexp_p.h
index 7aad1a32f2..2ce39e812c 100644
--- a/src/qml/jsruntime/qv4regexp_p.h
+++ b/src/qml/jsruntime/qv4regexp_p.h
@@ -58,7 +58,7 @@ struct RegExpCacheKey;
struct RegExp : public Managed
{
- struct Data : Managed::Data {
+ struct Data : Heap::Base {
Data(ExecutionEngine* engine, const QString& pattern, bool ignoreCase, bool multiline);
~Data();
QString pattern;
@@ -94,7 +94,7 @@ struct RegExp : public Managed
int captureCount() const { return subPatternCount() + 1; }
static void destroy(Managed *that);
- static void markObjects(HeapObject *that, QV4::ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, QV4::ExecutionEngine *e);
friend class RegExpCache;
};
diff --git a/src/qml/jsruntime/qv4regexpobject.cpp b/src/qml/jsruntime/qv4regexpobject.cpp
index 2fd91a0675..115014a73f 100644
--- a/src/qml/jsruntime/qv4regexpobject.cpp
+++ b/src/qml/jsruntime/qv4regexpobject.cpp
@@ -170,7 +170,7 @@ void RegExpObject::init(ExecutionEngine *engine)
}
-void RegExpObject::markObjects(HeapObject *that, ExecutionEngine *e)
+void RegExpObject::markObjects(Heap::Base *that, ExecutionEngine *e)
{
RegExpObject::Data *re = static_cast<RegExpObject::Data *>(that);
if (re->value)
@@ -303,7 +303,7 @@ ReturnedValue RegExpCtor::call(Managed *that, CallData *callData)
return construct(that, callData);
}
-void RegExpCtor::markObjects(HeapObject *that, ExecutionEngine *e)
+void RegExpCtor::markObjects(Heap::Base *that, ExecutionEngine *e)
{
RegExpCtor::Data *This = static_cast<RegExpCtor::Data *>(that);
This->lastMatch.mark(e);
diff --git a/src/qml/jsruntime/qv4regexpobject_p.h b/src/qml/jsruntime/qv4regexpobject_p.h
index cf59ca12c0..8e415234bc 100644
--- a/src/qml/jsruntime/qv4regexpobject_p.h
+++ b/src/qml/jsruntime/qv4regexpobject_p.h
@@ -91,7 +91,7 @@ struct RegExpObject: Object {
uint flags() const;
protected:
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
struct RegExpCtor: FunctionObject
@@ -113,7 +113,7 @@ struct RegExpCtor: FunctionObject
static ReturnedValue construct(Managed *m, CallData *callData);
static ReturnedValue call(Managed *that, CallData *callData);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
struct RegExpPrototype: RegExpObject
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index fe9d07e772..5c02555a66 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -604,7 +604,7 @@ void Runtime::setElement(ExecutionContext *ctx, const ValueRef object, const Val
uint idx = index->asArrayIndex();
if (idx < UINT_MAX) {
- if (o->arrayType() == ArrayData::Simple) {
+ if (o->arrayType() == Heap::ArrayData::Simple) {
SimpleArrayData *s = static_cast<SimpleArrayData *>(o->arrayData());
if (s && idx < s->len() && !s->data(idx).isEmpty()) {
s->data(idx) = value;
diff --git a/src/qml/jsruntime/qv4scopedvalue_p.h b/src/qml/jsruntime/qv4scopedvalue_p.h
index 90a3bf1602..0bb679af78 100644
--- a/src/qml/jsruntime/qv4scopedvalue_p.h
+++ b/src/qml/jsruntime/qv4scopedvalue_p.h
@@ -110,7 +110,7 @@ struct ScopedValue
#endif
}
- ScopedValue(const Scope &scope, HeapObject *o)
+ ScopedValue(const Scope &scope, Heap::Base *o)
{
ptr = scope.engine->jsStackTop++;
ptr->m = o;
@@ -155,7 +155,7 @@ struct ScopedValue
return *this;
}
- ScopedValue &operator=(HeapObject *o) {
+ ScopedValue &operator=(Heap::Base *o) {
ptr->m = o;
#if QT_POINTER_SIZE == 4
ptr->tag = QV4::Value::Managed_Type;
@@ -228,7 +228,7 @@ struct Scoped
++scope.size;
#endif
}
- Scoped(const Scope &scope, HeapObject *o)
+ Scoped(const Scope &scope, Heap::Base *o)
{
Value v;
v.m = o;
@@ -316,7 +316,7 @@ struct Scoped
#endif
}
- Scoped<T> &operator=(HeapObject *o) {
+ Scoped<T> &operator=(Heap::Base *o) {
Value v;
v.m = o;
#if QT_POINTER_SIZE == 4
diff --git a/src/qml/jsruntime/qv4script.cpp b/src/qml/jsruntime/qv4script.cpp
index 5c0c3f32ff..a85cb8f883 100644
--- a/src/qml/jsruntime/qv4script.cpp
+++ b/src/qml/jsruntime/qv4script.cpp
@@ -111,7 +111,7 @@ ReturnedValue QmlBindingWrapper::call(Managed *that, CallData *)
return result.asReturnedValue();
}
-void QmlBindingWrapper::markObjects(HeapObject *m, ExecutionEngine *e)
+void QmlBindingWrapper::markObjects(Heap::Base *m, ExecutionEngine *e)
{
QmlBindingWrapper::Data *wrapper = static_cast<QmlBindingWrapper::Data *>(m);
if (wrapper->qml)
diff --git a/src/qml/jsruntime/qv4script_p.h b/src/qml/jsruntime/qv4script_p.h
index f12d5ad6fc..6aa92c3516 100644
--- a/src/qml/jsruntime/qv4script_p.h
+++ b/src/qml/jsruntime/qv4script_p.h
@@ -82,7 +82,7 @@ struct Q_QML_EXPORT QmlBindingWrapper : FunctionObject {
V4_OBJECT(FunctionObject)
static ReturnedValue call(Managed *that, CallData *);
- static void markObjects(HeapObject *m, ExecutionEngine *e);
+ static void markObjects(Heap::Base *m, ExecutionEngine *e);
CallContext *context() const { return d()->qmlContext; }
diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp
index c63e634025..d666de4125 100644
--- a/src/qml/jsruntime/qv4sequenceobject.cpp
+++ b/src/qml/jsruntime/qv4sequenceobject.cpp
@@ -167,7 +167,7 @@ struct QQmlSequence : public QV4::Object
{
QV4::Scope scope(engine);
QV4::Scoped<QQmlSequence<Container> > o(scope, this);
- o->setArrayType(ArrayData::Custom);
+ o->setArrayType(Heap::ArrayData::Custom);
o->init();
}
@@ -179,7 +179,7 @@ struct QQmlSequence : public QV4::Object
{
QV4::Scope scope(engine);
QV4::Scoped<QQmlSequence<Container> > o(scope, this);
- o->setArrayType(ArrayData::Custom);
+ o->setArrayType(Heap::ArrayData::Custom);
o->loadReference();
o->init();
}
diff --git a/src/qml/jsruntime/qv4string.cpp b/src/qml/jsruntime/qv4string.cpp
index 4ae10f6506..80fbec81cc 100644
--- a/src/qml/jsruntime/qv4string.cpp
+++ b/src/qml/jsruntime/qv4string.cpp
@@ -122,7 +122,7 @@ void String::destroy(Managed *that)
static_cast<String*>(that)->d()->~Data();
}
-void String::markObjects(HeapObject *that, ExecutionEngine *e)
+void String::markObjects(Heap::Base *that, ExecutionEngine *e)
{
String::Data *s = static_cast<String::Data *>(that);
if (s->largestSubLength) {
@@ -244,7 +244,7 @@ bool String::isEqualTo(Managed *t, Managed *o)
String::Data::Data(ExecutionEngine *engine, const QString &t)
- : Managed::Data(engine->stringClass)
+ : Heap::Base(engine->stringClass)
{
subtype = StringType_Unknown;
@@ -257,7 +257,7 @@ String::Data::Data(ExecutionEngine *engine, const QString &t)
}
String::Data::Data(ExecutionEngine *engine, String *l, String *r)
- : Managed::Data(engine->stringClass)
+ : Heap::Base(engine->stringClass)
{
subtype = StringType_Unknown;
diff --git a/src/qml/jsruntime/qv4string_p.h b/src/qml/jsruntime/qv4string_p.h
index 1e53132fe3..9f47327661 100644
--- a/src/qml/jsruntime/qv4string_p.h
+++ b/src/qml/jsruntime/qv4string_p.h
@@ -45,7 +45,7 @@ struct Identifier;
struct Q_QML_PRIVATE_EXPORT String : public Managed {
#ifndef V4_BOOTSTRAP
- struct Q_QML_PRIVATE_EXPORT Data : Managed::Data {
+ struct Q_QML_PRIVATE_EXPORT Data : Heap::Base {
Data(ExecutionEngine *engine, const QString &text);
Data(ExecutionEngine *engine, String *l, String *n);
~Data() {
@@ -154,7 +154,7 @@ struct Q_QML_PRIVATE_EXPORT String : public Managed {
protected:
static void destroy(Managed *);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
static ReturnedValue get(Managed *m, String *name, bool *hasProperty);
static ReturnedValue getIndexed(Managed *m, uint index, bool *hasProperty);
static void put(Managed *m, String *name, const ValueRef value);
diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp
index 19ef7892ad..5b5731c5b1 100644
--- a/src/qml/jsruntime/qv4stringobject.cpp
+++ b/src/qml/jsruntime/qv4stringobject.cpp
@@ -149,7 +149,7 @@ void StringObject::advanceIterator(Managed *m, ObjectIterator *it, String *&name
return Object::advanceIterator(m, it, name, index, p, attrs);
}
-void StringObject::markObjects(HeapObject *that, ExecutionEngine *e)
+void StringObject::markObjects(Heap::Base *that, ExecutionEngine *e)
{
StringObject::Data *o = static_cast<StringObject::Data *>(that);
o->value.stringValue()->mark(e);
diff --git a/src/qml/jsruntime/qv4stringobject_p.h b/src/qml/jsruntime/qv4stringobject_p.h
index 28e944c791..22e2ba6c0e 100644
--- a/src/qml/jsruntime/qv4stringobject_p.h
+++ b/src/qml/jsruntime/qv4stringobject_p.h
@@ -59,7 +59,7 @@ struct StringObject: Object {
protected:
static void advanceIterator(Managed *m, ObjectIterator *it, String *&name, uint *index, Property *p, PropertyAttributes *attrs);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
};
struct StringCtor: FunctionObject
diff --git a/src/qml/jsruntime/qv4typedarray.cpp b/src/qml/jsruntime/qv4typedarray.cpp
index 72823efa12..059e011d9e 100644
--- a/src/qml/jsruntime/qv4typedarray.cpp
+++ b/src/qml/jsruntime/qv4typedarray.cpp
@@ -339,7 +339,7 @@ TypedArray::Data::Data(ExecutionEngine *e, Type t)
{
}
-void TypedArray::markObjects(HeapObject *that, ExecutionEngine *e)
+void TypedArray::markObjects(Heap::Base *that, ExecutionEngine *e)
{
static_cast<TypedArray::Data *>(that)->buffer->mark(e);
Object::markObjects(that, e);
diff --git a/src/qml/jsruntime/qv4typedarray_p.h b/src/qml/jsruntime/qv4typedarray_p.h
index 28847e0c85..2b266e5169 100644
--- a/src/qml/jsruntime/qv4typedarray_p.h
+++ b/src/qml/jsruntime/qv4typedarray_p.h
@@ -82,7 +82,7 @@ struct TypedArray : Object
}
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
static ReturnedValue getIndexed(Managed *m, uint index, bool *hasProperty);
static void putIndexed(Managed *m, uint index, const ValueRef value);
};
diff --git a/src/qml/jsruntime/qv4value_inl_p.h b/src/qml/jsruntime/qv4value_inl_p.h
index 2600148417..d7fbf4b231 100644
--- a/src/qml/jsruntime/qv4value_inl_p.h
+++ b/src/qml/jsruntime/qv4value_inl_p.h
@@ -49,13 +49,13 @@ inline bool Value::isString() const
{
if (!isManaged())
return false;
- return m && static_cast<Managed::Data *>(m)->internalClass->vtable->isString;
+ return m && static_cast<Heap::Base *>(m)->internalClass->vtable->isString;
}
inline bool Value::isObject() const
{
if (!isManaged())
return false;
- return m && static_cast<Managed::Data *>(m)->internalClass->vtable->isObject;
+ return m && static_cast<Heap::Base *>(m)->internalClass->vtable->isObject;
}
inline bool Value::isPrimitive() const
diff --git a/src/qml/jsruntime/qv4value_p.h b/src/qml/jsruntime/qv4value_p.h
index fa2d544fcf..d948659a74 100644
--- a/src/qml/jsruntime/qv4value_p.h
+++ b/src/qml/jsruntime/qv4value_p.h
@@ -44,8 +44,10 @@ namespace QV4 {
typedef uint Bool;
-struct Q_QML_EXPORT HeapObject {
- HeapObject(InternalClass *internal)
+namespace Heap {
+
+struct Q_QML_EXPORT Base {
+ Base(InternalClass *internal)
: internalClass(internal)
, markBit(0)
, inUse(1)
@@ -75,15 +77,17 @@ struct Q_QML_EXPORT HeapObject {
inline void mark(QV4::ExecutionEngine *engine);
void *operator new(size_t, Managed *m) { return m; }
- void *operator new(size_t, HeapObject *m) { return m; }
- void operator delete(void *, HeapObject *) {}
+ void *operator new(size_t, Heap::Base *m) { return m; }
+ void operator delete(void *, Heap::Base *) {}
};
+}
+
template <typename T>
-struct Returned : private HeapObject
+struct Returned : private Heap::Base
{
- static Returned<T> *create(T *t) { Q_ASSERT((void *)&t->data == (void *)t); return static_cast<Returned<T> *>(static_cast<HeapObject*>(t ? &t->data : 0)); }
- static Returned<T> *create(typename T::Data *t) { return static_cast<Returned<T> *>(static_cast<HeapObject*>(t)); }
+ static Returned<T> *create(T *t) { Q_ASSERT((void *)&t->data == (void *)t); return static_cast<Returned<T> *>(static_cast<Heap::Base*>(t ? &t->data : 0)); }
+ static Returned<T> *create(typename T::Data *t) { return static_cast<Returned<T> *>(static_cast<Heap::Base*>(t)); }
T *getPointer() { return reinterpret_cast<T *>(this); }
template<typename X>
static T *getPointer(Returned<X> *x) { return x->getPointer(); }
@@ -121,7 +125,7 @@ struct Q_QML_PRIVATE_EXPORT Value
union {
quint64 val;
#if QT_POINTER_SIZE == 8
- HeapObject *m;
+ Heap::Base *m;
#else
double dbl;
#endif
@@ -133,7 +137,7 @@ struct Q_QML_PRIVATE_EXPORT Value
uint uint_32;
int int_32;
#if QT_POINTER_SIZE == 4
- HeapObject *m;
+ Heap::Base *m;
#endif
};
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
@@ -309,7 +313,7 @@ struct Q_QML_PRIVATE_EXPORT Value
Managed *managed() const {
return m ? reinterpret_cast<Managed*>(m) : 0;
}
- HeapObject *heapObject() const {
+ Heap::Base *heapObject() const {
return m;
}
@@ -317,7 +321,7 @@ struct Q_QML_PRIVATE_EXPORT Value
return val;
}
- static inline Value fromHeapObject(HeapObject *m)
+ static inline Value fromHeapObject(Heap::Base *m)
{
Value v;
v.m = m;
@@ -391,7 +395,7 @@ struct Q_QML_PRIVATE_EXPORT Value
val = Value::fromManaged(t).val;
return *this;
}
- Value &operator=(HeapObject *o) {
+ Value &operator=(Heap::Base *o) {
m = o;
return *this;
}
@@ -581,9 +585,9 @@ private:
};
inline
-ReturnedValue HeapObject::asReturnedValue() const
+ReturnedValue Heap::Base::asReturnedValue() const
{
- return Value::fromHeapObject(const_cast<HeapObject *>(this)).asReturnedValue();
+ return Value::fromHeapObject(const_cast<Heap::Base *>(this)).asReturnedValue();
}
diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp
index 980fc99b92..0ba72c1641 100644
--- a/src/qml/qml/qqmlcomponent.cpp
+++ b/src/qml/qml/qqmlcomponent.cpp
@@ -1090,7 +1090,7 @@ struct QmlIncubatorObject : public QV4::Object
static QV4::ReturnedValue method_forceCompletion(QV4::CallContext *ctx);
static void destroy(Managed *that);
- static void markObjects(QV4::HeapObject *that, QV4::ExecutionEngine *e);
+ static void markObjects(QV4::Heap::Base *that, QV4::ExecutionEngine *e);
void statusChanged(QQmlIncubator::Status);
void setInitialState(QObject *);
@@ -1503,7 +1503,7 @@ void QmlIncubatorObject::destroy(Managed *that)
static_cast<QmlIncubatorObject *>(that)->d()->~Data();
}
-void QmlIncubatorObject::markObjects(QV4::HeapObject *that, QV4::ExecutionEngine *e)
+void QmlIncubatorObject::markObjects(QV4::Heap::Base *that, QV4::ExecutionEngine *e)
{
QmlIncubatorObject::Data *o = static_cast<QmlIncubatorObject::Data *>(that);
o->valuemap.mark(e);
diff --git a/src/qml/qml/qqmlcontextwrapper.cpp b/src/qml/qml/qqmlcontextwrapper.cpp
index df62f285e3..bbb757797e 100644
--- a/src/qml/qml/qqmlcontextwrapper.cpp
+++ b/src/qml/qml/qqmlcontextwrapper.cpp
@@ -347,7 +347,7 @@ void QmlContextWrapper::destroy(Managed *that)
static_cast<QmlContextWrapper *>(that)->d()->~Data();
}
-void QmlContextWrapper::markObjects(HeapObject *m, ExecutionEngine *engine)
+void QmlContextWrapper::markObjects(Heap::Base *m, ExecutionEngine *engine)
{
QmlContextWrapper::Data *This = static_cast<QmlContextWrapper::Data *>(m);
if (This->idObjectsWrapper)
@@ -465,7 +465,7 @@ ReturnedValue QQmlIdObjectsArray::getIndexed(Managed *m, uint index, bool *hasPr
return QObjectWrapper::wrap(This->engine(), context->idValues[index].data());
}
-void QQmlIdObjectsArray::markObjects(HeapObject *that, ExecutionEngine *engine)
+void QQmlIdObjectsArray::markObjects(Heap::Base *that, ExecutionEngine *engine)
{
QQmlIdObjectsArray::Data *This = static_cast<QQmlIdObjectsArray::Data *>(that);
This->contextWrapper->mark(engine);
diff --git a/src/qml/qml/qqmlcontextwrapper_p.h b/src/qml/qml/qqmlcontextwrapper_p.h
index ae9e795a5c..5f2229fe51 100644
--- a/src/qml/qml/qqmlcontextwrapper_p.h
+++ b/src/qml/qml/qqmlcontextwrapper_p.h
@@ -93,7 +93,7 @@ struct Q_QML_EXPORT QmlContextWrapper : Object
static ReturnedValue get(Managed *m, String *name, bool *hasProperty);
static void put(Managed *m, String *name, const ValueRef value);
static void destroy(Managed *that);
- static void markObjects(HeapObject *m, ExecutionEngine *engine);
+ static void markObjects(Heap::Base *m, ExecutionEngine *engine);
static void registerQmlDependencies(ExecutionEngine *context, const CompiledData::Function *compiledFunction);
@@ -111,7 +111,7 @@ struct QQmlIdObjectsArray : public Object
V4_OBJECT(Object)
static ReturnedValue getIndexed(Managed *m, uint index, bool *hasProperty);
- static void markObjects(HeapObject *that, ExecutionEngine *engine);
+ static void markObjects(Heap::Base *that, ExecutionEngine *engine);
};
diff --git a/src/qml/qml/qqmllistwrapper.cpp b/src/qml/qml/qqmllistwrapper.cpp
index b62689c454..50f1b55b9b 100644
--- a/src/qml/qml/qqmllistwrapper.cpp
+++ b/src/qml/qml/qqmllistwrapper.cpp
@@ -53,7 +53,7 @@ QmlListWrapper::Data::Data(QV8Engine *engine)
QV4::Scope scope(QV8Engine::getV4(engine));
QV4::ScopedObject o(scope, this);
- o->setArrayType(ArrayData::Custom);
+ o->setArrayType(Heap::ArrayData::Custom);
}
QmlListWrapper::Data::~Data()
diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp
index 2acd40ae44..c8bf521767 100644
--- a/src/qml/qml/qqmlxmlhttprequest.cpp
+++ b/src/qml/qml/qqmlxmlhttprequest.cpp
@@ -1639,7 +1639,7 @@ struct QQmlXMLHttpRequestCtor : public FunctionObject
Object *proto;
};
V4_OBJECT(FunctionObject)
- static void markObjects(HeapObject *that, ExecutionEngine *e) {
+ static void markObjects(Heap::Base *that, ExecutionEngine *e) {
QQmlXMLHttpRequestCtor::Data *c = static_cast<QQmlXMLHttpRequestCtor::Data *>(that);
if (c->proto)
c->proto->mark(e);
diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
index 3a593d1c5b..4ab360eb9a 100644
--- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
+++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp
@@ -1187,7 +1187,7 @@ ReturnedValue QQmlBindingFunction::call(Managed *that, CallData *callData)
return This->d()->originalFunction->call(callData);
}
-void QQmlBindingFunction::markObjects(HeapObject *that, ExecutionEngine *e)
+void QQmlBindingFunction::markObjects(Heap::Base *that, ExecutionEngine *e)
{
QQmlBindingFunction::Data *This = static_cast<QQmlBindingFunction::Data *>(that);
This->originalFunction->mark(e);
diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions_p.h b/src/qml/qml/v8/qqmlbuiltinfunctions_p.h
index 7fe7d2b914..19b30bcc86 100644
--- a/src/qml/qml/v8/qqmlbuiltinfunctions_p.h
+++ b/src/qml/qml/v8/qqmlbuiltinfunctions_p.h
@@ -155,7 +155,7 @@ struct QQmlBindingFunction : public QV4::FunctionObject
static ReturnedValue call(Managed *that, CallData *callData);
- static void markObjects(HeapObject *that, ExecutionEngine *e);
+ static void markObjects(Heap::Base *that, ExecutionEngine *e);
static void destroy(Managed *that) {
static_cast<QQmlBindingFunction *>(that)->d()->~Data();
}
diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp
index e150545926..d7c2946e3f 100644
--- a/src/qml/types/qqmldelegatemodel.cpp
+++ b/src/qml/types/qqmldelegatemodel.cpp
@@ -3262,7 +3262,7 @@ struct QQmlDelegateModelGroupChangeArray : public QV4::Object
setVTable(staticVTable());
QV4::Scope scope(engine);
QV4::ScopedObject o(scope, this);
- o->setArrayType(QV4::ArrayData::Custom);
+ o->setArrayType(QV4::Heap::ArrayData::Custom);
}
QVector<QQmlChangeSet::Change> changes;
};
diff --git a/src/quick/items/context2d/qquickcontext2d.cpp b/src/quick/items/context2d/qquickcontext2d.cpp
index 1b29cd0b02..d7330d3912 100644
--- a/src/quick/items/context2d/qquickcontext2d.cpp
+++ b/src/quick/items/context2d/qquickcontext2d.cpp
@@ -867,7 +867,7 @@ struct QQuickJSContext2DPixelData : public QV4::Object
setVTable(staticVTable());
QV4::Scope scope(engine);
QV4::ScopedObject o(scope, this);
- o->setArrayType(QV4::ArrayData::Custom);
+ o->setArrayType(QV4::Heap::ArrayData::Custom);
}
QImage image;
};
@@ -908,7 +908,7 @@ struct QQuickJSContext2DImageData : public QV4::Object
static QV4::ReturnedValue method_get_height(QV4::CallContext *ctx);
static QV4::ReturnedValue method_get_data(QV4::CallContext *ctx);
- static void markObjects(QV4::HeapObject *that, QV4::ExecutionEngine *engine) {
+ static void markObjects(QV4::Heap::Base *that, QV4::ExecutionEngine *engine) {
static_cast<QQuickJSContext2DImageData::Data *>(that)->pixelData.mark(engine);
QV4::Object::markObjects(that, engine);
}
diff --git a/src/quick/items/qquickview.cpp b/src/quick/items/qquickview.cpp
index ae33f9261c..907d56812b 100644
--- a/src/quick/items/qquickview.cpp
+++ b/src/quick/items/qquickview.cpp
@@ -56,7 +56,7 @@ QV4::Returned<QQuickRootItemMarker> *QQuickRootItemMarker::create(QQmlEngine *en
return e->memoryManager->alloc<QQuickRootItemMarker>(e, window);
}
-void QQuickRootItemMarker::markObjects(QV4::HeapObject *that, QV4::ExecutionEngine *e)
+void QQuickRootItemMarker::markObjects(QV4::Heap::Base *that, QV4::ExecutionEngine *e)
{
QQuickItem *root = static_cast<QQuickRootItemMarker::Data *>(that)->window->contentItem();
if (root) {
diff --git a/src/quick/items/qquickview_p.h b/src/quick/items/qquickview_p.h
index 7e39ed89b2..3fc6cee54e 100644
--- a/src/quick/items/qquickview_p.h
+++ b/src/quick/items/qquickview_p.h
@@ -110,7 +110,7 @@ struct QQuickRootItemMarker : public QV4::Object
static QV4::Returned<QQuickRootItemMarker> *create(QQmlEngine *engine, QQuickWindow *window);
- static void markObjects(QV4::HeapObject *that, QV4::ExecutionEngine *e);
+ static void markObjects(QV4::Heap::Base *that, QV4::ExecutionEngine *e);
};