diff options
author | Lars Knoll <[email protected]> | 2014-01-09 11:05:08 +0100 |
---|---|---|
committer | The Qt Project <[email protected]> | 2014-01-20 21:14:27 +0100 |
commit | 5c25379cd1889dc16187c0ec62f32d2b17a320cf (patch) | |
tree | 23bb7bef5b2378ffe0e4193bf753811f4bf843f4 /src/qml/jsruntime/qv4functionobject.cpp | |
parent | e2d9917878968986a9df21c9cfafc32a2360aee7 (diff) |
Save memory on array data
Store a simple vector of Values in the array data,
instead of a Vector of Property's. This halfes the
memory consumption on 64bit and simplifies our code.
If an indexed property gets converted to an accessor
property, we simply convert the ArrayData into a
SparseArrayData.
Add support in SparseArrayData to allocate double slots
(two Value's) to hold a full Property in case someone
sets an accessor on an indexed property.
Some methods still return a Property*, but this is safe, as
only the first Value in the Property pointer will ever get
accessed if the Property doesn't contain an accessor.
Change-Id: Ic9b0f309b09a2772a328d947a10faaf3be9fe56f
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src/qml/jsruntime/qv4functionobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index daa3d5b0de..858d625725 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -351,8 +351,8 @@ ReturnedValue FunctionPrototype::method_apply(CallContext *ctx) callData->args[i] = arr->getIndexed(i); } else { int alen = qMin(len, arr->arrayData->length()); - for (int i = 0; i < alen; ++i) - callData->args[i] = arr->arrayData->data[i].value; + if (alen) + memcpy(callData->args, arr->arrayData->data, alen*sizeof(SafeValue)); for (quint32 i = alen; i < len; ++i) callData->args[i] = Primitive::undefinedValue(); } |