aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@theqtcompany.com>2015-01-13 21:49:09 +0100
committerLars Knoll <lars.knoll@digia.com>2015-01-21 13:19:02 +0100
commit630f118f043edb88501e387d779c62c86b1030d4 (patch)
tree2c8c3cdcadae94b859760a0603e22748da33453a /src/qml
parent47fbcb47771a36ab9fd0a4d5ede7b7504ab1410d (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 <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/jsruntime/qv4arraydata.cpp4
-rw-r--r--src/qml/jsruntime/qv4arraydata_p.h12
-rw-r--r--src/qml/jsruntime/qv4engine.cpp2
-rw-r--r--src/qml/jsruntime/qv4engine_p.h3
-rw-r--r--src/qml/jsruntime/qv4function.cpp2
-rw-r--r--src/qml/jsruntime/qv4functionobject.cpp6
-rw-r--r--src/qml/jsruntime/qv4managed_p.h7
-rw-r--r--src/qml/jsruntime/qv4memberdata.cpp2
-rw-r--r--src/qml/jsruntime/qv4memberdata_p.h2
-rw-r--r--src/qml/jsruntime/qv4object.cpp2
-rw-r--r--src/qml/jsruntime/qv4object_p.h6
-rw-r--r--src/qml/jsruntime/qv4regexp.cpp3
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp6
-rw-r--r--src/qml/jsruntime/qv4string.cpp6
-rw-r--r--src/qml/jsruntime/qv4string_p.h4
-rw-r--r--src/qml/jsruntime/qv4value_p.h9
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);