aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4argumentsobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime/qv4argumentsobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4argumentsobject.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp
index 5094bafa66..fccfd50307 100644
--- a/src/qml/jsruntime/qv4argumentsobject.cpp
+++ b/src/qml/jsruntime/qv4argumentsobject.cpp
@@ -69,6 +69,7 @@ ArgumentsObject::ArgumentsObject(CallContext *context)
arrayData->setLength(context->callData->argc);
fullyCreated = true;
} else {
+ hasAccessorProperty = 1;
Q_ASSERT(CalleePropertyIndex == internalClass->find(context->engine->id_callee));
memberData[CalleePropertyIndex].value = context->function->asReturnedValue();
}
@@ -92,14 +93,13 @@ void ArgumentsObject::fullyCreate()
uint numAccessors = qMin((int)context->function->formalParameterCount, context->realArgumentCount);
uint argCount = qMin(context->realArgumentCount, context->callData->argc);
arrayReserve(argCount);
+ initSparseArray();
arrayData->ensureAttributes();
context->engine->requireArgumentsAccessors(numAccessors);
for (uint i = 0; i < (uint)numAccessors; ++i) {
mappedArguments.append(context->callData->args[i]);
- arrayData->data[i] = context->engine->argumentsAccessors.at(i);
- arrayData->setAttributes(i, Attr_Accessor);
+ arraySet(i, context->engine->argumentsAccessors.at(i), Attr_Accessor);
}
- arrayData->setLength(numAccessors);
arrayData->put(numAccessors, context->callData->args + numAccessors, argCount - numAccessors);
for (uint i = numAccessors; i < argCount; ++i)
arrayData->setAttributes(i, Attr_Data);
@@ -124,6 +124,7 @@ bool ArgumentsObject::defineOwnProperty(ExecutionContext *ctx, uint index, const
map = *pd;
mapAttrs = arrayData->attributes(index);
arrayData->setAttributes(index, Attr_Data);
+ pd = arrayData->getProperty(index);
pd->value = mappedArguments.at(index);
}
@@ -139,8 +140,9 @@ bool ArgumentsObject::defineOwnProperty(ExecutionContext *ctx, uint index, const
map.setter()->call(callData);
if (attrs.isWritable()) {
- *pd = map;
arrayData->setAttributes(index, mapAttrs);
+ pd = arrayData->getProperty(index);
+ *pd = map;
}
}