aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4persistent.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2016-06-16 13:39:57 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2016-06-16 12:32:36 +0000
commitaa7c3b35ef9b737c574f436ea35452019a2ff29c (patch)
treee0656e5e17350f6f9adb4ffebd7cb8521f062cc6 /src/qml/jsruntime/qv4persistent.cpp
parentd2f1e081b9de201fd45e67b78567c6d720d0c6bf (diff)
V4: Always set the tag when boxing a pointer in QV4::Value.
All setters now store tags, so no-one can play loosy-goosy with the boxed values (and accidentally forget to "tag" a value, resulting in random garbage). Change-Id: Ia0b78aa038d3ff46d5292b14bd593de310da16a0 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4persistent.cpp')
-rw-r--r--src/qml/jsruntime/qv4persistent.cpp9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/qml/jsruntime/qv4persistent.cpp b/src/qml/jsruntime/qv4persistent.cpp
index 1b0d6383e0..fd3bd1f660 100644
--- a/src/qml/jsruntime/qv4persistent.cpp
+++ b/src/qml/jsruntime/qv4persistent.cpp
@@ -79,11 +79,9 @@ Page *allocatePage(PersistentValueStorage *storage)
if (p->header.next)
p->header.next->header.prev = &p->header.next;
for (int i = 0; i < kEntriesPerPage - 1; ++i) {
- p->values[i].setTag(QV4::Value::Empty_Type);
- p->values[i].setInt_32(i + 1);
+ p->values[i].setEmpty(i + 1);
}
- p->values[kEntriesPerPage - 1].setTag(QV4::Value::Empty_Type);
- p->values[kEntriesPerPage - 1].setInt_32(-1);
+ p->values[kEntriesPerPage - 1].setEmpty(-1);
storage->firstPage = p;
@@ -205,8 +203,7 @@ void PersistentValueStorage::free(Value *v)
Page *p = getPage(v);
- v->setTag(QV4::Value::Empty_Type);
- v->setInt_32(p->header.freeList);
+ v->setEmpty(p->header.freeList);
p->header.freeList = v - p->values;
if (!--p->header.refCount)
freePage(p);