aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-07-01 22:39:38 +0200
committerLars Knoll <lars.knoll@qt.io>2018-07-03 08:09:25 +0000
commit1879525721fa348c18cdbc0ffb3830d689f06933 (patch)
tree232da7691528af3671aee1146b25026452840a33
parent24938ed2b9dccacdc2390b40dc10f71b8f734ad2 (diff)
Give classes a name property
Set the classes name as defined in the ES7 spec. Change-Id: I5ef1d317dfdf92f5e7c141b9092fa391a64ce8af Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
-rw-r--r--src/qml/jsruntime/qv4runtime.cpp9
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations76
2 files changed, 5 insertions, 80 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp
index 7b2fd07f0b..9848c60602 100644
--- a/src/qml/jsruntime/qv4runtime.cpp
+++ b/src/qml/jsruntime/qv4runtime.cpp
@@ -1515,10 +1515,6 @@ ReturnedValue Runtime::method_createClass(ExecutionEngine *engine, int classInde
const QV4::CompiledData::Class *cls = unit->data->classAt(classIndex);
Scope scope(engine);
- ScopedString name(scope);
- if (cls->nameIndex != UINT_MAX)
- name = unit->runtimeStrings[cls->nameIndex];
- // ### fix heritage
ScopedObject protoParent(scope, engine->objectPrototype());
ScopedObject constructorParent(scope, engine->functionPrototype());
if (!superClass.isEmpty()) {
@@ -1548,6 +1544,11 @@ ReturnedValue Runtime::method_createClass(ExecutionEngine *engine, int classInde
constructor->defineDefaultProperty(engine->id_prototype(), proto);
proto->defineDefaultProperty(engine->id_constructor(), constructor);
+ ScopedString name(scope);
+ if (cls->nameIndex != UINT_MAX) {
+ name = unit->runtimeStrings[cls->nameIndex];
+ constructor->defineReadonlyConfigurableProperty(engine->id_name(), name);
+ }
ScopedObject receiver(scope, *constructor);
ScopedPropertyKey propertyName(scope);
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index eaf2a67fbf..4796f42fdf 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -1986,10 +1986,6 @@ language/eval-code/indirect/var-env-var-non-strict.js strictFails
language/expressions/arrow-function/cannot-override-this-with-thisArg.js fails
language/expressions/arrow-function/dflt-params-ref-later.js fails
language/expressions/arrow-function/dflt-params-ref-self.js fails
-language/expressions/arrow-function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/arrow-function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/arrow-function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/arrow-function/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/arrow-function/lexical-arguments.js fails
language/expressions/arrow-function/lexical-new.target-closure-returned.js fails
language/expressions/arrow-function/lexical-new.target.js fails
@@ -2019,7 +2015,6 @@ language/expressions/assignment/S11.13.1_A7_T2.js fails
language/expressions/assignment/S11.13.1_A7_T3.js fails
language/expressions/assignment/destructuring/iterator-destructuring-property-reference-target-evaluation-order.js fails
language/expressions/assignment/destructuring/keyed-destructuring-property-reference-target-evaluation-order.js fails
-language/expressions/assignment/dstr-array-elem-init-fn-name-class.js fails
language/expressions/assignment/dstr-array-elem-init-let.js fails
language/expressions/assignment/dstr-array-elem-iter-rtrn-close-err.js fails
language/expressions/assignment/dstr-array-elem-iter-rtrn-close-null.js fails
@@ -2046,13 +2041,10 @@ language/expressions/assignment/dstr-array-rest-lref-err.js fails
language/expressions/assignment/dstr-array-rest-put-let.js fails
language/expressions/assignment/dstr-obj-empty-null.js fails
language/expressions/assignment/dstr-obj-empty-undef.js fails
-language/expressions/assignment/dstr-obj-id-init-fn-name-class.js fails
language/expressions/assignment/dstr-obj-id-init-let.js fails
language/expressions/assignment/dstr-obj-id-put-let.js fails
-language/expressions/assignment/dstr-obj-prop-elem-init-fn-name-class.js fails
language/expressions/assignment/dstr-obj-prop-elem-init-let.js fails
language/expressions/assignment/dstr-obj-prop-put-let.js fails
-language/expressions/assignment/fn-name-class.js fails
language/expressions/assignment/fn-name-lhs-cover.js fails
language/expressions/assignment/fn-name-lhs-member.js fails
language/expressions/async-function/expression-returns-promise.js fails
@@ -2301,14 +2293,6 @@ language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id-trailing-comma.
language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-id.js fails
language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-obj-init.js fails
language/expressions/class/dstr-gen-meth-static-obj-ptrn-prop-obj.js fails
-language/expressions/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/class/gen-meth-dflt-params-arg-val-not-undefined.js fails
language/expressions/class/gen-meth-dflt-params-arg-val-undefined.js fails
language/expressions/class/gen-meth-dflt-params-ref-later.js fails
@@ -2431,10 +2415,6 @@ language/expressions/function/arguments-with-arguments-fn.js sloppyFails
language/expressions/function/arguments-with-arguments-lex.js sloppyFails
language/expressions/function/dflt-params-ref-later.js fails
language/expressions/function/dflt-params-ref-self.js fails
-language/expressions/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/function/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/function/name.js fails
language/expressions/function/param-dflt-yield-non-strict.js sloppyFails
language/expressions/function/scope-body-lex-distinct.js sloppyFails
@@ -2450,10 +2430,6 @@ language/expressions/generators/arguments-with-arguments-lex.js sloppyFails
language/expressions/generators/default-proto.js fails
language/expressions/generators/dflt-params-ref-later.js fails
language/expressions/generators/dflt-params-ref-self.js fails
-language/expressions/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/generators/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/generators/eval-body-proto-realm.js fails
language/expressions/generators/name.js fails
language/expressions/generators/named-yield-identifier-non-strict.js sloppyFails
@@ -2479,14 +2455,6 @@ language/expressions/new.target/value-via-reflect-construct.js fails
language/expressions/new.target/value-via-super-call.js fails
language/expressions/new.target/value-via-super-property.js fails
language/expressions/new/non-ctor-err-realm.js fails
-language/expressions/object/dstr-gen-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/object/dstr-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/object/dstr-gen-meth-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/object/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/object/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/expressions/object/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/expressions/object/dstr-meth-obj-ptrn-id-init-fn-name-class.js fails
language/expressions/object/fn-name-accessor-get.js fails
language/expressions/object/fn-name-accessor-set.js fails
language/expressions/object/fn-name-arrow.js fails
@@ -2746,7 +2714,6 @@ language/statements/block/tco-stmt.js strictFails
language/statements/class/constructor-inferred-observable-iteration.js fails
language/statements/class/cptn-decl.js fails
language/statements/class/definition/accessors.js fails
-language/statements/class/definition/basics.js fails
language/statements/class/definition/class-method-returns-promise.js fails
language/statements/class/definition/fn-name-accessor-get.js fails
language/statements/class/definition/fn-name-accessor-set.js fails
@@ -3004,14 +2971,6 @@ language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id-trailing-comma.j
language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-id.js fails
language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-obj-init.js fails
language/statements/class/dstr-gen-meth-static-obj-ptrn-prop-obj.js fails
-language/statements/class/dstr-meth-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/class/dstr-meth-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/class/dstr-meth-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/class/dstr-meth-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/class/dstr-meth-static-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/class/dstr-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/class/dstr-meth-static-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/class/dstr-meth-static-obj-ptrn-id-init-fn-name-class.js fails
language/statements/class/gen-meth-dflt-params-arg-val-not-undefined.js fails
language/statements/class/gen-meth-dflt-params-arg-val-undefined.js fails
language/statements/class/gen-meth-dflt-params-ref-later.js fails
@@ -3039,7 +2998,6 @@ language/statements/class/meth-static-dflt-params-ref-self.js fails
language/statements/class/name-binding/in-extends-expression-assigned.js fails
language/statements/class/name-binding/in-extends-expression-grouped.js fails
language/statements/class/name-binding/in-extends-expression.js fails
-language/statements/class/name.js fails
language/statements/class/params-dflt-gen-meth-args-unmapped.js fails
language/statements/class/params-dflt-gen-meth-ref-arguments.js fails
language/statements/class/params-dflt-gen-meth-static-args-unmapped.js fails
@@ -3100,9 +3058,6 @@ language/statements/class/super/in-methods.js fails
language/statements/const/block-local-closure-get-before-initialization.js fails
language/statements/const/block-local-use-before-initialization-in-declaration-statement.js fails
language/statements/const/block-local-use-before-initialization-in-prior-statement.js fails
-language/statements/const/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/const/dstr-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/const/fn-name-class.js fails
language/statements/const/function-local-closure-get-before-initialization.js fails
language/statements/const/function-local-use-before-initialization-in-declaration-statement.js fails
language/statements/const/function-local-use-before-initialization-in-prior-statement.js fails
@@ -3123,7 +3078,6 @@ language/statements/for-in/scope-head-lex-close.js fails
language/statements/for-in/scope-head-lex-open.js fails
language/statements/for-of/body-dstr-assign-error.js fails
language/statements/for-of/body-put-error.js fails
-language/statements/for-of/dstr-array-elem-init-fn-name-class.js fails
language/statements/for-of/dstr-array-elem-init-let.js fails
language/statements/for-of/dstr-array-elem-iter-rtrn-close-err.js fails
language/statements/for-of/dstr-array-elem-iter-rtrn-close-null.js fails
@@ -3148,20 +3102,12 @@ language/statements/for-of/dstr-array-rest-iter-thrw-close-err.js fails
language/statements/for-of/dstr-array-rest-iter-thrw-close.js fails
language/statements/for-of/dstr-array-rest-lref-err.js fails
language/statements/for-of/dstr-array-rest-put-let.js fails
-language/statements/for-of/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/for-of/dstr-const-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/for-of/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/for-of/dstr-let-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for-of/dstr-obj-empty-null.js fails
language/statements/for-of/dstr-obj-empty-undef.js fails
-language/statements/for-of/dstr-obj-id-init-fn-name-class.js fails
language/statements/for-of/dstr-obj-id-init-let.js fails
language/statements/for-of/dstr-obj-id-put-let.js fails
-language/statements/for-of/dstr-obj-prop-elem-init-fn-name-class.js fails
language/statements/for-of/dstr-obj-prop-elem-init-let.js fails
language/statements/for-of/dstr-obj-prop-put-let.js fails
-language/statements/for-of/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/for-of/dstr-var-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for-of/generator-close-via-continue.js fails
language/statements/for-of/generator-close-via-return.js fails
language/statements/for-of/generator-close-via-throw.js fails
@@ -3180,12 +3126,6 @@ language/statements/for-of/yield-star-from-catch.js fails
language/statements/for-of/yield-star-from-finally.js fails
language/statements/for-of/yield-star-from-try.js fails
language/statements/for-of/yield-star.js fails
-language/statements/for/dstr-const-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/for/dstr-const-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/for/dstr-let-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/for/dstr-let-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/for/dstr-var-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/for/dstr-var-obj-ptrn-id-init-fn-name-class.js fails
language/statements/for/head-lhs-let.js sloppyFails
language/statements/for/scope-body-lex-open.js fails
language/statements/for/tco-const-body.js strictFails
@@ -3198,10 +3138,6 @@ language/statements/function/arguments-with-arguments-fn.js sloppyFails
language/statements/function/arguments-with-arguments-lex.js sloppyFails
language/statements/function/dflt-params-ref-later.js fails
language/statements/function/dflt-params-ref-self.js fails
-language/statements/function/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/function/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/function/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/function/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/statements/function/param-dflt-yield-non-strict.js sloppyFails
language/statements/function/scope-body-lex-distinct.js sloppyFails
language/statements/function/scope-param-elem-var-close.js sloppyFails
@@ -3214,10 +3150,6 @@ language/statements/generators/arguments-with-arguments-lex.js sloppyFails
language/statements/generators/default-proto.js fails
language/statements/generators/dflt-params-ref-later.js fails
language/statements/generators/dflt-params-ref-self.js fails
-language/statements/generators/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/generators/dstr-dflt-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/generators/dstr-dflt-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/generators/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/statements/generators/scope-body-lex-distinct.js sloppyFails
language/statements/generators/scope-param-elem-var-close.js sloppyFails
language/statements/generators/scope-param-elem-var-open.js sloppyFails
@@ -3237,9 +3169,6 @@ language/statements/let/block-local-closure-get-before-initialization.js fails
language/statements/let/block-local-closure-set-before-initialization.js fails
language/statements/let/block-local-use-before-initialization-in-declaration-statement.js fails
language/statements/let/block-local-use-before-initialization-in-prior-statement.js fails
-language/statements/let/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/let/dstr-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/let/fn-name-class.js fails
language/statements/let/function-local-closure-get-before-initialization.js fails
language/statements/let/function-local-closure-set-before-initialization.js fails
language/statements/let/function-local-use-before-initialization-in-declaration-statement.js fails
@@ -3257,16 +3186,11 @@ language/statements/switch/tco-case-body.js strictFails
language/statements/switch/tco-dftl-body.js strictFails
language/statements/throw/S12.13_A2_T6.js strictFails
language/statements/try/S12.14_A18_T6.js strictFails
-language/statements/try/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/try/dstr-obj-ptrn-id-init-fn-name-class.js fails
language/statements/try/scope-catch-block-lex-open.js fails
language/statements/try/tco-catch-finally.js strictFails
language/statements/try/tco-catch.js strictFails
language/statements/try/tco-finally.js strictFails
language/statements/variable/binding-resolution.js sloppyFails
-language/statements/variable/dstr-ary-ptrn-elem-id-init-fn-name-class.js fails
-language/statements/variable/dstr-obj-ptrn-id-init-fn-name-class.js fails
-language/statements/variable/fn-name-class.js fails
language/statements/while/tco-body.js strictFails
language/statements/with/binding-blocked-by-unscopables.js sloppyFails
language/statements/with/has-property-err.js sloppyFails