aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4object.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-10-13 21:03:44 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-14 21:59:59 +0200
commit1be51cc3e7c9ca5256a52136d6fcc9c22c997625 (patch)
treee0c4f1feae828c4f04f0b8b63201627aa20cf43c /src/qml/jsruntime/qv4object.cpp
parent668eca2b9343cf5d79dc1faa6c251595e2e84918 (diff)
inline get_element calls
Inline calls to get_element if the base is an object with a simple array structure, and the index is an integer number. Implemented for 64bit only for now, saves ~25% on crypto.js Change-Id: I3e34a6409169d90d3937f62264707d52a6c2f9f7 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4object.cpp')
-rw-r--r--src/qml/jsruntime/qv4object.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/qml/jsruntime/qv4object.cpp b/src/qml/jsruntime/qv4object.cpp
index 0ccd8e6f62..795362e691 100644
--- a/src/qml/jsruntime/qv4object.cpp
+++ b/src/qml/jsruntime/qv4object.cpp
@@ -76,6 +76,7 @@ Object::Object(ExecutionEngine *engine)
{
vtbl = &static_vtbl;
type = Type_Object;
+ flags = SimpleArray;
memset(memberData, 0, sizeof(Property)*memberDataAlloc);
}
@@ -86,6 +87,7 @@ Object::Object(InternalClass *internalClass)
{
vtbl = &static_vtbl;
type = Type_Object;
+ flags = SimpleArray;
if (internalClass->size >= memberDataAlloc) {
memberDataAlloc = internalClass->size;
@@ -1078,6 +1080,7 @@ void Object::copyArrayData(Object *other)
arrayOffset = 0;
if (other->sparseArray) {
+ flags &= ~SimpleArray;
sparseArray = new SparseArray(*other->sparseArray);
arrayFreeList = other->arrayFreeList;
}
@@ -1226,6 +1229,7 @@ void Object::arraySort(ExecutionContext *context, ObjectRef thisObject, const Va
void Object::initSparse()
{
if (!sparseArray) {
+ flags &= ~SimpleArray;
sparseArray = new SparseArray;
for (int i = 0; i < arrayDataLen; ++i) {
if (!((arrayAttributes && arrayAttributes[i].isGeneric()) || arrayData[i].value.isEmpty())) {
@@ -1302,6 +1306,7 @@ void Object::ensureArrayAttributes()
if (arrayAttributes)
return;
+ flags &= ~SimpleArray;
arrayAttributes = new PropertyAttributes[arrayAlloc];
for (uint i = 0; i < arrayDataLen; ++i)
arrayAttributes[i] = Attr_Data;