diff --git a/src/arguments/args-trailing-comma-multiple.case b/src/arguments/args-trailing-comma-multiple.case index 6fec35a0cc..b62a9d544d 100644 --- a/src/arguments/args-trailing-comma-multiple.case +++ b/src/arguments/args-trailing-comma-multiple.case @@ -4,13 +4,21 @@ /*--- desc: A trailing comma should not increase the arguments.length, using multiple args template: default -esid: prod-Arguments info: | Trailing comma in the arguments list - 12.3 Left-Hand-Side Expressions + Left-Hand-Side Expressions - Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , ) + Arguments : + ( ) + ( ArgumentList ) + ( ArgumentList , ) + + ArgumentList : + AssignmentExpression + ... AssignmentExpression + ArgumentList , AssignmentExpression + ArgumentList , ... AssignmentExpression ---*/ //- args diff --git a/src/arguments/args-trailing-comma-null.case b/src/arguments/args-trailing-comma-null.case index 1eb48aa0f3..267dca0311 100644 --- a/src/arguments/args-trailing-comma-null.case +++ b/src/arguments/args-trailing-comma-null.case @@ -3,13 +3,21 @@ /*--- desc: A trailing comma after null should not increase the arguments.length template: default -esid: prod-Arguments info: | Trailing comma in the arguments list - 12.3 Left-Hand-Side Expressions + Left-Hand-Side Expressions - Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , ) + Arguments : + ( ) + ( ArgumentList ) + ( ArgumentList , ) + + ArgumentList : + AssignmentExpression + ... AssignmentExpression + ArgumentList , AssignmentExpression + ArgumentList , ... AssignmentExpression ---*/ //- args diff --git a/src/arguments/args-trailing-comma-single-args.case b/src/arguments/args-trailing-comma-single-args.case index 33eceeb586..a9c2063e65 100644 --- a/src/arguments/args-trailing-comma-single-args.case +++ b/src/arguments/args-trailing-comma-single-args.case @@ -4,13 +4,21 @@ /*--- desc: A trailing comma should not increase the arguments.length, using a single arg template: default -esid: prod-Arguments info: | Trailing comma in the arguments list - 12.3 Left-Hand-Side Expressions + Left-Hand-Side Expressions - Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , ) + Arguments : + ( ) + ( ArgumentList ) + ( ArgumentList , ) + + ArgumentList : + AssignmentExpression + ... AssignmentExpression + ArgumentList , AssignmentExpression + ArgumentList , ... AssignmentExpression ---*/ //- args diff --git a/src/arguments/args-trailing-comma-spread-operator.case b/src/arguments/args-trailing-comma-spread-operator.case new file mode 100644 index 0000000000..420d9fdfa1 --- /dev/null +++ b/src/arguments/args-trailing-comma-spread-operator.case @@ -0,0 +1,34 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: A trailing comma should not increase the arguments.length, using spread args +template: default +info: | + Trailing comma in the arguments list + + Left-Hand-Side Expressions + + Arguments : + ( ) + ( ArgumentList ) + ( ArgumentList , ) + + ArgumentList : + AssignmentExpression + ... AssignmentExpression + ArgumentList , AssignmentExpression + ArgumentList , ... AssignmentExpression +---*/ + +//- setup +var arr = [2, 3]; + +//- args +42, ...[1], ...arr, +//- body +assert.sameValue(arguments.length, 4); +assert.sameValue(arguments[0], 42); +assert.sameValue(arguments[1], 1); +assert.sameValue(arguments[2], 2); +assert.sameValue(arguments[3], 3); diff --git a/src/arguments/args-trailing-comma-undefined.case b/src/arguments/args-trailing-comma-undefined.case index c8cd3ec3ba..d54dffb941 100644 --- a/src/arguments/args-trailing-comma-undefined.case +++ b/src/arguments/args-trailing-comma-undefined.case @@ -3,13 +3,21 @@ /*--- desc: A trailing comma after undefined should not increase the arguments.length template: default -esid: prod-Arguments info: | Trailing comma in the arguments list - 12.3 Left-Hand-Side Expressions + Left-Hand-Side Expressions - Arguments[Yield, Await] : ( ArgumentList[?Yield, ?Await] , ) + Arguments : + ( ) + ( ArgumentList ) + ( ArgumentList , ) + + ArgumentList : + AssignmentExpression + ... AssignmentExpression + ArgumentList , AssignmentExpression + ArgumentList , ... AssignmentExpression ---*/ //- args diff --git a/src/arguments/default/async-gen-func-decl.template b/src/arguments/default/async-gen-func-decl.template index 246b59921e..ddccb89cc6 100644 --- a/src/arguments/default/async-gen-func-decl.template +++ b/src/arguments/default/async-gen-func-decl.template @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/statements/async-generator/ +path: language/arguments-object/cls-decl-async-gen-func- name: async generator function declaration esid: sec-asyncgenerator-definitions-instantiatefunctionobject info: | diff --git a/src/arguments/default/async-gen-func-expr.template b/src/arguments/default/async-gen-func-expr.template index 0647ade7f9..900a42086e 100644 --- a/src/arguments/default/async-gen-func-expr.template +++ b/src/arguments/default/async-gen-func-expr.template @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/expressions/async-generator/ +path: language/arguments-object/cls-expr-async-gen-func- name: async generator function expression esid: sec-asyncgenerator-definitions-evaluation info: | diff --git a/src/arguments/default/async-gen-meth.template b/src/arguments/default/async-gen-meth.template index bc726b3453..477dbd560f 100644 --- a/src/arguments/default/async-gen-meth.template +++ b/src/arguments/default/async-gen-meth.template @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/expressions/object/method-definition/async-gen-meth- +path: language/arguments-object/async-gen-meth- name: async generator method esid: sec-asyncgenerator-definitions-propertydefinitionevaluation info: | diff --git a/src/arguments/default/async-gen-named-func-expr.template b/src/arguments/default/async-gen-named-func-expr.template index a196a6dc95..f89be065aa 100644 --- a/src/arguments/default/async-gen-named-func-expr.template +++ b/src/arguments/default/async-gen-named-func-expr.template @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/expressions/async-generator/named- +path: language/arguments-object/async-gen-named-func-expr- name: async generator named function expression esid: sec-asyncgenerator-definitions-evaluation info: | diff --git a/src/arguments/default/cls-decl-async-gen-meth-static.template b/src/arguments/default/cls-decl-async-gen-meth-static.template index 75d27616b0..3009158423 100644 --- a/src/arguments/default/cls-decl-async-gen-meth-static.template +++ b/src/arguments/default/cls-decl-async-gen-meth-static.template @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/statements/class/async-gen-meth-static- +path: language/arguments-object/cls-decl-async-gen-meth-static- name: static class expression generator method esid: sec-runtime-semantics-bindingclassdeclarationevaluation info: | diff --git a/src/arguments/default/cls-decl-async-gen-meth.template b/src/arguments/default/cls-decl-async-gen-meth.template index f0eac2cff4..bbc94205fe 100644 --- a/src/arguments/default/cls-decl-async-gen-meth.template +++ b/src/arguments/default/cls-decl-async-gen-meth.template @@ -1,7 +1,7 @@ // Copyright (C) 2016 the V8 project authors. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/statements/class/async-gen-meth- +path: language/arguments-object/cls-decl-async-gen-meth- name: class expression method esid: sec-class-definitions-runtime-semantics-evaluation info: | diff --git a/src/arguments/default/cls-decl-async-private-gen-meth-static.template b/src/arguments/default/cls-decl-async-private-gen-meth-static.template new file mode 100644 index 0000000000..fcc7403c8e --- /dev/null +++ b/src/arguments/default/cls-decl-async-private-gen-meth-static.template @@ -0,0 +1,39 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-decl-async-private-gen-meth-static- +name: static class expression private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + Arguments : + ( ) + ( ArgumentList ) + ( ArgumentList , ) + + ArgumentList : + AssignmentExpression + ... AssignmentExpression + ArgumentList , AssignmentExpression + ArgumentList , ... AssignmentExpression + + +flags: [async] +features: [async-iteration, class, class-static-methods-private] +---*/ + +var callCount = 0; +class C { + static async * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + static get method() { + return this.#method; + } +} + +C.method(/*{ args }*/).next().then(() => { + assert.sameValue(callCount, 1, 'method invoked exactly once'); +}).then($DONE, $DONE); diff --git a/src/arguments/default/cls-decl-async-private-gen-meth.template b/src/arguments/default/cls-decl-async-private-gen-meth.template new file mode 100644 index 0000000000..89f9c0051f --- /dev/null +++ b/src/arguments/default/cls-decl-async-private-gen-meth.template @@ -0,0 +1,56 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. +/*--- +path: language/arguments-object/cls-decl-async-private-gen-meth- +name: static class declaration private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + ClassDeclaration : class BindingIdentifier ClassTail + + 1. Let className be StringValue of BindingIdentifier. + 2. Let value be the result of ClassDefinitionEvaluation of ClassTail with + argument className. + [...] + + 14.5.14 Runtime Semantics: ClassDefinitionEvaluation + + 21. For each ClassElement m in order from methods + a. If IsStatic of m is false, then + i. Let status be the result of performing + PropertyDefinitionEvaluation for m with arguments proto and + false. + [...] + + Runtime Semantics: PropertyDefinitionEvaluation + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) + { AsyncGeneratorBody } + + 1. Let propKey be the result of evaluating PropertyName. + 2. ReturnIfAbrupt(propKey). + 3. If the function code for this AsyncGeneratorMethod is strict mode code, let strict be true. + Otherwise let strict be false. + 4. Let scope be the running execution context's LexicalEnvironment. + 5. Let closure be ! AsyncGeneratorFunctionCreate(Method, UniqueFormalParameters, + AsyncGeneratorBody, scope, strict). + [...] +flags: [async] +features: [async-iteration, class, class-methods-private] +---*/ + +var callCount = 0; +class C { + async * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + get method() { + return this.#method; + } +} + +new C().method(/*{ args }*/).next().then(() => { + assert.sameValue(callCount, 1, 'method invoked exactly once'); +}).then($DONE, $DONE); diff --git a/src/arguments/default/cls-decl-private-gen-meth-static.template b/src/arguments/default/cls-decl-private-gen-meth-static.template new file mode 100644 index 0000000000..1b25c82453 --- /dev/null +++ b/src/arguments/default/cls-decl-private-gen-meth-static.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-decl-private-gen-meth-static- +name: class declaration private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [generators, class, class-static-methods-private] +---*/ + +var callCount = 0; +class C { + static * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + static get method() { + return this.#method; + } +} + +C.method(/*{ args }*/).next(); + +assert.sameValue(callCount, 1, 'method invoked exactly once'); diff --git a/src/arguments/default/cls-decl-private-gen-meth.template b/src/arguments/default/cls-decl-private-gen-meth.template new file mode 100644 index 0000000000..4f15350cf2 --- /dev/null +++ b/src/arguments/default/cls-decl-private-gen-meth.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-decl-private-gen-meth- +name: class declaration private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [generators, class, class-methods-private] +---*/ + +var callCount = 0; +class C { + * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + get method() { + return this.#method; + } +} + +new C().method(/*{ args }*/).next(); + +assert.sameValue(callCount, 1, 'method invoked exactly once'); diff --git a/src/arguments/default/cls-decl-private-meth-static.template b/src/arguments/default/cls-decl-private-meth-static.template new file mode 100644 index 0000000000..2473d27f43 --- /dev/null +++ b/src/arguments/default/cls-decl-private-meth-static.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-decl-private-meth-static- +name: static class declaration private method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [class, class, class-static-methods-private] +---*/ + +var callCount = 0; +class C { + static #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + static get method() { + return this.#method; + } +} + +C.method(/*{ args }*/); + +assert.sameValue(callCount, 1, 'method invoked exactly once'); diff --git a/src/arguments/default/cls-decl-private-meth.template b/src/arguments/default/cls-decl-private-meth.template new file mode 100644 index 0000000000..ed95c0d283 --- /dev/null +++ b/src/arguments/default/cls-decl-private-meth.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-decl-private-meth- +name: class declaration private method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [class, class, class-methods-private] +---*/ + +var callCount = 0; +class C { + #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + get method() { + return this.#method; + } +} + +new C().method(/*{ args }*/); + +assert.sameValue(callCount, 1, 'method invoked exactly once'); diff --git a/src/arguments/default/cls-expr-async-gen-meth-static.template b/src/arguments/default/cls-expr-async-gen-meth-static.template index 9f0b4bddf5..383e93de17 100644 --- a/src/arguments/default/cls-expr-async-gen-meth-static.template +++ b/src/arguments/default/cls-expr-async-gen-meth-static.template @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/expressions/class/async-gen-meth-static- +path: language/arguments-object/cls-expr-async-gen-meth-static- name: static class expression async generator method esid: sec-class-definitions-runtime-semantics-evaluation info: | diff --git a/src/arguments/default/cls-expr-async-gen-meth.template b/src/arguments/default/cls-expr-async-gen-meth.template index 4bcf442bb5..0566239b24 100644 --- a/src/arguments/default/cls-expr-async-gen-meth.template +++ b/src/arguments/default/cls-expr-async-gen-meth.template @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -path: language/expressions/class/async-gen-meth- +path: language/arguments-object/cls-expr-async-gen-meth- name: class expression async generator method esid: sec-class-definitions-runtime-semantics-evaluation info: | diff --git a/src/arguments/default/cls-expr-async-private-gen-meth-static.template b/src/arguments/default/cls-expr-async-private-gen-meth-static.template new file mode 100644 index 0000000000..4800d06afa --- /dev/null +++ b/src/arguments/default/cls-expr-async-private-gen-meth-static.template @@ -0,0 +1,58 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-expr-async-private-gen-meth-static- +name: static class expression async private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + ClassExpression : class BindingIdentifieropt ClassTail + + 1. If BindingIdentifieropt is not present, let className be undefined. + 2. Else, let className be StringValue of BindingIdentifier. + 3. Let value be the result of ClassDefinitionEvaluation of ClassTail + with argument className. + [...] + + 14.5.14 Runtime Semantics: ClassDefinitionEvaluation + + 21. For each ClassElement m in order from methods + a. If IsStatic of m is false, then + b. Else, + Let status be the result of performing PropertyDefinitionEvaluation + for m with arguments F and false. + [...] + + Runtime Semantics: PropertyDefinitionEvaluation + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) + { AsyncGeneratorBody } + + 1. Let propKey be the result of evaluating PropertyName. + 2. ReturnIfAbrupt(propKey). + 3. If the function code for this AsyncGeneratorMethod is strict mode code, let strict be true. + Otherwise let strict be false. + 4. Let scope be the running execution context's LexicalEnvironment. + 5. Let closure be ! AsyncGeneratorFunctionCreate(Method, UniqueFormalParameters, + AsyncGeneratorBody, scope, strict). + [...] +flags: [async] +features: [async-iteration, class, class-static-methods-private] +---*/ + +var callCount = 0; +var C = class { + static async * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + static get method() { + return this.#method; + } +}; + +C.method(/*{ args }*/).next().then(() => { + assert.sameValue(callCount, 1, 'method invoked exactly once'); +}).then($DONE, $DONE); diff --git a/src/arguments/default/cls-expr-async-private-gen-meth.template b/src/arguments/default/cls-expr-async-private-gen-meth.template new file mode 100644 index 0000000000..8fc0fe2b94 --- /dev/null +++ b/src/arguments/default/cls-expr-async-private-gen-meth.template @@ -0,0 +1,59 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-expr-async-private-gen-meth- +name: class expression async private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + ClassExpression : class BindingIdentifieropt ClassTail + + 1. If BindingIdentifieropt is not present, let className be undefined. + 2. Else, let className be StringValue of BindingIdentifier. + 3. Let value be the result of ClassDefinitionEvaluation of ClassTail + with argument className. + [...] + + 14.5.14 Runtime Semantics: ClassDefinitionEvaluation + + 21. For each ClassElement m in order from methods + a. If IsStatic of m is false, then + i. Let status be the result of performing + PropertyDefinitionEvaluation for m with arguments proto and + false. + [...] + + Runtime Semantics: PropertyDefinitionEvaluation + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) + { AsyncGeneratorBody } + + 1. Let propKey be the result of evaluating PropertyName. + 2. ReturnIfAbrupt(propKey). + 3. If the function code for this AsyncGeneratorMethod is strict mode code, let strict be true. + Otherwise let strict be false. + 4. Let scope be the running execution context's LexicalEnvironment. + 5. Let closure be ! AsyncGeneratorFunctionCreate(Method, UniqueFormalParameters, + AsyncGeneratorBody, scope, strict). + [...] +flags: [async] +features: [async-iteration, class, class-methods-private] +---*/ + +var callCount = 0; +var C = class { + async * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + get method() { + return this.#method; + } +}; + +new C().method(/*{ args }*/).next().then(() => { + assert.sameValue(callCount, 1, 'method invoked exactly once'); +}).then($DONE, $DONE); + diff --git a/src/arguments/default/cls-expr-private-gen-meth-static.template b/src/arguments/default/cls-expr-private-gen-meth-static.template new file mode 100644 index 0000000000..85d742bece --- /dev/null +++ b/src/arguments/default/cls-expr-private-gen-meth-static.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-expr-private-gen-meth-static- +name: static class expression private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [generators, class, class-static-methods-private] +---*/ + +var callCount = 0; +var C = class { + static * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + static get method() { + return this.#method; + } +}; + +C.method(/*{ args }*/).next(); + +assert.sameValue(callCount, 1, 'method invoked exactly once'); diff --git a/src/arguments/default/cls-expr-private-gen-meth.template b/src/arguments/default/cls-expr-private-gen-meth.template new file mode 100644 index 0000000000..5a3ed59da8 --- /dev/null +++ b/src/arguments/default/cls-expr-private-gen-meth.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-expr-private-gen-meth- +name: class expression private generator method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [generators, class, class-methods-private] +---*/ + +var callCount = 0; +var C = class { + * #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + get method() { + return this.#method; + } +}; + +new C().method(/*{ args }*/).next(); + +assert.sameValue(callCount, 1, 'method invoked exactly once'); diff --git a/src/arguments/default/cls-expr-private-meth-static.template b/src/arguments/default/cls-expr-private-meth-static.template new file mode 100644 index 0000000000..c2b341e910 --- /dev/null +++ b/src/arguments/default/cls-expr-private-meth-static.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-expr-private-meth-static- +name: static class expression private method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [class, class-static-methods-private] +---*/ + +var callCount = 0; +var C = class { + static #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + static get method() { + return this.#method; + } +}; + +C.method(/*{ args }*/); + +assert.sameValue(callCount, 1, 'method invoked exactly once'); diff --git a/src/arguments/default/cls-expr-private-meth.template b/src/arguments/default/cls-expr-private-meth.template new file mode 100644 index 0000000000..51893c71d8 --- /dev/null +++ b/src/arguments/default/cls-expr-private-meth.template @@ -0,0 +1,31 @@ +// Copyright (C) 2018 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/arguments-object/cls-expr-private-meth- +name: class expression private method +esid: sec-argument-lists-runtime-semantics-argumentlistevaluation +info: | + 9.4.4 Arguments Exotic Objects + + Most ECMAScript functions make an arguments object available to their code. Depending upon the + characteristics of the function definition, its arguments object is either an ordinary object + or an arguments exotic object. +features: [class, class-methods-private] +---*/ + +var callCount = 0; +var C = class { + #method() { + /*{ body }*/ + callCount = callCount + 1; + } + + get method() { + return this.#method; + } +}; + +new C().method(/*{ args }*/); + +assert.sameValue(callCount, 1, 'method invoked exactly once');