aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4argumentsobject.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-08-07 10:10:47 +0200
committerLars Knoll <lars.knoll@qt.io>2017-08-10 08:18:13 +0000
commitde8a6fd034e740e09c7385523026bc17d769edd3 (patch)
tree9ac9aa98116dfca7f7ab439e1558d9ee3ce54cf2 /src/qml/jsruntime/qv4argumentsobject.cpp
parentb960c796b741b3831b5eaafe583d92f362fdd498 (diff)
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 <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4argumentsobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4argumentsobject.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4argumentsobject.cpp b/src/qml/jsruntime/qv4argumentsobject.cpp
index 5d1d322f7b..6066f612d9 100644
--- a/src/qml/jsruntime/qv4argumentsobject.cpp
+++ b/src/qml/jsruntime/qv4argumentsobject.cpp
@@ -46,19 +46,20 @@ using namespace QV4;
DEFINE_OBJECT_VTABLE(ArgumentsObject);
-void Heap::ArgumentsObject::init(QV4::CallContext *context)
+void Heap::ArgumentsObject::init(QV4::CallContext *context, bool strict)
{
ExecutionEngine *v4 = internalClass->engine;
Object::init();
fullyCreated = false;
+ isStrict = strict;
this->context.set(v4, context->d());
Q_ASSERT(vtable() == QV4::ArgumentsObject::staticVTable());
Scope scope(v4);
Scoped<QV4::ArgumentsObject> args(scope, this);
- if (context->d()->strictMode) {
+ if (isStrict) {
Q_ASSERT(CalleePropertyIndex == args->internalClass()->find(v4->id_callee()));
Q_ASSERT(CallerPropertyIndex == args->internalClass()->find(v4->id_caller()));
args->setProperty(CalleePropertyIndex + QV4::Object::GetterOffset, *v4->thrower());
@@ -127,10 +128,9 @@ bool ArgumentsObject::defineOwnProperty(ExecutionEngine *engine, uint index, con
arrayIndex.set(scope.engine, d()->mappedArguments->values[index]);
}
- bool strict = engine->current->strictMode;
- engine->current->strictMode = false;
bool result = Object::defineOwnProperty2(scope.engine, index, desc, attrs);
- engine->current->strictMode = strict;
+ if (!result)
+ return false;
if (isMapped && attrs.isData()) {
Q_ASSERT(arrayData());
@@ -146,8 +146,6 @@ bool ArgumentsObject::defineOwnProperty(ExecutionEngine *engine, uint index, con
}
}
- if (engine->current->strictMode && !result)
- return engine->throwTypeError();
return result;
}