diff options
author | Lars Knoll <lars.knoll@theqtcompany.com> | 2014-11-01 21:44:57 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-11-07 02:00:05 +0100 |
commit | b340caa0d3ebf7f76c0445b2cdd4032d8e3bf8d5 (patch) | |
tree | e475eae0dc4a6c68ca3ee41132b573fc76d2dc10 /src/qml/jsruntime/qv4argumentsobject.cpp | |
parent | e22fc141c3fc5362f9b906c43a1b7c0dbc1f85a3 (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.cpp | 17 |
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); } |