diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-06-15 23:00:32 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-06-21 19:43:41 +0000 |
commit | 12bc11e5af20e68c504ab56de8ef0e0b76efd12c (patch) | |
tree | 5a86e65d4da3dc90cd43ed02dd456106e3231990 | |
parent | 99d8808bc5b85d54e8e735953a27a0c0c788f10e (diff) |
Add support for Reflect
Implemented all methods in Reflect, only some smaller
bugs left in there.
Change-Id: I53d2304d0e59566aec64e200cd995e02afcfc33e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r-- | src/qml/jsruntime/jsruntime.pri | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4internalclass.cpp | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4reflect.cpp | 270 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4reflect_p.h | 89 | ||||
-rw-r--r-- | tests/auto/qml/ecmascripttests/TestExpectations | 135 | ||||
-rw-r--r-- | tests/auto/qml/qjsengine/tst_qjsengine.cpp | 1 |
7 files changed, 365 insertions, 136 deletions
diff --git a/src/qml/jsruntime/jsruntime.pri b/src/qml/jsruntime/jsruntime.pri index 97610a0e40..a2408d7d2a 100644 --- a/src/qml/jsruntime/jsruntime.pri +++ b/src/qml/jsruntime/jsruntime.pri @@ -31,6 +31,7 @@ SOURCES += \ $$PWD/qv4object.cpp \ $$PWD/qv4objectproto.cpp \ $$PWD/qv4qmlcontext.cpp \ + $$PWD/qv4reflect.cpp \ $$PWD/qv4regexpobject.cpp \ $$PWD/qv4stringiterator.cpp \ $$PWD/qv4stringobject.cpp \ @@ -89,6 +90,7 @@ HEADERS += \ $$PWD/qv4object_p.h \ $$PWD/qv4objectproto_p.h \ $$PWD/qv4qmlcontext_p.h \ + $$PWD/qv4reflect_p.h \ $$PWD/qv4regexpobject_p.h \ $$PWD/qv4runtimecodegen_p.h \ $$PWD/qv4stringiterator_p.h \ diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 6e8dfbc09c..a8331f153e 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -72,6 +72,7 @@ #include "qv4iterator_p.h" #include "qv4stringiterator_p.h" #include "qv4generatorobject_p.h" +#include "qv4reflect_p.h" #if QT_CONFIG(qml_sequence_object) #include "qv4sequenceobject_p.h" @@ -530,6 +531,7 @@ ExecutionEngine::ExecutionEngine(QJSEngine *jsEngine) ScopedObject o(scope); globalObject->defineDefaultProperty(QStringLiteral("Math"), (o = memoryManager->allocate<MathObject>())); globalObject->defineDefaultProperty(QStringLiteral("JSON"), (o = memoryManager->allocate<JsonObject>())); + globalObject->defineDefaultProperty(QStringLiteral("Reflect"), (o = memoryManager->allocate<Reflect>())); globalObject->defineReadonlyProperty(QStringLiteral("undefined"), Primitive::undefinedValue()); globalObject->defineReadonlyProperty(QStringLiteral("NaN"), Primitive::fromDouble(std::numeric_limits<double>::quiet_NaN())); diff --git a/src/qml/jsruntime/qv4internalclass.cpp b/src/qml/jsruntime/qv4internalclass.cpp index da37fda590..a913d5ca75 100644 --- a/src/qml/jsruntime/qv4internalclass.cpp +++ b/src/qml/jsruntime/qv4internalclass.cpp @@ -294,7 +294,7 @@ Heap::InternalClass *InternalClass::changeMember(Identifier identifier, Property for (uint i = 0; i < size; ++i) { Identifier identifier = nameMap.at(i); PropertyHash::Entry e = { identifier, newClass->size }; - if (!identifier.isValid()) + if (i && !identifier.isValid()) e.identifier = nameMap.at(i - 1); newClass->propertyTable.addEntry(e, newClass->size); newClass->nameMap.add(newClass->size, identifier); diff --git a/src/qml/jsruntime/qv4reflect.cpp b/src/qml/jsruntime/qv4reflect.cpp new file mode 100644 index 0000000000..69baecd337 --- /dev/null +++ b/src/qml/jsruntime/qv4reflect.cpp @@ -0,0 +1,270 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qv4reflect_p.h" +#include "qv4symbol_p.h" +#include "qv4runtimeapi_p.h" +#include "qv4objectproto_p.h" + +using namespace QV4; + +DEFINE_OBJECT_VTABLE(Reflect); + +void Heap::Reflect::init() +{ + Object::init(); + Scope scope(internalClass->engine); + ScopedObject r(scope, this); + + r->defineDefaultProperty(QStringLiteral("apply"), QV4::Reflect::method_apply, 3); + r->defineDefaultProperty(QStringLiteral("construct"), QV4::Reflect::method_construct, 2); + r->defineDefaultProperty(QStringLiteral("defineProperty"), QV4::Reflect::method_defineProperty, 3); + r->defineDefaultProperty(QStringLiteral("deleteProperty"), QV4::Reflect::method_deleteProperty, 2); + r->defineDefaultProperty(QStringLiteral("get"), QV4::Reflect::method_get, 2); + r->defineDefaultProperty(QStringLiteral("getOwnPropertyDescriptor"), QV4::Reflect::method_getOwnPropertyDescriptor, 2); + r->defineDefaultProperty(QStringLiteral("getPrototypeOf"), QV4::Reflect::method_getPrototypeOf, 1); + r->defineDefaultProperty(QStringLiteral("has"), QV4::Reflect::method_has, 2); + r->defineDefaultProperty(QStringLiteral("isExtensible"), QV4::Reflect::method_isExtensible, 1); + r->defineDefaultProperty(QStringLiteral("ownKeys"), QV4::Reflect::method_ownKeys, 1); + r->defineDefaultProperty(QStringLiteral("preventExtensions"), QV4::Reflect::method_preventExtensions, 1); + r->defineDefaultProperty(QStringLiteral("set"), QV4::Reflect::method_set, 3); + r->defineDefaultProperty(QStringLiteral("setPrototypeOf"), QV4::Reflect::method_setPrototypeOf, 2); +} + +struct CallArgs { + Value *argv; + int argc; +}; + +static CallArgs createListFromArrayLike(Scope &scope, const Object *o) +{ + int len = o->getLength(); + Value *arguments = scope.alloc(len); + + for (int i = 0; i < len; ++i) { + arguments[i] = o->getIndexed(i); + if (scope.hasException()) + return { nullptr, 0 }; + } + return { arguments, len }; +} + +ReturnedValue Reflect::method_apply(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + Scope scope(f); + if (argc < 3 || !argv[0].isFunctionObject() || !argv[2].isObject()) + return scope.engine->throwTypeError(); + + const Object *o = static_cast<const Object *>(argv + 2); + CallArgs arguments = createListFromArrayLike(scope, o); + if (scope.hasException()) + return Encode::undefined(); + + return static_cast<const FunctionObject &>(argv[0]).call(&argv[1], arguments.argv, arguments.argc); +} + +ReturnedValue Reflect::method_construct(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + Scope scope(f); + if (argc < 2 || !argv[0].isFunctionObject() || !argv[1].isObject()) + return scope.engine->throwTypeError(); + + const Object *o = static_cast<const Object *>(argv + 1); + CallArgs arguments = createListFromArrayLike(scope, o); + if (scope.hasException()) + return Encode::undefined(); + + return static_cast<const FunctionObject &>(argv[0]).callAsConstructor(arguments.argv, arguments.argc); +} + +ReturnedValue Reflect::method_defineProperty(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + Scope scope(f); + if (!argc || !argv[0].isObject()) + return scope.engine->throwTypeError(); + + ScopedObject O(scope, argv[0]); + ScopedStringOrSymbol name(scope, (argc > 1 ? argv[1] : Primitive::undefinedValue()).toPropertyKey(scope.engine)); + if (scope.engine->hasException) + return QV4::Encode::undefined(); + + ScopedValue attributes(scope, argc > 2 ? argv[2] : Primitive::undefinedValue()); + ScopedProperty pd(scope); + PropertyAttributes attrs; + ObjectPrototype::toPropertyDescriptor(scope.engine, attributes, pd, &attrs); + if (scope.engine->hasException) + return QV4::Encode::undefined(); + + bool result = O->__defineOwnProperty__(scope.engine, name, pd, attrs); + + return Encode(result); +} + +ReturnedValue Reflect::method_deleteProperty(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + ExecutionEngine *e = f->engine(); + if (!argc || !argv[0].isObject()) + return e->throwTypeError(); + + bool result = Runtime::method_deleteProperty(e, argv[0], argc > 1 ? argv[1] : Primitive::undefinedValue()); + return Encode(result); +} + +ReturnedValue Reflect::method_get(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + // ### Fix third receiver argument + Scope scope(f); + if (!argc || !argv[0].isObject()) + return scope.engine->throwTypeError(); + + ScopedObject o(scope, static_cast<const Object *>(argv)); + Value undef = Primitive::undefinedValue(); + const Value *index = argc > 1 ? &argv[1] : &undef; + + uint n = index->asArrayIndex(); + if (n < UINT_MAX) + return Encode(o->getIndexed(n)); + + ScopedStringOrSymbol name(scope, index->toPropertyKey(scope.engine)); + if (scope.engine->hasException) + return false; + return Encode(o->get(name)); +} + +ReturnedValue Reflect::method_getOwnPropertyDescriptor(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc) +{ + if (!argc || !argv[0].isObject()) + return f->engine()->throwTypeError(); + + return ObjectPrototype::method_getOwnPropertyDescriptor(f, thisObject, argv, argc); +} + +ReturnedValue Reflect::method_getPrototypeOf(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc) +{ + if (!argc || !argv[0].isObject()) + return f->engine()->throwTypeError(); + + return ObjectPrototype::method_getPrototypeOf(f, thisObject, argv, argc); +} + +ReturnedValue Reflect::method_has(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + Scope scope(f); + if (!argc || !argv[0].isObject()) + return scope.engine->throwTypeError(); + + ScopedObject o(scope, static_cast<const Object *>(argv)); + Value undef = Primitive::undefinedValue(); + const Value *index = argc > 1 ? &argv[1] : &undef; + + bool hasProperty = false; + uint n = index->asArrayIndex(); + if (n < UINT_MAX) { + (void) o->getIndexed(n, &hasProperty); + return Encode(hasProperty); + } + + ScopedStringOrSymbol name(scope, index->toPropertyKey(scope.engine)); + if (scope.engine->hasException) + return false; + (void) o->get(name, &hasProperty); + return Encode(hasProperty); +} + +ReturnedValue Reflect::method_isExtensible(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + if (!argc || !argv[0].isObject()) + return f->engine()->throwTypeError(); + + const Object *o = static_cast<const Object *>(argv); + return Encode(o->isExtensible()); +} + + +ReturnedValue Reflect::method_ownKeys(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc) +{ + if (!argc || !argv[0].isObject()) + return f->engine()->throwTypeError(); + + return ObjectPrototype::method_getOwnPropertyNames(f, thisObject, argv, argc); +} + +ReturnedValue Reflect::method_preventExtensions(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + Scope scope(f); + if (!argc || !argv[0].isObject()) + return scope.engine->throwTypeError(); + + ScopedObject o(scope, static_cast<const Object *>(argv)); + o->setInternalClass(o->internalClass()->nonExtensible()); + return Encode(true); +} + +ReturnedValue Reflect::method_set(const FunctionObject *f, const Value *, const Value *argv, int argc) +{ + // ### Fix third receiver argument + Scope scope(f); + if (!argc || !argv[0].isObject()) + return scope.engine->throwTypeError(); + + ScopedObject o(scope, static_cast<const Object *>(argv)); + Value undef = Primitive::undefinedValue(); + const Value *index = argc > 1 ? &argv[1] : &undef; + const Value &val = argc > 2 ? argv[2] : undef; + + uint n = index->asArrayIndex(); + if (n < UINT_MAX) { + bool result = o->putIndexed(n, val); + return Encode(result); + } + + ScopedStringOrSymbol name(scope, index->toPropertyKey(scope.engine)); + if (scope.engine->hasException) + return false; + bool result = o->put(name, val); + return Encode(result); +} + +ReturnedValue Reflect::method_setPrototypeOf(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc) +{ + if (argc < 2 || !argv[0].isObject()) + return f->engine()->throwTypeError(); + + return ObjectPrototype::method_setPrototypeOf(f, thisObject, argv, argc); +} diff --git a/src/qml/jsruntime/qv4reflect_p.h b/src/qml/jsruntime/qv4reflect_p.h new file mode 100644 index 0000000000..73d257e006 --- /dev/null +++ b/src/qml/jsruntime/qv4reflect_p.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQml module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QV4REFLECT_H +#define QV4REFLECT_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qv4object_p.h" + +QT_BEGIN_NAMESPACE + +namespace QV4 { + +namespace Heap { + +struct Reflect : Object { + void init(); +}; + +} + +struct Reflect : Object { + V4_OBJECT2(Reflect, Object) + + static ReturnedValue method_apply(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_construct(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_defineProperty(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_deleteProperty(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_get(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_getOwnPropertyDescriptor(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_getPrototypeOf(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_has(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_isExtensible(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_ownKeys(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_preventExtensions(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_set(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); + static ReturnedValue method_setPrototypeOf(const FunctionObject *, const Value *thisObject, const Value *argv, int argc); +}; + +} + +QT_END_NAMESPACE + +#endif diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations index edb24db8fb..6ab538df53 100644 --- a/tests/auto/qml/ecmascripttests/TestExpectations +++ b/tests/auto/qml/ecmascripttests/TestExpectations @@ -142,7 +142,6 @@ built-ins/Array/prototype/unshift/throws-if-integer-limit-exceeded.js fails built-ins/ArrayBuffer/data-allocation-after-object-creation.js fails built-ins/ArrayBuffer/isView/arg-is-dataview-subclass-instance.js fails built-ins/ArrayBuffer/isView/arg-is-typedarray-subclass-instance.js fails -built-ins/ArrayBuffer/newtarget-prototype-is-not-object.js fails built-ins/ArrayBuffer/proto-from-ctor-realm.js fails built-ins/ArrayBuffer/prototype-from-newtarget.js fails built-ins/ArrayBuffer/prototype/byteLength/detached-buffer.js fails @@ -262,7 +261,6 @@ built-ins/Atomics/xor/nonshared-int-views.js fails built-ins/Atomics/xor/shared-nonint-views.js fails built-ins/Boolean/proto-from-ctor-realm.js fails built-ins/DataView/custom-proto-access-throws.js fails -built-ins/DataView/custom-proto-if-not-object-fallbacks-to-default-prototype.js fails built-ins/DataView/custom-proto-if-object-is-used.js fails built-ins/DataView/detached-buffer.js fails built-ins/DataView/length.js fails @@ -692,10 +690,6 @@ built-ins/Object/getPrototypeOf/15.2.3.2-2-14.js fails built-ins/Object/getPrototypeOf/15.2.3.2-2-15.js fails built-ins/Object/getPrototypeOf/15.2.3.2-2-16.js fails built-ins/Object/getPrototypeOf/15.2.3.2-2-17.js fails -built-ins/Object/internals/DefineOwnProperty/consistent-value-function-arguments.js fails -built-ins/Object/internals/DefineOwnProperty/consistent-value-function-caller.js fails -built-ins/Object/internals/DefineOwnProperty/consistent-value-regexp-$1.js fails -built-ins/Object/internals/DefineOwnProperty/consistent-writable-regexp-$1.js fails built-ins/Object/isExtensible/15.2.3.13-1-1.js fails built-ins/Object/isExtensible/15.2.3.13-1-2.js fails built-ins/Object/isFrozen/15.2.3.12-1-1.js fails @@ -1120,143 +1114,32 @@ built-ins/Proxy/setPrototypeOf/toboolean-trap-result-true-target-is-extensible.j built-ins/Proxy/setPrototypeOf/trap-is-not-callable-realm.js fails built-ins/Proxy/setPrototypeOf/trap-is-not-callable.js fails built-ins/Proxy/setPrototypeOf/trap-is-undefined-or-null.js fails -built-ins/Reflect/Reflect.js fails -built-ins/Reflect/apply/apply.js fails -built-ins/Reflect/apply/arguments-list-is-not-array-like.js fails -built-ins/Reflect/apply/call-target.js fails -built-ins/Reflect/apply/length.js fails -built-ins/Reflect/apply/name.js fails -built-ins/Reflect/apply/return-target-call-result.js fails -built-ins/Reflect/apply/target-is-not-callable-throws.js fails -built-ins/Reflect/construct/arguments-list-is-not-array-like.js fails -built-ins/Reflect/construct/construct.js fails -built-ins/Reflect/construct/length.js fails -built-ins/Reflect/construct/name.js fails built-ins/Reflect/construct/newtarget-is-not-constructor-throws.js fails built-ins/Reflect/construct/return-with-newtarget-argument.js fails -built-ins/Reflect/construct/return-without-newtarget-argument.js fails -built-ins/Reflect/construct/target-is-not-constructor-throws.js fails -built-ins/Reflect/construct/use-arguments-list.js fails -built-ins/Reflect/defineProperty/define-properties.js fails -built-ins/Reflect/defineProperty/define-symbol-properties.js fails -built-ins/Reflect/defineProperty/defineProperty.js fails -built-ins/Reflect/defineProperty/length.js fails -built-ins/Reflect/defineProperty/name.js fails -built-ins/Reflect/defineProperty/return-abrupt-from-attributes.js fails -built-ins/Reflect/defineProperty/return-abrupt-from-property-key.js fails built-ins/Reflect/defineProperty/return-abrupt-from-result.js fails -built-ins/Reflect/defineProperty/return-boolean.js fails -built-ins/Reflect/defineProperty/target-is-not-object-throws.js fails -built-ins/Reflect/defineProperty/target-is-symbol-throws.js fails -built-ins/Reflect/deleteProperty/delete-properties.js fails -built-ins/Reflect/deleteProperty/delete-symbol-properties.js fails -built-ins/Reflect/deleteProperty/deleteProperty.js fails -built-ins/Reflect/deleteProperty/length.js fails -built-ins/Reflect/deleteProperty/name.js fails -built-ins/Reflect/deleteProperty/return-abrupt-from-property-key.js fails built-ins/Reflect/deleteProperty/return-abrupt-from-result.js fails -built-ins/Reflect/deleteProperty/return-boolean.js fails -built-ins/Reflect/deleteProperty/target-is-not-object-throws.js fails -built-ins/Reflect/deleteProperty/target-is-symbol-throws.js fails -built-ins/Reflect/enumerate/undefined.js fails -built-ins/Reflect/get/get.js fails -built-ins/Reflect/get/length.js fails -built-ins/Reflect/get/name.js fails -built-ins/Reflect/get/return-abrupt-from-property-key.js fails -built-ins/Reflect/get/return-abrupt-from-result.js fails built-ins/Reflect/get/return-value-from-receiver.js fails -built-ins/Reflect/get/return-value-from-symbol-key.js fails -built-ins/Reflect/get/return-value.js fails -built-ins/Reflect/get/target-is-not-object-throws.js fails -built-ins/Reflect/get/target-is-symbol-throws.js fails -built-ins/Reflect/getOwnPropertyDescriptor/getOwnPropertyDescriptor.js fails -built-ins/Reflect/getOwnPropertyDescriptor/length.js fails -built-ins/Reflect/getOwnPropertyDescriptor/name.js fails -built-ins/Reflect/getOwnPropertyDescriptor/return-abrupt-from-property-key.js fails built-ins/Reflect/getOwnPropertyDescriptor/return-abrupt-from-result.js fails -built-ins/Reflect/getOwnPropertyDescriptor/return-from-accessor-descriptor.js fails -built-ins/Reflect/getOwnPropertyDescriptor/return-from-data-descriptor.js fails -built-ins/Reflect/getOwnPropertyDescriptor/symbol-property.js fails -built-ins/Reflect/getOwnPropertyDescriptor/target-is-not-object-throws.js fails -built-ins/Reflect/getOwnPropertyDescriptor/target-is-symbol-throws.js fails -built-ins/Reflect/getOwnPropertyDescriptor/undefined-own-property.js fails -built-ins/Reflect/getOwnPropertyDescriptor/undefined-property.js fails -built-ins/Reflect/getPrototypeOf/getPrototypeOf.js fails -built-ins/Reflect/getPrototypeOf/length.js fails -built-ins/Reflect/getPrototypeOf/name.js fails -built-ins/Reflect/getPrototypeOf/null-prototype.js fails built-ins/Reflect/getPrototypeOf/return-abrupt-from-result.js fails -built-ins/Reflect/getPrototypeOf/return-prototype.js fails -built-ins/Reflect/getPrototypeOf/skip-own-properties.js fails -built-ins/Reflect/getPrototypeOf/target-is-not-object-throws.js fails -built-ins/Reflect/getPrototypeOf/target-is-symbol-throws.js fails -built-ins/Reflect/has/has.js fails -built-ins/Reflect/has/length.js fails -built-ins/Reflect/has/name.js fails -built-ins/Reflect/has/return-abrupt-from-property-key.js fails built-ins/Reflect/has/return-abrupt-from-result.js fails -built-ins/Reflect/has/return-boolean.js fails -built-ins/Reflect/has/symbol-property.js fails -built-ins/Reflect/has/target-is-not-object-throws.js fails -built-ins/Reflect/has/target-is-symbol-throws.js fails -built-ins/Reflect/isExtensible/isExtensible.js fails -built-ins/Reflect/isExtensible/length.js fails -built-ins/Reflect/isExtensible/name.js fails built-ins/Reflect/isExtensible/return-abrupt-from-result.js fails -built-ins/Reflect/isExtensible/return-boolean.js fails -built-ins/Reflect/isExtensible/target-is-not-object-throws.js fails -built-ins/Reflect/isExtensible/target-is-symbol-throws.js fails -built-ins/Reflect/object-prototype.js fails -built-ins/Reflect/ownKeys/length.js fails -built-ins/Reflect/ownKeys/name.js fails -built-ins/Reflect/ownKeys/ownKeys.js fails built-ins/Reflect/ownKeys/return-abrupt-from-result.js fails -built-ins/Reflect/ownKeys/return-array-with-own-keys-only.js fails -built-ins/Reflect/ownKeys/return-empty-array.js fails -built-ins/Reflect/ownKeys/return-non-enumerable-keys.js fails built-ins/Reflect/ownKeys/return-on-corresponding-order.js fails -built-ins/Reflect/ownKeys/target-is-not-object-throws.js fails -built-ins/Reflect/ownKeys/target-is-symbol-throws.js fails -built-ins/Reflect/preventExtensions/always-return-true-from-ordinary-object.js fails -built-ins/Reflect/preventExtensions/length.js fails -built-ins/Reflect/preventExtensions/name.js fails -built-ins/Reflect/preventExtensions/prevent-extensions.js fails -built-ins/Reflect/preventExtensions/preventExtensions.js fails built-ins/Reflect/preventExtensions/return-abrupt-from-result.js fails built-ins/Reflect/preventExtensions/return-boolean-from-proxy-object.js fails -built-ins/Reflect/preventExtensions/target-is-not-object-throws.js fails -built-ins/Reflect/preventExtensions/target-is-symbol-throws.js fails -built-ins/Reflect/properties.js fails -built-ins/Reflect/set/call-prototype-property-set.js fails built-ins/Reflect/set/creates-a-data-descriptor.js fails built-ins/Reflect/set/different-property-descriptors.js fails -built-ins/Reflect/set/length.js fails -built-ins/Reflect/set/name.js fails built-ins/Reflect/set/receiver-is-not-object.js fails -built-ins/Reflect/set/return-abrupt-from-property-key.js fails -built-ins/Reflect/set/return-abrupt-from-result.js fails -built-ins/Reflect/set/return-false-if-receiver-is-not-writable.js fails built-ins/Reflect/set/return-false-if-target-is-not-writable.js fails built-ins/Reflect/set/set-value-on-accessor-descriptor-with-receiver.js fails -built-ins/Reflect/set/set-value-on-accessor-descriptor.js fails built-ins/Reflect/set/set-value-on-data-descriptor.js fails -built-ins/Reflect/set/set.js fails built-ins/Reflect/set/symbol-property.js fails -built-ins/Reflect/set/target-is-not-object-throws.js fails -built-ins/Reflect/set/target-is-symbol-throws.js fails -built-ins/Reflect/setPrototypeOf/length.js fails -built-ins/Reflect/setPrototypeOf/name.js fails -built-ins/Reflect/setPrototypeOf/proto-is-not-object-and-not-null-throws.js fails -built-ins/Reflect/setPrototypeOf/proto-is-symbol-throws.js fails built-ins/Reflect/setPrototypeOf/return-abrupt-from-result.js fails built-ins/Reflect/setPrototypeOf/return-false-if-target-and-proto-are-the-same.js fails built-ins/Reflect/setPrototypeOf/return-false-if-target-is-not-extensible.js fails built-ins/Reflect/setPrototypeOf/return-false-if-target-is-prototype-of-proto.js fails built-ins/Reflect/setPrototypeOf/return-true-if-new-prototype-is-set.js fails built-ins/Reflect/setPrototypeOf/return-true-if-proto-is-current.js fails -built-ins/Reflect/setPrototypeOf/setPrototypeOf.js fails -built-ins/Reflect/setPrototypeOf/target-is-not-object-throws.js fails -built-ins/Reflect/setPrototypeOf/target-is-symbol-throws.js fails built-ins/RegExp/15.10.4.1-1.js fails built-ins/RegExp/S15.10.2.12_A2_T1.js fails built-ins/RegExp/S15.10.3.1_A2_T1.js fails @@ -2034,21 +1917,17 @@ built-ins/TypedArrays/ctors/buffer-arg/detachedbuffer.js fails built-ins/TypedArrays/ctors/buffer-arg/length-to-number-detachbuffer.js fails built-ins/TypedArrays/ctors/buffer-arg/proto-from-ctor-realm.js fails built-ins/TypedArrays/ctors/buffer-arg/use-custom-proto-if-object.js fails -built-ins/TypedArrays/ctors/buffer-arg/use-default-proto-if-custom-proto-is-not-object.js fails built-ins/TypedArrays/ctors/length-arg/custom-proto-access-throws.js fails built-ins/TypedArrays/ctors/length-arg/proto-from-ctor-realm.js fails built-ins/TypedArrays/ctors/length-arg/use-custom-proto-if-object.js fails -built-ins/TypedArrays/ctors/length-arg/use-default-proto-if-custom-proto-is-not-object.js fails built-ins/TypedArrays/ctors/no-args/custom-proto-access-throws.js fails built-ins/TypedArrays/ctors/no-args/proto-from-ctor-realm.js fails built-ins/TypedArrays/ctors/no-args/use-custom-proto-if-object.js fails -built-ins/TypedArrays/ctors/no-args/use-default-proto-if-custom-proto-is-not-object.js fails built-ins/TypedArrays/ctors/object-arg/as-generator-iterable-returns.js fails built-ins/TypedArrays/ctors/object-arg/custom-proto-access-throws.js fails built-ins/TypedArrays/ctors/object-arg/iterator-not-callable-throws.js fails built-ins/TypedArrays/ctors/object-arg/proto-from-ctor-realm.js fails built-ins/TypedArrays/ctors/object-arg/use-custom-proto-if-object.js fails -built-ins/TypedArrays/ctors/object-arg/use-default-proto-if-custom-proto-is-not-object.js fails built-ins/TypedArrays/ctors/typedarray-arg/custom-proto-access-throws.js fails built-ins/TypedArrays/ctors/typedarray-arg/detached-when-species-retrieved-different-type.js fails built-ins/TypedArrays/ctors/typedarray-arg/detached-when-species-retrieved-same-type.js fails @@ -2064,7 +1943,6 @@ built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-not-cto built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-species-prototype-throws.js fails built-ins/TypedArrays/ctors/typedarray-arg/same-ctor-buffer-ctor-value-not-obj-throws.js fails built-ins/TypedArrays/ctors/typedarray-arg/use-custom-proto-if-object.js fails -built-ins/TypedArrays/ctors/typedarray-arg/use-default-proto-if-custom-proto-is-not-object.js fails built-ins/TypedArrays/from/arylk-get-length-error.js fails built-ins/TypedArrays/from/arylk-to-length-error.js fails built-ins/TypedArrays/from/custom-ctor-returns-other-instance.js fails @@ -2095,19 +1973,13 @@ built-ins/TypedArrays/internals/DefineOwnProperty/detached-buffer.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-greater-than-last-index.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-lower-than-zero.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-minus-zero.js fails -built-ins/TypedArrays/internals/DefineOwnProperty/key-is-not-canonical-index.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-not-integer.js fails -built-ins/TypedArrays/internals/DefineOwnProperty/key-is-not-numeric-index.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-accessor-desc.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-desc-configurable.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-desc-not-enumerable.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex-desc-not-writable.js fails built-ins/TypedArrays/internals/DefineOwnProperty/key-is-numericindex.js fails -built-ins/TypedArrays/internals/DefineOwnProperty/key-is-symbol.js fails -built-ins/TypedArrays/internals/DefineOwnProperty/non-extensible-new-key.js fails -built-ins/TypedArrays/internals/DefineOwnProperty/non-extensible-redefine-key.js fails built-ins/TypedArrays/internals/DefineOwnProperty/set-value.js fails -built-ins/TypedArrays/internals/DefineOwnProperty/this-is-not-extensible.js fails built-ins/TypedArrays/internals/DefineOwnProperty/tonumber-value-detached-buffer.js fails built-ins/TypedArrays/internals/Get/detached-buffer-key-is-not-numeric-index.js fails built-ins/TypedArrays/internals/Get/detached-buffer-key-is-symbol.js fails @@ -2128,16 +2000,10 @@ built-ins/TypedArrays/internals/HasProperty/detached-buffer-key-is-not-number.js built-ins/TypedArrays/internals/HasProperty/detached-buffer-key-is-symbol.js fails built-ins/TypedArrays/internals/HasProperty/detached-buffer-realm.js fails built-ins/TypedArrays/internals/HasProperty/detached-buffer.js fails -built-ins/TypedArrays/internals/HasProperty/indexed-value.js fails built-ins/TypedArrays/internals/HasProperty/infinity-with-detached-buffer.js sloppyFails -built-ins/TypedArrays/internals/HasProperty/inherited-property.js fails -built-ins/TypedArrays/internals/HasProperty/key-is-greater-than-last-index.js fails built-ins/TypedArrays/internals/HasProperty/key-is-lower-than-zero.js fails built-ins/TypedArrays/internals/HasProperty/key-is-minus-zero.js fails -built-ins/TypedArrays/internals/HasProperty/key-is-not-canonical-index.js fails built-ins/TypedArrays/internals/HasProperty/key-is-not-integer.js fails -built-ins/TypedArrays/internals/HasProperty/key-is-not-numeric-index.js fails -built-ins/TypedArrays/internals/HasProperty/key-is-symbol.js fails built-ins/TypedArrays/internals/OwnPropertyKeys/integer-indexes-and-string-and-symbol-keys-.js fails built-ins/TypedArrays/internals/OwnPropertyKeys/integer-indexes-and-string-keys.js fails built-ins/TypedArrays/internals/OwnPropertyKeys/integer-indexes.js fails @@ -3620,7 +3486,6 @@ language/expressions/template-literal/tv-template-middle.js fails language/expressions/template-literal/tv-template-tail.js fails language/expressions/template-literal/tv-utf16-escape-sequence.js fails language/expressions/template-literal/tv-zwnbsp.js fails -language/expressions/typeof/built-in-ordinary-objects-no-call.js fails language/expressions/yield/star-array.js fails language/expressions/yield/star-in-rltn-expr.js fails language/expressions/yield/star-iterable.js fails diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp index cb167fb6bf..08f69618c4 100644 --- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp @@ -972,6 +972,7 @@ void tst_QJSEngine::globalObjectProperties_enumerate() << "Float64Array" << "Set" << "Map" + << "Reflect" ; QSet<QString> actualNames; { |