diff options
author | Lars Knoll <lars.knoll@theqtcompany.com> | 2015-01-19 16:29:48 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2015-01-23 12:30:43 +0100 |
commit | d24b7fb904771ba078ac52e05984b23327ddff3b (patch) | |
tree | 4c67db1a53556187049ba920eabc0137cb4770d9 /src/qml/jsruntime | |
parent | 0c2ab6e20ca23e74055d0a95539315cf1bf360bf (diff) |
Remove the realArgumentsCount member in CallContext
The data is easily available through the CallData, only used by
the Arguments object and we save a pointer in Heap::CallData this way.
For this to work, let CallData::argc always return the real number
of arguments passed into the function.
Change-Id: I59c7c41e8c1af160db09fa794977ab7084c9e12d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r-- | src/qml/jsruntime/qv4argumentsobject.cpp | 12 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4context.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4context_p.h | 1 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4functionobject.cpp | 12 |
4 files changed, 10 insertions, 17 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp index 82a6fd58e2..d7ffbe5a7b 100644 --- a/src/qml/jsruntime/qv4argumentsobject.cpp +++ b/src/qml/jsruntime/qv4argumentsobject.cpp @@ -68,7 +68,7 @@ Heap::ArgumentsObject::ArgumentsObject(QV4::CallContext *context) args->memberData()->data[CalleePropertyIndex] = context->d()->function->asReturnedValue(); } Q_ASSERT(LengthPropertyIndex == args->internalClass()->find(context->d()->engine->id_length)); - args->memberData()->data[LengthPropertyIndex] = Primitive::fromInt32(context->d()->realArgumentCount); + args->memberData()->data[LengthPropertyIndex] = Primitive::fromInt32(context->d()->callData->argc); } void ArgumentsObject::fullyCreate() @@ -76,8 +76,8 @@ void ArgumentsObject::fullyCreate() if (fullyCreated()) return; - uint numAccessors = qMin((int)context()->function->formalParameterCount(), context()->realArgumentCount); - uint argCount = qMin(context()->realArgumentCount, context()->callData->argc); + uint numAccessors = qMin((int)context()->function->formalParameterCount(), context()->callData->argc); + uint argCount = context()->callData->argc; ArrayData::realloc(this, Heap::ArrayData::Sparse, argCount, true); context()->engine->requireArgumentsAccessors(numAccessors); @@ -105,7 +105,7 @@ bool ArgumentsObject::defineOwnProperty(ExecutionEngine *engine, uint index, con ScopedProperty map(scope); PropertyAttributes mapAttrs; bool isMapped = false; - uint numAccessors = qMin((int)context()->function->formalParameterCount(), context()->realArgumentCount); + uint numAccessors = qMin((int)context()->function->formalParameterCount(), context()->callData->argc); if (pd && index < (uint)numAccessors) isMapped = arrayData()->attributes(index).isAccessor() && pd->getter() == context()->engine->argumentsAccessors[index].getter(); @@ -188,8 +188,8 @@ PropertyAttributes ArgumentsObject::queryIndexed(const Managed *m, uint index) if (args->fullyCreated()) return Object::queryIndexed(m, index); - uint numAccessors = qMin((int)args->context()->function->formalParameterCount(), args->context()->realArgumentCount); - uint argCount = qMin(args->context()->realArgumentCount, args->context()->callData->argc); + uint numAccessors = qMin((int)args->context()->function->formalParameterCount(), args->context()->callData->argc); + uint argCount = args->context()->callData->argc; if (index >= argCount) return PropertyAttributes(); if (index >= numAccessors) diff --git a/src/qml/jsruntime/qv4context.cpp b/src/qml/jsruntime/qv4context.cpp index 8c637472a7..b6a4b0ff4b 100644 --- a/src/qml/jsruntime/qv4context.cpp +++ b/src/qml/jsruntime/qv4context.cpp @@ -57,7 +57,6 @@ Heap::CallContext *ExecutionContext::newCallContext(FunctionObject *function, Ca new (c) Heap::CallContext(d()->engine, Heap::ExecutionContext::Type_CallContext); c->function = function->d(); - c->realArgumentCount = callData->argc; c->strictMode = function->strictMode(); c->outer = function->scope(); @@ -77,7 +76,6 @@ Heap::CallContext *ExecutionContext::newCallContext(FunctionObject *function, Ca ::memcpy(c->callData, callData, sizeof(CallData) + (callData->argc - 1) * sizeof(Value)); if (callData->argc < static_cast<int>(compiledFunction->nFormals)) std::fill(c->callData->args + c->callData->argc, c->callData->args + compiledFunction->nFormals, Primitive::undefinedValue()); - c->callData->argc = qMax((uint)callData->argc, compiledFunction->nFormals); return c; } diff --git a/src/qml/jsruntime/qv4context_p.h b/src/qml/jsruntime/qv4context_p.h index 1431c5ac82..93cd9d4ea9 100644 --- a/src/qml/jsruntime/qv4context_p.h +++ b/src/qml/jsruntime/qv4context_p.h @@ -107,7 +107,6 @@ struct CallContext : ExecutionContext { CallContext(ExecutionEngine *engine, QV4::Object *qml, QV4::FunctionObject *function); FunctionObject *function; - int realArgumentCount; Value *locals; Object *activation; }; diff --git a/src/qml/jsruntime/qv4functionobject.cpp b/src/qml/jsruntime/qv4functionobject.cpp index 63efb4f9f6..ed96cceb9a 100644 --- a/src/qml/jsruntime/qv4functionobject.cpp +++ b/src/qml/jsruntime/qv4functionobject.cpp @@ -498,10 +498,8 @@ ReturnedValue SimpleScriptFunction::construct(Managed *that, CallData *callData) ctx.lookups = ctx.compilationUnit->runtimeLookups; ctx.outer = f->scope(); ctx.locals = scope.alloc(f->varCount()); - while (callData->argc < (int)f->formalParameterCount()) { - callData->args[callData->argc] = Encode::undefined(); - ++callData->argc; - } + for (int i = callData->argc; i < (int)f->formalParameterCount(); ++i) + callData->args[i] = Encode::undefined(); Q_ASSERT(v4->currentContext() == &ctx); ScopedObject result(scope, Q_V4_PROFILE(v4, f->function())); @@ -535,10 +533,8 @@ ReturnedValue SimpleScriptFunction::call(Managed *that, CallData *callData) ctx.lookups = ctx.compilationUnit->runtimeLookups; ctx.outer = f->scope(); ctx.locals = scope.alloc(f->varCount()); - while (callData->argc < (int)f->formalParameterCount()) { - callData->args[callData->argc] = Encode::undefined(); - ++callData->argc; - } + for (int i = callData->argc; i < (int)f->formalParameterCount(); ++i) + callData->args[i] = Encode::undefined(); Q_ASSERT(v4->currentContext() == &ctx); ScopedValue result(scope, Q_V4_PROFILE(v4, f->function())); |