diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-07-30 22:08:39 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-07-30 20:44:55 +0000 |
commit | 26f2eabe2847a3c98d7b84b09531ff82b13fcd67 (patch) | |
tree | 4369d83ae99ec2d986ada1effb38fda8a97cc49c /src/qml/jsruntime/qv4arrayobject.cpp | |
parent | 1cde99fbafe035cbd88237d8e0a3b52b780f68af (diff) |
Add support for @@unscopables
See ES7 spec, chapter 22.1.3.32
Change-Id: Ibe7df71cbc1bc848e205b9ca682f24841adfa2d9
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4arrayobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4arrayobject.cpp | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/src/qml/jsruntime/qv4arrayobject.cpp b/src/qml/jsruntime/qv4arrayobject.cpp index 4dbb61298e..450916fbf7 100644 --- a/src/qml/jsruntime/qv4arrayobject.cpp +++ b/src/qml/jsruntime/qv4arrayobject.cpp @@ -100,15 +100,34 @@ void ArrayPrototype::init(ExecutionEngine *engine, Object *ctor) ctor->defineDefaultProperty(QStringLiteral("from"), method_from, 1); ctor->addSymbolSpecies(); + ScopedObject unscopables(scope, engine->newObject(engine->classes[EngineBase::Class_Empty]->changeVTable(QV4::Object::staticVTable()))); + ScopedString name(scope); defineDefaultProperty(QStringLiteral("constructor"), (o = ctor)); defineDefaultProperty(engine->id_toString(), method_toString, 0); defineDefaultProperty(QStringLiteral("toLocaleString"), method_toLocaleString, 0); defineDefaultProperty(QStringLiteral("concat"), method_concat, 1); - defineDefaultProperty(QStringLiteral("copyWithin"), method_copyWithin, 2); - defineDefaultProperty(QStringLiteral("entries"), method_entries, 0); - defineDefaultProperty(QStringLiteral("find"), method_find, 1); - defineDefaultProperty(QStringLiteral("findIndex"), method_findIndex, 1); + name = engine->newIdentifier(QStringLiteral("copyWithin")); + unscopables->put(name, Primitive::fromBoolean(true)); + defineDefaultProperty(name, method_copyWithin, 2); + name = engine->newIdentifier(QStringLiteral("entries")); + unscopables->put(name, Primitive::fromBoolean(true)); + defineDefaultProperty(name, method_entries, 0); + name = engine->newIdentifier(QStringLiteral("fill")); + unscopables->put(name, Primitive::fromBoolean(true)); + defineDefaultProperty(name, method_fill, 1); + name = engine->newIdentifier(QStringLiteral("find")); + unscopables->put(name, Primitive::fromBoolean(true)); + defineDefaultProperty(name, method_find, 1); + name = engine->newIdentifier(QStringLiteral("findIndex")); + unscopables->put(name, Primitive::fromBoolean(true)); + defineDefaultProperty(name, method_findIndex, 1); + name = engine->newIdentifier(QStringLiteral("includes")); + unscopables->put(name, Primitive::fromBoolean(true)); + defineDefaultProperty(name, method_includes, 1); defineDefaultProperty(QStringLiteral("join"), method_join, 1); + name = engine->newIdentifier(QStringLiteral("keys")); + unscopables->put(name, Primitive::fromBoolean(true)); + defineDefaultProperty(name, method_keys, 0); defineDefaultProperty(QStringLiteral("pop"), method_pop, 0); defineDefaultProperty(QStringLiteral("push"), method_push, 1); defineDefaultProperty(QStringLiteral("reverse"), method_reverse, 0); @@ -117,12 +136,9 @@ void ArrayPrototype::init(ExecutionEngine *engine, Object *ctor) defineDefaultProperty(QStringLiteral("sort"), method_sort, 1); defineDefaultProperty(QStringLiteral("splice"), method_splice, 2); defineDefaultProperty(QStringLiteral("unshift"), method_unshift, 1); - defineDefaultProperty(QStringLiteral("includes"), method_includes, 1); defineDefaultProperty(QStringLiteral("indexOf"), method_indexOf, 1); - defineDefaultProperty(QStringLiteral("keys"), method_keys, 0); defineDefaultProperty(QStringLiteral("lastIndexOf"), method_lastIndexOf, 1); defineDefaultProperty(QStringLiteral("every"), method_every, 1); - defineDefaultProperty(QStringLiteral("fill"), method_fill, 1); defineDefaultProperty(QStringLiteral("some"), method_some, 1); defineDefaultProperty(QStringLiteral("forEach"), method_forEach, 1); defineDefaultProperty(QStringLiteral("map"), method_map, 1); @@ -132,8 +148,11 @@ void ArrayPrototype::init(ExecutionEngine *engine, Object *ctor) ScopedString valuesString(scope, engine->newIdentifier(QStringLiteral("values"))); ScopedObject values(scope, FunctionObject::createBuiltinFunction(engine, valuesString, method_values, 0)); engine->jsObjects[ExecutionEngine::ArrayProtoValues] = values; - defineDefaultProperty(QStringLiteral("values"), values); + unscopables->put(valuesString, Primitive::fromBoolean(true)); + defineDefaultProperty(valuesString, values); defineDefaultProperty(engine->symbol_iterator(), values); + + defineReadonlyConfigurableProperty(engine->symbol_unscopables(), unscopables); } ReturnedValue ArrayPrototype::method_isArray(const FunctionObject *, const Value *, const Value *argv, int argc) |