From dbfca4581d7af1d5003b84ceb25c9dba5be64b08 Mon Sep 17 00:00:00 2001 From: Daniel Ehrenberg Date: Tue, 11 Apr 2017 22:31:35 +0200 Subject: [PATCH] Prohibit ASI between 'let' and 'yield'/'await' Inspired by https://github.com/tc39/test262/pull/956 --- ...let-newline-yield-in-generator-function.js | 22 +++++++++++++++++++ .../let-newline-yield-in-normal-function.js | 21 ++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 test/language/statements/let/syntax/let-newline-yield-in-generator-function.js create mode 100644 test/language/statements/let/syntax/let-newline-yield-in-normal-function.js diff --git a/test/language/statements/let/syntax/let-newline-yield-in-generator-function.js b/test/language/statements/let/syntax/let-newline-yield-in-generator-function.js new file mode 100644 index 0000000000..c7a7adb798 --- /dev/null +++ b/test/language/statements/let/syntax/let-newline-yield-in-generator-function.js @@ -0,0 +1,22 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Jeff Walden +esid: sec-let-and-const-declarations +description: > + `let await` does not permit ASI in between, as `await` is a BindingIdentifier +info: > + `await` is a perfectly cromulent binding name in any context grammatically, just + prohibited by static semantics in some contexts. Therefore ASI can never apply + between `let` (where a LexicalDeclaration is permitted) and `await`, + so a subsequent `0` where `=` was expected is a syntax error. +negative: + phase: early + type: SyntaxError +---*/ + +async function f() { + let + await 0; +} diff --git a/test/language/statements/let/syntax/let-newline-yield-in-normal-function.js b/test/language/statements/let/syntax/let-newline-yield-in-normal-function.js new file mode 100644 index 0000000000..60471fede4 --- /dev/null +++ b/test/language/statements/let/syntax/let-newline-yield-in-normal-function.js @@ -0,0 +1,21 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-let-and-const-declarations +description: > + `let yield` does not permit ASI in between, as `yield` is a BindingIdentifier +info: > + `yield` is a perfectly cromulent binding name in any context grammatically, just + prohibited by static semantics in some contexts. Therefore ASI can never apply + between `let` (where a LexicalDeclaration is permitted) and `yield`, + so a subsequent `0` where `=` was expected is a syntax error. +negative: + phase: early + type: SyntaxError +---*/ + +function f() { + let + yield 0; +}