diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-12-05 14:02:50 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-03 17:09:11 +0100 |
commit | 74ef33c8818544ef64288ab7193897a96413216e (patch) | |
tree | a0976ccda3c6247b7b1cc008e5b77b46cbcb2a0f /src/qml/jsruntime | |
parent | 751fa46df9bf06a1003df34b3e74c73c079e8626 (diff) |
Do not call InternalClass::changeVTable directly
vtable changes need to happen when the internal class
is being constructed, not later on.
Change-Id: Ibb9515745c9fc3507a5a90b4cc50a33e2e0d3f99
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 8 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4internalclass.cpp | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 539bc5ddd6..f55b47c7e0 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -195,9 +195,9 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory) identifierTable = new IdentifierTable(this); emptyClass = new (classPool.allocate(sizeof(InternalClass))) InternalClass(this); - executionContextClass = emptyClass->changeVTable(&ExecutionContext::static_vtbl); - stringClass = emptyClass->changeVTable(&String::static_vtbl); - regExpValueClass = emptyClass->changeVTable(&RegExp::static_vtbl); + executionContextClass = InternalClass::create(this, &ExecutionContext::static_vtbl, 0); + stringClass = InternalClass::create(this, &String::static_vtbl, 0); + regExpValueClass = InternalClass::create(this, &RegExp::static_vtbl, 0); id_undefined = newIdentifier(QStringLiteral("undefined")); id_null = newIdentifier(QStringLiteral("null")); @@ -230,7 +230,7 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory) id_toString = newIdentifier(QStringLiteral("toString")); id_valueOf = newIdentifier(QStringLiteral("valueOf")); - ObjectPrototype *objectPrototype = new (memoryManager) ObjectPrototype(emptyClass->changeVTable(&ObjectPrototype::static_vtbl)); + ObjectPrototype *objectPrototype = new (memoryManager) ObjectPrototype(InternalClass::create(this, &ObjectPrototype::static_vtbl, 0)); objectClass = InternalClass::create(this, &Object::static_vtbl, objectPrototype); Q_ASSERT(objectClass->vtable == &Object::static_vtbl); diff --git a/src/qml/jsruntime/qv4internalclass.cpp b/src/qml/jsruntime/qv4internalclass.cpp index 29ede3d104..761a180722 100644 --- a/src/qml/jsruntime/qv4internalclass.cpp +++ b/src/qml/jsruntime/qv4internalclass.cpp @@ -183,6 +183,8 @@ InternalClass *InternalClass::changeMember(String *string, PropertyAttributes da InternalClass *InternalClass::create(ExecutionEngine *engine, const ManagedVTable *vtable, Object *proto) { InternalClass *c = engine->emptyClass->changeVTable(vtable); + if (!proto) + return c; return c->changePrototype(proto); } |