diff options
author | Lars Knoll <[email protected]> | 2015-01-13 21:49:09 +0100 |
---|---|---|
committer | Lars Knoll <[email protected]> | 2015-01-21 13:19:02 +0100 |
commit | 630f118f043edb88501e387d779c62c86b1030d4 (patch) | |
tree | 2c8c3cdcadae94b859760a0603e22748da33453a /src/qml | |
parent | 47fbcb47771a36ab9fd0a4d5ede7b7504ab1410d (diff) |
Move the internalClass pointer into Heap::Object
The other classes that derive from Heap::Base don't need it
at all. So get rid of it there and save a pointer.
Change-Id: I9c5df2e43cd6eeac2e6e41f3d3b8077d3afbc8f2
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4arraydata.cpp | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4arraydata_p.h | 12 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine_p.h | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4function.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4managed_p.h | 7 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4memberdata.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4memberdata_p.h | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4object_p.h | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4regexp.cpp | 3 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4runtime.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4string.cpp | 6 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4string_p.h | 4 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4value_p.h | 9 |
16 files changed, 25 insertions, 51 deletions
diff --git a/src/qml/jsruntime/qv4arraydata.cpp b/src/qml/jsruntime/qv4arraydata.cpp index f0fbc85a9a..8f1fe1bbe6 100644 --- a/src/qml/jsruntime/qv4arraydata.cpp +++ b/src/qml/jsruntime/qv4arraydata.cpp @@ -129,13 +129,13 @@ void ArrayData::realloc(Object *o, Type newType, uint requested, bool enforceAtt Scoped<ArrayData> newData(scope); if (newType < Heap::ArrayData::Sparse) { Heap::SimpleArrayData *n = scope.engine->memoryManager->allocManaged<SimpleArrayData>(size); - new (n) Heap::SimpleArrayData(scope.engine); + new (n) Heap::SimpleArrayData; n->offset = 0; n->len = d ? d->d()->len : 0; newData = n; } else { Heap::SparseArrayData *n = scope.engine->memoryManager->allocManaged<SparseArrayData>(size); - new (n) Heap::SparseArrayData(scope.engine); + new (n) Heap::SparseArrayData; newData = n; } newData->setAlloc(alloc); diff --git a/src/qml/jsruntime/qv4arraydata_p.h b/src/qml/jsruntime/qv4arraydata_p.h index f78d0234cc..76451480c3 100644 --- a/src/qml/jsruntime/qv4arraydata_p.h +++ b/src/qml/jsruntime/qv4arraydata_p.h @@ -74,9 +74,6 @@ struct ArrayVTable namespace Heap { struct ArrayData : public Base { - ArrayData(InternalClass *ic) - : Base(ic) - {} enum Type { Simple = 0, Complex = 1, @@ -118,10 +115,6 @@ struct ArrayData : public Base { }; struct SimpleArrayData : public ArrayData { - SimpleArrayData(ExecutionEngine *engine) - : ArrayData(engine->emptyClass) - {} - uint mappedIndex(uint index) const { return (index + offset) % alloc; } Value data(uint index) const { return arrayData[mappedIndex(index)]; } Value &data(uint index) { return arrayData[mappedIndex(index)]; } @@ -141,7 +134,6 @@ struct SimpleArrayData : public ArrayData { }; struct SparseArrayData : public ArrayData { - inline SparseArrayData(ExecutionEngine *engine); inline ~SparseArrayData(); uint mappedIndex(uint index) const { @@ -272,10 +264,6 @@ struct Q_QML_EXPORT SparseArrayData : public ArrayData }; namespace Heap { -inline SparseArrayData::SparseArrayData(ExecutionEngine *engine) - : ArrayData(engine->emptyClass) -{ -} inline SparseArrayData::~SparseArrayData() { diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index a48a78b08e..b42d4bec1c 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -525,7 +525,7 @@ Heap::Object *ExecutionEngine::newObject(InternalClass *internalClass, QV4::Obje Heap::String *ExecutionEngine::newString(const QString &s) { Scope scope(this); - return ScopedString(scope, memoryManager->alloc<String>(this, s))->d(); + return ScopedString(scope, memoryManager->alloc<String>(s))->d(); } Heap::String *ExecutionEngine::newIdentifier(const QString &text) diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h index 081124f495..9ccebf6a8d 100644 --- a/src/qml/jsruntime/qv4engine_p.h +++ b/src/qml/jsruntime/qv4engine_p.h @@ -358,8 +358,7 @@ inline Heap::ExecutionContext *ExecutionEngine::popContext() inline Heap::ExecutionContext::ExecutionContext(ExecutionEngine *engine, ContextType t) - : Heap::Base(engine->emptyClass) - , type(t) + : type(t) , strictMode(false) , engine(engine) , parent(engine->currentContext()) diff --git a/src/qml/jsruntime/qv4function.cpp b/src/qml/jsruntime/qv4function.cpp index ef8b1eafd9..d431a55029 100644 --- a/src/qml/jsruntime/qv4function.cpp +++ b/src/qml/jsruntime/qv4function.cpp @@ -66,7 +66,7 @@ Function::Function(ExecutionEngine *engine, CompiledData::CompilationUnit *unit, break; } // duplicate arguments, need some trick to store them - arg = engine->memoryManager->alloc<String>(engine, arg->d(), engine->newString(QString(0xfffe))); + arg = engine->memoryManager->alloc<String>(arg->d(), engine->newString(QString(0xfffe))); } } diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index 4f55929193..2678186a6a 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -173,7 +173,7 @@ ReturnedValue FunctionObject::newInstance() ReturnedValue FunctionObject::construct(Managed *that, CallData *) { - that->internalClass()->engine->throwTypeError(); + static_cast<FunctionObject *>(that)->internalClass()->engine->throwTypeError(); return Encode::undefined(); } @@ -516,7 +516,7 @@ ReturnedValue SimpleScriptFunction::construct(Managed *that, CallData *callData) ReturnedValue SimpleScriptFunction::call(Managed *that, CallData *callData) { - ExecutionEngine *v4 = that->internalClass()->engine; + ExecutionEngine *v4 = static_cast<SimpleScriptFunction *>(that)->internalClass()->engine; if (v4->hasException) return Encode::undefined(); CHECK_STACK_LIMITS(v4); @@ -570,7 +570,7 @@ Heap::BuiltinFunction::BuiltinFunction(QV4::ExecutionContext *scope, QV4::String ReturnedValue BuiltinFunction::construct(Managed *f, CallData *) { - return f->internalClass()->engine->throwTypeError(); + return static_cast<BuiltinFunction *>(f)->internalClass()->engine->throwTypeError(); } ReturnedValue BuiltinFunction::call(Managed *that, CallData *callData) diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index a23785837e..6636cb19cf 100644 --- a/src/qml/jsruntime/qv4managed_p.h +++ b/src/qml/jsruntime/qv4managed_p.h @@ -231,7 +231,7 @@ public: template <typename T> T *as() { - Q_ASSERT(internalClass()); + Q_ASSERT(d()->vtable); #if !defined(QT_NO_QOBJECT_CHECK) static_cast<T *>(this)->qt_check_for_QMANAGED_macro(static_cast<T *>(this)); #endif @@ -245,7 +245,7 @@ public: } template <typename T> const T *as() const { - Q_ASSERT(internalClass()); + Q_ASSERT(d()->vtable); #if !defined(QT_NO_QOBJECT_CHECK) static_cast<T *>(this)->qt_check_for_QMANAGED_macro(static_cast<T *>(const_cast<Managed *>(this))); #endif @@ -283,9 +283,6 @@ public: ReturnedValue asReturnedValue() { return Value::fromManaged(this).asReturnedValue(); } - InternalClass *internalClass() const { return d()->internalClass; } - void setInternalClass(InternalClass *ic) { d()->internalClass = ic; } - bool inUse() const { return d()->inUse(); } bool markBit() const { return d()->isMarked(); } diff --git a/src/qml/jsruntime/qv4memberdata.cpp b/src/qml/jsruntime/qv4memberdata.cpp index 3f9584d38a..b35459faac 100644 --- a/src/qml/jsruntime/qv4memberdata.cpp +++ b/src/qml/jsruntime/qv4memberdata.cpp @@ -58,7 +58,7 @@ Heap::MemberData *MemberData::reallocate(ExecutionEngine *e, Heap::MemberData *o if (old) memcpy(newMemberData->d(), old, sizeof(Heap::MemberData) + s*sizeof(Value)); else - new (newMemberData->d()) Heap::MemberData(e->emptyClass); + new (newMemberData->d()) Heap::MemberData; newMemberData->d()->size = newAlloc; return newMemberData->d(); } diff --git a/src/qml/jsruntime/qv4memberdata_p.h b/src/qml/jsruntime/qv4memberdata_p.h index c881cf961a..a431193349 100644 --- a/src/qml/jsruntime/qv4memberdata_p.h +++ b/src/qml/jsruntime/qv4memberdata_p.h @@ -43,8 +43,6 @@ namespace QV4 { namespace Heap { struct MemberData : Base { - MemberData(InternalClass *c) - : Base(c), size(0) {} union { uint size; double _dummy; diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp index 64cfc24724..13c792d784 100644 --- a/src/qml/jsruntime/qv4object.cpp +++ b/src/qml/jsruntime/qv4object.cpp @@ -51,7 +51,7 @@ using namespace QV4; DEFINE_OBJECT_VTABLE(Object); Heap::Object::Object(InternalClass *internalClass, QV4::Object *prototype) - : Heap::Base(internalClass), + : internalClass(internalClass), prototype(prototype ? prototype->d() : 0) { if (internalClass->size) { diff --git a/src/qml/jsruntime/qv4object_p.h b/src/qml/jsruntime/qv4object_p.h index 3d100b5b57..a566716590 100644 --- a/src/qml/jsruntime/qv4object_p.h +++ b/src/qml/jsruntime/qv4object_p.h @@ -45,7 +45,7 @@ namespace Heap { struct Object : Base { Object(ExecutionEngine *engine) - : Base(engine->emptyClass), + : internalClass(engine->emptyClass), prototype(static_cast<Object *>(engine->objectPrototype.m)) { } @@ -54,6 +54,7 @@ struct Object : Base { const Property *propertyAt(uint index) const { return reinterpret_cast<const Property *>(memberData->data + index); } Property *propertyAt(uint index) { return reinterpret_cast<Property *>(memberData->data + index); } + InternalClass *internalClass; Heap::Object *prototype; MemberData *memberData; ArrayData *arrayData; @@ -69,6 +70,9 @@ struct Q_QML_EXPORT Object: Managed { IsObject = true }; + InternalClass *internalClass() const { return d()->internalClass; } + void setInternalClass(InternalClass *ic) { d()->internalClass = ic; } + Heap::MemberData *memberData() { return d()->memberData; } const Heap::MemberData *memberData() const { return d()->memberData; } Heap::ArrayData *arrayData() const { return d()->arrayData; } diff --git a/src/qml/jsruntime/qv4regexp.cpp b/src/qml/jsruntime/qv4regexp.cpp index 533703ff29..cff15bd400 100644 --- a/src/qml/jsruntime/qv4regexp.cpp +++ b/src/qml/jsruntime/qv4regexp.cpp @@ -86,8 +86,7 @@ Heap::RegExp *RegExp::create(ExecutionEngine* engine, const QString& pattern, bo } Heap::RegExp::RegExp(ExecutionEngine* engine, const QString &pattern, bool ignoreCase, bool multiline) - : Base(engine->emptyClass) - , pattern(pattern) + : pattern(pattern) , ignoreCase(ignoreCase) , multiLine(multiline) { diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index 61a2fc5fd3..61a277b9b5 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -522,7 +522,7 @@ QV4::ReturnedValue RuntimeHelpers::addHelper(ExecutionEngine *engine, const Valu return pright->asReturnedValue(); if (!pright->stringValue()->d()->length()) return pleft->asReturnedValue(); - return (engine->memoryManager->alloc<String>(engine, pleft->stringValue()->d(), pright->stringValue()->d()))->asReturnedValue(); + return (engine->memoryManager->alloc<String>(pleft->stringValue()->d(), pright->stringValue()->d()))->asReturnedValue(); } double x = RuntimeHelpers::toNumber(pleft); double y = RuntimeHelpers::toNumber(pright); @@ -538,7 +538,7 @@ QV4::ReturnedValue Runtime::addString(ExecutionEngine *engine, const QV4::ValueR return right->asReturnedValue(); if (!right->stringValue()->d()->length()) return left->asReturnedValue(); - return (engine->memoryManager->alloc<String>(engine, left->stringValue()->d(), right->stringValue()->d()))->asReturnedValue(); + return (engine->memoryManager->alloc<String>(left->stringValue()->d(), right->stringValue()->d()))->asReturnedValue(); } Scope scope(engine); @@ -555,7 +555,7 @@ QV4::ReturnedValue Runtime::addString(ExecutionEngine *engine, const QV4::ValueR return pright->asReturnedValue(); if (!pright->stringValue()->d()->length()) return pleft->asReturnedValue(); - return (engine->memoryManager->alloc<String>(engine, pleft->stringValue()->d(), pright->stringValue()->d()))->asReturnedValue(); + return (engine->memoryManager->alloc<String>(pleft->stringValue()->d(), pright->stringValue()->d()))->asReturnedValue(); } void Runtime::setProperty(ExecutionEngine *engine, const ValueRef object, int nameIndex, const ValueRef value) diff --git a/src/qml/jsruntime/qv4string.cpp b/src/qml/jsruntime/qv4string.cpp index ce47fc439e..adf4e67993 100644 --- a/src/qml/jsruntime/qv4string.cpp +++ b/src/qml/jsruntime/qv4string.cpp @@ -117,8 +117,7 @@ bool String::isEqualTo(Managed *t, Managed *o) } -Heap::String::String(ExecutionEngine *engine, const QString &t) - : Heap::Base(engine->emptyClass) +Heap::String::String(const QString &t) { subtype = String::StringType_Unknown; @@ -130,8 +129,7 @@ Heap::String::String(ExecutionEngine *engine, const QString &t) len = text->size; } -Heap::String::String(ExecutionEngine *engine, String *l, String *r) - : Heap::Base(engine->emptyClass) +Heap::String::String(String *l, String *r) { subtype = String::StringType_Unknown; diff --git a/src/qml/jsruntime/qv4string_p.h b/src/qml/jsruntime/qv4string_p.h index 249d9040b2..ed5e307efe 100644 --- a/src/qml/jsruntime/qv4string_p.h +++ b/src/qml/jsruntime/qv4string_p.h @@ -53,8 +53,8 @@ struct Q_QML_PRIVATE_EXPORT String : Base { StringType_ArrayIndex }; - String(ExecutionEngine *engine, const QString &text); - String(ExecutionEngine *engine, String *l, String *n); + String(const QString &text); + String(String *l, String *n); ~String() { if (!largestSubLength && !text->ref.deref()) QStringData::deallocate(text); diff --git a/src/qml/jsruntime/qv4value_p.h b/src/qml/jsruntime/qv4value_p.h index 5a4c1b9ca5..58e82f8fe2 100644 --- a/src/qml/jsruntime/qv4value_p.h +++ b/src/qml/jsruntime/qv4value_p.h @@ -47,19 +47,10 @@ typedef uint Bool; namespace Heap { struct Q_QML_EXPORT Base { - Base() {} - Base(InternalClass *internal) - : internalClass(internal) - { -// Q_ASSERT(vtable && inUse() && !isMarked()); - // #### - // Q_ASSERT(internal && internal->vtable); - } union { const ManagedVTable *vtable; quintptr mm_data; }; - InternalClass *internalClass; inline ReturnedValue asReturnedValue() const; inline void mark(QV4::ExecutionEngine *engine); |