aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4argumentsobject.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@theqtcompany.com>2014-11-01 21:44:57 +0100
committerSimon Hausmann <simon.hausmann@digia.com>2014-11-07 02:00:05 +0100
commitb340caa0d3ebf7f76c0445b2cdd4032d8e3bf8d5 (patch)
treee475eae0dc4a6c68ca3ee41132b573fc76d2dc10 /src/qml/jsruntime/qv4argumentsobject.cpp
parente22fc141c3fc5362f9b906c43a1b7c0dbc1f85a3 (diff)
Get rid of Members and directly store MemberData::Data pointers
And do the same change for ArrayData. Change-Id: Ia1ae56bd0ff586c9b987e15af7a53f395a37054a Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4argumentsobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4argumentsobject.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp
index e8cb788b74..c020e99cbb 100644
--- a/src/qml/jsruntime/qv4argumentsobject.cpp
+++ b/src/qml/jsruntime/qv4argumentsobject.cpp
@@ -65,10 +65,10 @@ ArgumentsObject::Data::Data(CallContext *context)
} else {
args->setHasAccessorProperty();
Q_ASSERT(CalleePropertyIndex == args->internalClass()->find(context->d()->engine->id_callee));
- args->memberData()[CalleePropertyIndex] = context->d()->function->asReturnedValue();
+ args->memberData()->data()[CalleePropertyIndex] = context->d()->function->asReturnedValue();
}
Q_ASSERT(LengthPropertyIndex == args->internalClass()->find(context->d()->engine->id_length));
- args->memberData()[LengthPropertyIndex] = Primitive::fromInt32(context->d()->realArgumentCount);
+ args->memberData()->data()[LengthPropertyIndex] = Primitive::fromInt32(context->d()->realArgumentCount);
}
void ArgumentsObject::fullyCreate()
@@ -80,9 +80,13 @@ void ArgumentsObject::fullyCreate()
uint argCount = qMin(context()->d()->realArgumentCount, context()->d()->callData->argc);
ArrayData::realloc(this, ArrayData::Sparse, argCount, true);
context()->d()->engine->requireArgumentsAccessors(numAccessors);
- mappedArguments().ensureIndex(engine(), numAccessors);
+
+ Scope scope(engine());
+ Scoped<MemberData> md(scope, d()->mappedArguments);
+ if (md)
+ d()->mappedArguments = md->reallocate(engine(), d()->mappedArguments, numAccessors);
for (uint i = 0; i < (uint)numAccessors; ++i) {
- mappedArguments()[i] = context()->d()->callData->args[i];
+ mappedArguments()->data[i] = context()->d()->callData->args[i];
arraySet(i, context()->d()->engine->argumentsAccessors[i], Attr_Accessor);
}
arrayPut(numAccessors, context()->d()->callData->args + numAccessors, argCount - numAccessors);
@@ -111,7 +115,7 @@ bool ArgumentsObject::defineOwnProperty(ExecutionContext *ctx, uint index, const
map.copy(*pd, mapAttrs);
setArrayAttributes(index, Attr_Data);
pd = arrayData()->getProperty(index);
- pd->value = mappedArguments()[index];
+ pd->value = mappedArguments()->data[index];
}
bool strict = ctx->d()->strictMode;
@@ -227,7 +231,8 @@ void ArgumentsObject::markObjects(HeapObject *that, ExecutionEngine *e)
ArgumentsObject::Data *o = static_cast<ArgumentsObject::Data *>(that);
if (o->context)
o->context->mark(e);
- o->mappedArguments.mark(e);
+ if (o->mappedArguments)
+ o->mappedArguments->mark(e);
Object::markObjects(that, e);
}