From 922e27fd8cb1f822caf4988441ae4340cc0ee4e4 Mon Sep 17 00:00:00 2001 From: Gus Caplan Date: Fri, 14 Feb 2020 22:37:51 -0800 Subject: [PATCH] fix super evaluation order tests --- .../class/super-evaluation-order.js | 29 ---------------- .../expressions/super/call-proto-not-ctor.js | 34 ++++++------------- .../class-definition-null-proto-super.js | 14 +++----- 3 files changed, 14 insertions(+), 63 deletions(-) delete mode 100644 test/language/expressions/class/super-evaluation-order.js diff --git a/test/language/expressions/class/super-evaluation-order.js b/test/language/expressions/class/super-evaluation-order.js deleted file mode 100644 index 11f5f3f353..0000000000 --- a/test/language/expressions/class/super-evaluation-order.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2020 Jordan Harband. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. -/*--- -esid: prod-SuperCall -description: SuperCall should evaluate Arguments prior to checking IsConstructable -info: | - GetSuperConstructor ( ) - - [...] - 1. Let _func_ be ! GetSuperConstructor(). - 2. Let _argList_ be ? ArgumentListEvaluation of |Arguments|. - 3. If IsConstructor(_func_) is *false*, throw a *TypeError* exception. - [...] -features: [default-parameters] ----*/ - -var x = 0; -class C extends Object { - constructor() { - super(x = 123); - } -} - -Object.setPrototypeOf(C, parseInt); - -assert.throws(TypeError, () => { - new C(); -}); -assert.sameValue(x, 123, 'via ArgumentListEvaluation'); diff --git a/test/language/expressions/super/call-proto-not-ctor.js b/test/language/expressions/super/call-proto-not-ctor.js index 024c10bdfe..883fb70195 100644 --- a/test/language/expressions/super/call-proto-not-ctor.js +++ b/test/language/expressions/super/call-proto-not-ctor.js @@ -3,43 +3,29 @@ /*--- esid: sec-super-keyword es6id: 12.3.5 -description: Prototype of active function object must be a constructor +description: SuperCall should evaluate Arguments prior to checking IsConstructor info: | - [...] - 3. Let func be ? GetSuperConstructor(). - - 12.3.5.2 Runtime Semantics: GetSuperConstructor + SuperCall : `super` Arguments [...] - 4. Let superConstructor be ? activeFunction.[[GetPrototypeOf]](). - 5. If IsConstructor(superConstructor) is false, throw a TypeError exception. + 3. Let _func_ be ! GetSuperConstructor(). + 4. Let _argList_ be ? ArgumentListEvaluation of |Arguments|. + 5. If IsConstructor(_func_) is *false*, throw a *TypeError* exception. + [...] features: [class] ---*/ var evaluatedArg = false; -var caught; class C extends Object { constructor() { - try { - super(evaluatedArg = true); - } catch (err) { - caught = err; - } + super(evaluatedArg = true); } } Object.setPrototypeOf(C, parseInt); -// When the "construct" invocation completes and the "this" value is -// uninitialized, the specification dictates that a ReferenceError must be -// thrown. That behavior is tested elsewhere, so the error is ignored (if it is -// produced at all). -try { +assert.throws(TypeError, () => { new C(); -} catch (_) {} +}); -assert.sameValue(typeof caught, 'object'); -assert.sameValue(caught.constructor, TypeError); -assert.sameValue( - evaluatedArg, false, 'did not perform ArgumentsListEvaluation' -); +assert(evaluatedArg, 'performs ArgumentsListEvaluation'); diff --git a/test/language/statements/class/subclass/class-definition-null-proto-super.js b/test/language/statements/class/subclass/class-definition-null-proto-super.js index 0dbcaf0690..e7680a4378 100644 --- a/test/language/statements/class/subclass/class-definition-null-proto-super.js +++ b/test/language/statements/class/subclass/class-definition-null-proto-super.js @@ -27,15 +27,9 @@ info: | SuperCall : super Arguments [...] - 3. Let func be ? GetSuperConstructor(). - 4. Let argList be ArgumentListEvaluation of Arguments. - [...] - - 12.3.5.2 Runtime Semantics: GetSuperConstructor ( ) - - [...] - 5. Let superConstructor be ! activeFunction.[[GetPrototypeOf]](). - 6. If IsConstructor(superConstructor) is false, throw a TypeError exception. + 3. Let func be ! GetSuperConstructor(). + 4. Let argList be ? ArgumentListEvaluation of Arguments. + 5. If IsConstructor(func) is false, throw a TypeError exception. [...] ---*/ @@ -45,7 +39,7 @@ var reachable = 0; class C extends null { constructor() { reachable += 1; - super(unreachable += 1); + super(); unreachable += 1; } }