From de8a6fd034e740e09c7385523026bc17d769edd3 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 7 Aug 2017 10:10:47 +0200 Subject: Create separate instructions to create both types of arguments objects We know at compile time whether an arguments object should be strict or non strict (unmapped/mapped in ecmascript 6), use separate instructions for both cases. Change-Id: Ia23e68003beeda41a1f3597c0ba0980954c80ec7 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4runtime.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/qml/jsruntime/qv4runtime.cpp') diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index 8def6ecdae..9292fa674b 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -1314,12 +1314,20 @@ ReturnedValue Runtime::method_objectLiteral(ExecutionEngine *engine, const QV4:: return o.asReturnedValue(); } -QV4::ReturnedValue Runtime::method_setupArgumentsObject(ExecutionEngine *engine) +QV4::ReturnedValue Runtime::method_createMappedArgumentsObject(ExecutionEngine *engine) { Q_ASSERT(engine->current->type == Heap::ExecutionContext::Type_CallContext); QV4::CallContext *c = static_cast(engine->currentContext); - QV4::InternalClass *ic = engine->internalClasses[c->d()->strictMode ? EngineBase::Class_StrictArgumentsObject : EngineBase::Class_ArgumentsObject]; - return engine->memoryManager->allocObject(ic, engine->objectPrototype(), c)->asReturnedValue(); + QV4::InternalClass *ic = engine->internalClasses[EngineBase::Class_ArgumentsObject]; + return engine->memoryManager->allocObject(ic, engine->objectPrototype(), c, false)->asReturnedValue(); +} + +QV4::ReturnedValue Runtime::method_createUnmappedArgumentsObject(ExecutionEngine *engine) +{ + Q_ASSERT(engine->current->type == Heap::ExecutionContext::Type_CallContext); + QV4::CallContext *c = static_cast(engine->currentContext); + QV4::InternalClass *ic = engine->internalClasses[EngineBase::Class_StrictArgumentsObject]; + return engine->memoryManager->allocObject(ic, engine->objectPrototype(), c, true)->asReturnedValue(); } #endif // V4_BOOTSTRAP -- cgit v1.2.3