From a47ccfe989e55cdbf923d626a6ee4e3fc540732d Mon Sep 17 00:00:00 2001 From: Valerie Young Date: Tue, 7 Jan 2020 10:21:08 -0800 Subject: [PATCH] Add no-strict function error templates --- .../error-no-strict/arrow-function.template | 49 ++++++++++++++++ .../async-arrow-function.template | 46 +++++++++++++++ .../error-no-strict/async-func-decl.template | 30 ++++++++++ .../async-func-expr-named.template | 30 ++++++++++ .../async-func-expr-nameless.template | 30 ++++++++++ .../async-gen-func-decl.template | 30 ++++++++++ .../async-gen-func-expr.template | 30 ++++++++++ .../error-no-strict/async-gen-meth.template | 35 ++++++++++++ .../async-gen-named-func-expr.template | 30 ++++++++++ .../error-no-strict/async-meth.template | 33 +++++++++++ .../error-no-strict/func-decl.template | 49 ++++++++++++++++ .../error-no-strict/func-expr.template | 50 ++++++++++++++++ .../error-no-strict/gen-func-decl.template | 51 +++++++++++++++++ .../error-no-strict/gen-func-expr.template | 51 +++++++++++++++++ .../error-no-strict/gen-meth.template | 57 +++++++++++++++++++ .../error-no-strict/meth.template | 53 +++++++++++++++++ .../eval-var-scope-syntax-err.case | 3 +- 17 files changed, 655 insertions(+), 2 deletions(-) create mode 100644 src/function-forms/error-no-strict/arrow-function.template create mode 100644 src/function-forms/error-no-strict/async-arrow-function.template create mode 100644 src/function-forms/error-no-strict/async-func-decl.template create mode 100644 src/function-forms/error-no-strict/async-func-expr-named.template create mode 100644 src/function-forms/error-no-strict/async-func-expr-nameless.template create mode 100644 src/function-forms/error-no-strict/async-gen-func-decl.template create mode 100644 src/function-forms/error-no-strict/async-gen-func-expr.template create mode 100644 src/function-forms/error-no-strict/async-gen-meth.template create mode 100644 src/function-forms/error-no-strict/async-gen-named-func-expr.template create mode 100644 src/function-forms/error-no-strict/async-meth.template create mode 100644 src/function-forms/error-no-strict/func-decl.template create mode 100644 src/function-forms/error-no-strict/func-expr.template create mode 100644 src/function-forms/error-no-strict/gen-func-decl.template create mode 100644 src/function-forms/error-no-strict/gen-func-expr.template create mode 100644 src/function-forms/error-no-strict/gen-meth.template create mode 100644 src/function-forms/error-no-strict/meth.template diff --git a/src/function-forms/error-no-strict/arrow-function.template b/src/function-forms/error-no-strict/arrow-function.template new file mode 100644 index 0000000000..4ad7b4fc89 --- /dev/null +++ b/src/function-forms/error-no-strict/arrow-function.template @@ -0,0 +1,49 @@ +// 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/arrow-function/ +name: arrow function expression in sloppy code +esid: sec-arrow-function-definitions-runtime-semantics-evaluation +flags: [noStrict] +info: | + ArrowFunction : ArrowParameters => ConciseBody + + [...] + 4. Let closure be FunctionCreate(Arrow, parameters, ConciseBody, scope, strict). + [...] + + 9.2.1 [[Call]] ( thisArgument, argumentsList) + + [...] + 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). + [...] + + 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) + + 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). + [...] + + 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) + + [...] + 23. Let iteratorRecord be Record {[[iterator]]: + CreateListIterator(argumentsList), [[done]]: false}. + 24. If hasDuplicates is true, then + [...] + 25. Else, + b. Let formalStatus be IteratorBindingInitialization for formals with + iteratorRecord and env as arguments. + [...] +---*/ + +var callCount = 0; +var f; +f = (/*{ params }*/) => { + /*{ body }*/ + callCount = callCount + 1; +}; + +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'arrow function body not evaluated'); diff --git a/src/function-forms/error-no-strict/async-arrow-function.template b/src/function-forms/error-no-strict/async-arrow-function.template new file mode 100644 index 0000000000..d76212fcc2 --- /dev/null +++ b/src/function-forms/error-no-strict/async-arrow-function.template @@ -0,0 +1,46 @@ +// Copyright (C) 2017 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/expressions/async-arrow-function/ +name: async arrow function expression in sloppy code +esid: sec-async-arrow-function-definitions +info: | + 14.7 Async Arrow Function Definitions + + AsyncArrowFunction : + ... + CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody + + AsyncConciseBody : + { AsyncFunctionBody } + + ... + + Supplemental Syntax + + When processing an instance of the production AsyncArrowFunction : + CoverCallExpressionAndAsyncArrowHead => AsyncConciseBody the interpretation of + CoverCallExpressionAndAsyncArrowHead is refined using the following grammar: + + AsyncArrowHead : + async ArrowFormalParameters +flags: [async, noStrict] +features: [async-functions] +---*/ + +var callCount = 0; +var f; +f = async (/*{ params }*/) => { + /*{ body }*/ + callCount = callCount + 1; +}; + +f(/*{ args }*/) + .then(_ => { + throw new Test262Error('function should not be resolved'); + }, error => assert.sameValue(error.constructor, /*{ error }*/)) + .then(() => { + assert.sameValue(callCount, 0, 'function body is not evaluated'); + }, $DONE) + .then($DONE, $DONE); diff --git a/src/function-forms/error-no-strict/async-func-decl.template b/src/function-forms/error-no-strict/async-func-decl.template new file mode 100644 index 0000000000..a3ee4e0654 --- /dev/null +++ b/src/function-forms/error-no-strict/async-func-decl.template @@ -0,0 +1,30 @@ +// Copyright (C) 2017 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/statements/async-function/ +name: async function declaration in sloppy code +esid: sec-async-function-definitions +info: | + 14.6 Async Function Definitions + + AsyncFunctionDeclaration : + async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody } +flags: [async, noStrict] +features: [async-functions] +---*/ + +var callCount = 0; +async function f(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +} + +f(/*{ args }*/) + .then(_ => { + throw new Test262Error('function should not be resolved'); + }, error => assert.sameValue(error.constructor, /*{ error }*/)) + .then(() => { + assert.sameValue(callCount, 0, 'function body is not evaluated'); + }, $DONE) + .then($DONE, $DONE); diff --git a/src/function-forms/error-no-strict/async-func-expr-named.template b/src/function-forms/error-no-strict/async-func-expr-named.template new file mode 100644 index 0000000000..ec0a96b2f2 --- /dev/null +++ b/src/function-forms/error-no-strict/async-func-expr-named.template @@ -0,0 +1,30 @@ +// Copyright (C) 2017 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/expressions/async-function/named- +name: async function named expression in sloppy code +esid: sec-async-function-definitions +info: | + 14.6 Async Function Definitions + + AsyncFunctionExpression : + async function BindingIdentifier ( FormalParameters ) { AsyncFunctionBody } +flags: [async, noStrict] +features: [async-functions] +---*/ + +var callCount = 0; +var f = async function f(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +} + +f(/*{ args }*/) + .then(_ => { + throw new Test262Error('function should not be resolved'); + }, error => assert.sameValue(error.constructor, /*{ error }*/)) + .then(() => { + assert.sameValue(callCount, 0, 'function body is not evaluated'); + }, $DONE) + .then($DONE, $DONE); diff --git a/src/function-forms/error-no-strict/async-func-expr-nameless.template b/src/function-forms/error-no-strict/async-func-expr-nameless.template new file mode 100644 index 0000000000..f775354c92 --- /dev/null +++ b/src/function-forms/error-no-strict/async-func-expr-nameless.template @@ -0,0 +1,30 @@ +// Copyright (C) 2017 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/expressions/async-function/nameless- +name: async function nameless expression in sloppy code +esid: sec-async-function-definitions +info: | + 14.6 Async Function Definitions + + AsyncFunctionExpression : + async function ( FormalParameters ) { AsyncFunctionBody } +flags: [async, noStrict] +features: [async-functions] +---*/ + +var callCount = 0; +var f = async function(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +} + +f(/*{ args }*/) + .then(_ => { + throw new Test262Error('function should not be resolved'); + }, error => assert.sameValue(error.constructor, /*{ error }*/)) + .then(() => { + assert.sameValue(callCount, 0, 'function body is not evaluated'); + }, $DONE) + .then($DONE, $DONE); diff --git a/src/function-forms/error-no-strict/async-gen-func-decl.template b/src/function-forms/error-no-strict/async-gen-func-decl.template new file mode 100644 index 0000000000..c75a68b040 --- /dev/null +++ b/src/function-forms/error-no-strict/async-gen-func-decl.template @@ -0,0 +1,30 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/statements/async-generator/ +name: async generator function declaration in sloppy code +esid: sec-asyncgenerator-definitions-instantiatefunctionobject +flags: [noStrict] +info: | + AsyncGeneratorDeclaration : async [no LineTerminator here] function * BindingIdentifier + ( FormalParameters ) { AsyncGeneratorBody } + + [...] + 3. Let F be ! AsyncGeneratorFunctionCreate(Normal, FormalParameters, AsyncGeneratorBody, + scope, strict). + [...] +features: [async-iteration] +---*/ + +var callCount = 0; +async function* f(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +} + +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); + +assert.sameValue(callCount, 0, 'generator function body not evaluated'); diff --git a/src/function-forms/error-no-strict/async-gen-func-expr.template b/src/function-forms/error-no-strict/async-gen-func-expr.template new file mode 100644 index 0000000000..deedc3a6ab --- /dev/null +++ b/src/function-forms/error-no-strict/async-gen-func-expr.template @@ -0,0 +1,30 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/expressions/async-generator/ +name: async generator function expression in sloppy code +esid: sec-asyncgenerator-definitions-evaluation +flags: [noStrict] +info: | + AsyncGeneratorExpression : async [no LineTerminator here] function * ( FormalParameters ) { + AsyncGeneratorBody } + + [...] + 3. Let closure be ! AsyncGeneratorFunctionCreate(Normal, FormalParameters, + AsyncGeneratorBody, scope, strict). + [...] +features: [async-iteration] +---*/ + +var callCount = 0; +var f; +f = async function*(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +}; + +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'generator function body not evaluated'); diff --git a/src/function-forms/error-no-strict/async-gen-meth.template b/src/function-forms/error-no-strict/async-gen-meth.template new file mode 100644 index 0000000000..3c5bfbadf3 --- /dev/null +++ b/src/function-forms/error-no-strict/async-gen-meth.template @@ -0,0 +1,35 @@ +// 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- +name: async generator method in sloppy code +esid: sec-asyncgenerator-definitions-propertydefinitionevaluation +flags: [noStrict] +info: | + 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). + [...] +features: [async-iteration] +---*/ + +var callCount = 0; +var obj = { + async *method(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; + } +}; + +assert.throws(/*{ error }*/, function() { + obj.method(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'generator method body not evaluated'); diff --git a/src/function-forms/error-no-strict/async-gen-named-func-expr.template b/src/function-forms/error-no-strict/async-gen-named-func-expr.template new file mode 100644 index 0000000000..1ec8633ac6 --- /dev/null +++ b/src/function-forms/error-no-strict/async-gen-named-func-expr.template @@ -0,0 +1,30 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/expressions/async-generator/named- +name: async generator named function expression in sloppy code +esid: sec-asyncgenerator-definitions-evaluation +flags: [noStrict] +info: | + AsyncGeneratorExpression : async [no LineTerminator here] function * BindingIdentifier + ( FormalParameters ) { AsyncGeneratorBody } + + [...] + 7. Let closure be ! AsyncGeneratorFunctionCreate(Normal, FormalParameters, + AsyncGeneratorBody, funcEnv, strict). + [...] +features: [async-iteration] +---*/ + +var callCount = 0; +var f; +f = async function* g(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +}; + +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'generator function body not evaluated'); diff --git a/src/function-forms/error-no-strict/async-meth.template b/src/function-forms/error-no-strict/async-meth.template new file mode 100644 index 0000000000..e78d82aa5b --- /dev/null +++ b/src/function-forms/error-no-strict/async-meth.template @@ -0,0 +1,33 @@ +// Copyright (C) 2017 Leo Balter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +path: language/expressions/object/method-definition/async-meth- +name: async method in sloppy code +esid: sec-async-function-definitions +info: | + 14.6 Async Function Definitions + + AsyncMethod : + async PropertyName ( UniqueFormalParameters ) { AsyncFunctionBody } +flags: [async, noStrict] +features: [async-functions] +---*/ + +var callCount = 0; + +var obj = { + async method(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; + } +}; + +obj.method(/*{ args }*/) + .then(_ => { + throw new Test262Error('function should not be resolved'); + }, error => assert.sameValue(error.constructor, /*{ error }*/)) + .then(() => { + assert.sameValue(callCount, 0, 'function body is not evaluated'); + }, $DONE) + .then($DONE, $DONE); diff --git a/src/function-forms/error-no-strict/func-decl.template b/src/function-forms/error-no-strict/func-decl.template new file mode 100644 index 0000000000..c2d620a395 --- /dev/null +++ b/src/function-forms/error-no-strict/func-decl.template @@ -0,0 +1,49 @@ +// 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/function/ +name: function declaration in sloppy code +esid: sec-function-definitions-runtime-semantics-instantiatefunctionobject +flags: [noStrict] +info: | + FunctionDeclaration : + function BindingIdentifier ( FormalParameters ) { FunctionBody } + + [...] + 3. Let F be FunctionCreate(Normal, FormalParameters, FunctionBody, + scope, strict). + [...] + + 9.2.1 [[Call]] ( thisArgument, argumentsList) + + [...] + 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). + [...] + + 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) + + 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). + [...] + + 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) + + [...] + 23. Let iteratorRecord be Record {[[iterator]]: + CreateListIterator(argumentsList), [[done]]: false}. + 24. If hasDuplicates is true, then + [...] + 25. Else, + b. Let formalStatus be IteratorBindingInitialization for formals with + iteratorRecord and env as arguments. + [...] +---*/ + +var callCount = 0; +function f(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +} +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'function body not evaluated'); diff --git a/src/function-forms/error-no-strict/func-expr.template b/src/function-forms/error-no-strict/func-expr.template new file mode 100644 index 0000000000..0104d43331 --- /dev/null +++ b/src/function-forms/error-no-strict/func-expr.template @@ -0,0 +1,50 @@ +// 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/function/ +name: function expression in sloppy code +esid: sec-function-definitions-runtime-semantics-evaluation +flags: [noStrict] +info: | + FunctionExpression : function ( FormalParameters ) { FunctionBody } + + [...] + 3. Let closure be FunctionCreate(Normal, FormalParameters, FunctionBody, + scope, strict). + [...] + + 9.2.1 [[Call]] ( thisArgument, argumentsList) + + [...] + 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). + [...] + + 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) + + 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). + [...] + + 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) + + [...] + 23. Let iteratorRecord be Record {[[iterator]]: + CreateListIterator(argumentsList), [[done]]: false}. + 24. If hasDuplicates is true, then + [...] + 25. Else, + b. Let formalStatus be IteratorBindingInitialization for formals with + iteratorRecord and env as arguments. + [...] +---*/ + +var callCount = 0; +var f; +f = function(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +}; + +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'function body not evaluated'); diff --git a/src/function-forms/error-no-strict/gen-func-decl.template b/src/function-forms/error-no-strict/gen-func-decl.template new file mode 100644 index 0000000000..df42cc6dc2 --- /dev/null +++ b/src/function-forms/error-no-strict/gen-func-decl.template @@ -0,0 +1,51 @@ +// 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/generators/ +name: generator function declaration in sloppy code +esid: sec-generator-function-definitions-runtime-semantics-instantiatefunctionobject +flags: [noStrict] +info: | + GeneratorDeclaration : function * ( FormalParameters ) { GeneratorBody } + + [...] + 2. Let F be GeneratorFunctionCreate(Normal, FormalParameters, + GeneratorBody, scope, strict). + [...] + + 9.2.1 [[Call]] ( thisArgument, argumentsList) + + [...] + 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). + [...] + + 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) + + 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). + [...] + + 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) + + [...] + 23. Let iteratorRecord be Record {[[iterator]]: + CreateListIterator(argumentsList), [[done]]: false}. + 24. If hasDuplicates is true, then + [...] + 25. Else, + b. Let formalStatus be IteratorBindingInitialization for formals with + iteratorRecord and env as arguments. + [...] +features: [generators] +---*/ + +var callCount = 0; +function* f(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +} + +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); + +assert.sameValue(callCount, 0, 'generator function body not evaluated'); diff --git a/src/function-forms/error-no-strict/gen-func-expr.template b/src/function-forms/error-no-strict/gen-func-expr.template new file mode 100644 index 0000000000..3917686dec --- /dev/null +++ b/src/function-forms/error-no-strict/gen-func-expr.template @@ -0,0 +1,51 @@ +// 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/generators/ +name: generator function expression in sloppy code +esid: sec-generator-function-definitions-runtime-semantics-evaluation +flags: [noStrict] +info: | + GeneratorExpression : function * ( FormalParameters ) { GeneratorBody } + + [...] + 3. Let closure be GeneratorFunctionCreate(Normal, FormalParameters, + GeneratorBody, scope, strict). + [...] + + 9.2.1 [[Call]] ( thisArgument, argumentsList) + + [...] + 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). + [...] + + 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) + + 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). + [...] + + 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) + + [...] + 23. Let iteratorRecord be Record {[[iterator]]: + CreateListIterator(argumentsList), [[done]]: false}. + 24. If hasDuplicates is true, then + [...] + 25. Else, + b. Let formalStatus be IteratorBindingInitialization for formals with + iteratorRecord and env as arguments. + [...] +features: [generators] +---*/ + +var callCount = 0; +var f; +f = function*(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; +}; + +assert.throws(/*{ error }*/, function() { + f(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'generator function body not evaluated'); diff --git a/src/function-forms/error-no-strict/gen-meth.template b/src/function-forms/error-no-strict/gen-meth.template new file mode 100644 index 0000000000..88d6f23c5b --- /dev/null +++ b/src/function-forms/error-no-strict/gen-meth.template @@ -0,0 +1,57 @@ +// 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/gen-meth- +name: generator method in sloppy code +esid: sec-generator-function-definitions-runtime-semantics-propertydefinitionevaluation +flags: [noStrict] +info: | + GeneratorMethod : + * PropertyName ( StrictFormalParameters ) { GeneratorBody } + + 1. Let propKey be the result of evaluating PropertyName. + 2. ReturnIfAbrupt(propKey). + 3. If the function code for this GeneratorMethod 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 GeneratorFunctionCreate(Method, + StrictFormalParameters, GeneratorBody, scope, strict). + [...] + + 9.2.1 [[Call]] ( thisArgument, argumentsList) + + [...] + 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). + [...] + + 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) + + 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). + [...] + + 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) + + [...] + 23. Let iteratorRecord be Record {[[iterator]]: + CreateListIterator(argumentsList), [[done]]: false}. + 24. If hasDuplicates is true, then + [...] + 25. Else, + b. Let formalStatus be IteratorBindingInitialization for formals with + iteratorRecord and env as arguments. + [...] +features: [generators] +---*/ + +var callCount = 0; +var obj = { + *method(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; + } +}; + +assert.throws(/*{ error }*/, function() { + obj.method(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'generator method body not evaluated'); diff --git a/src/function-forms/error-no-strict/meth.template b/src/function-forms/error-no-strict/meth.template new file mode 100644 index 0000000000..bed97d5462 --- /dev/null +++ b/src/function-forms/error-no-strict/meth.template @@ -0,0 +1,53 @@ +// 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/meth- +name: method in sloppy code +esid: sec-runtime-semantics-definemethod +flags: [noStrict] +info: | + MethodDefinition : PropertyName ( StrictFormalParameters ) { FunctionBody } + + [...] + 6. Let closure be FunctionCreate(kind, StrictFormalParameters, + FunctionBody, scope, strict). If functionPrototype was passed as a + parameter then pass its value as the functionPrototype optional argument + of FunctionCreate. + [...] + + 9.2.1 [[Call]] ( thisArgument, argumentsList) + + [...] + 7. Let result be OrdinaryCallEvaluateBody(F, argumentsList). + [...] + + 9.2.1.3 OrdinaryCallEvaluateBody ( F, argumentsList ) + + 1. Let status be FunctionDeclarationInstantiation(F, argumentsList). + [...] + + 9.2.12 FunctionDeclarationInstantiation(func, argumentsList) + + [...] + 23. Let iteratorRecord be Record {[[iterator]]: + CreateListIterator(argumentsList), [[done]]: false}. + 24. If hasDuplicates is true, then + [...] + 25. Else, + b. Let formalStatus be IteratorBindingInitialization for formals with + iteratorRecord and env as arguments. + [...] +---*/ + +var callCount = 0; +var obj = { + method(/*{ params }*/) { + /*{ body }*/ + callCount = callCount + 1; + } +}; + +assert.throws(/*{ error }*/, function() { + obj.method(/*{ args }*/); +}); +assert.sameValue(callCount, 0, 'method body not evaluated'); diff --git a/src/function-forms/eval-var-scope-syntax-err.case b/src/function-forms/eval-var-scope-syntax-err.case index adbd687f66..2a48b86059 100644 --- a/src/function-forms/eval-var-scope-syntax-err.case +++ b/src/function-forms/eval-var-scope-syntax-err.case @@ -2,7 +2,7 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- desc: sloppy direct eval in params introduces var -template: error +template: error-no-strict info: | Runtime Semantics: IteratorBindingInitialization @@ -12,7 +12,6 @@ info: | features: [default-parameters] -flags: [noStrict] ---*/ //- params