aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4internalclass.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-01-10 14:16:22 +0100
committerLars Knoll <lars.knoll@qt.io>2018-04-12 13:59:17 +0000
commit6c8c604f11e7a6d5880e4f951255d496fe905797 (patch)
tree117050abfb2164d45575ee1bfd35de46ddf224b2 /src/qml/jsruntime/qv4internalclass.cpp
parent6b110a30df178b2aaace579841e5bd74f2e9ee99 (diff)
Reorganize Lookup data structure to make marking faster
Do this by always using odd numbers for protoId's, and putting those into the same place as the InternalClass pointers. That makes it possible to quickly check whether the lookup contains a pointer to a valid heap object. Change-Id: I330017b26c090b4dcbbcce1a127dca7ba7e148d1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4internalclass.cpp')
-rw-r--r--src/qml/jsruntime/qv4internalclass.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4internalclass.cpp b/src/qml/jsruntime/qv4internalclass.cpp
index be9a12bc34..a01e42e817 100644
--- a/src/qml/jsruntime/qv4internalclass.cpp
+++ b/src/qml/jsruntime/qv4internalclass.cpp
@@ -145,7 +145,7 @@ void InternalClass::init(ExecutionEngine *engine)
isFrozen = false;
isSealed = false;
isUsedAsProto = false;
- protoId = engine->newInternalClassId();
+ protoId = engine->newProtoId();
// Also internal classes need an internal class pointer. Simply make it point to itself
internalClass.set(engine, this);
@@ -170,7 +170,7 @@ void InternalClass::init(Heap::InternalClass *other)
isSealed = other->isSealed;
isFrozen = other->isFrozen;
isUsedAsProto = other->isUsedAsProto;
- protoId = engine->newInternalClassId();
+ protoId = engine->newProtoId();
internalClass.set(engine, other->internalClass);
}
@@ -611,7 +611,7 @@ Heap::InternalClass *InternalClass::asProtoClass()
static void updateProtoUsage(Heap::Object *o, Heap::InternalClass *ic)
{
if (ic->prototype == o)
- ic->protoId = ic->engine->newInternalClassId();
+ ic->protoId = ic->engine->newProtoId();
for (auto &t : ic->transitions) {
if (t.lookup)
updateProtoUsage(o, t.lookup);