Skip to content

Commit

Permalink
[parser] yield is reserved as an identifier inside generators
Browse files Browse the repository at this point in the history
Summary:
similar to D5618739

//BindingIdentifier//: **yield**
It is a Syntax Error if this production has a [Yield] parameter.

(https://tc39.github.io/ecma262/#sec-identifiers-static-semantics-early-errors)

Reviewed By: samwgoldman

Differential Revision: D5636353

fbshipit-source-id: 5cb63405c59b6c13c62e86fe9b4fa02e11e5d60a
  • Loading branch information
mroch authored and facebook-github-bot committed Aug 16, 2017
1 parent 5e69677 commit 2b24a84
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 69 deletions.
13 changes: 10 additions & 3 deletions src/parser/parser_flow.ml
Expand Up @@ -260,22 +260,29 @@ module rec Parse : PARSER = struct
if no_let env
then error env (Error.UnexpectedToken name);
Eat.token env
| _ when is_strict_reserved name ->
strict_error env Error.StrictReservedWord;
Eat.token env
| T_AWAIT ->
(* `allow_await` means that `await` is allowed to be a keyword,
which makes it illegal to use as an identifier.
https://tc39.github.io/ecma262/#sec-identifiers-static-semantics-early-errors *)
if allow_await env then error env Error.UnexpectedReserved;
Eat.token env
| T_YIELD ->
(* `allow_yield` means that `yield` is allowed to be a keyword,
which makes it illegal to use as an identifier.
https://tc39.github.io/ecma262/#sec-identifiers-static-semantics-early-errors *)
if allow_yield env then error env Error.UnexpectedReserved
else strict_error env Error.StrictReservedWord;
Eat.token env
| T_DECLARE
| T_OF
| T_ASYNC
| T_OPAQUE
| T_TYPE as t ->
(* These aren't real identifiers *)
Expect.token env t
| _ when is_strict_reserved name ->
strict_error env Error.StrictReservedWord;
Eat.token env
| _ -> Expect.token env T_IDENTIFIER);
(match restricted_error with
| Some err when is_restricted name -> strict_error_at env (loc, err)
Expand Down
70 changes: 4 additions & 66 deletions src/parser/test/test262_baseline.txt
Expand Up @@ -524,38 +524,10 @@ language/expressions/async-generator/early-errors-expression-formals-contains-su
Missing parse error
language/expressions/async-generator/early-errors-expression-formals-contains-super-property.js (default)
Missing parse error
language/expressions/async-generator/early-errors-expression-formals-contains-yield.js (default)
Missing parse error
language/expressions/async-generator/early-errors-expression-yield-as-function-binding-identifier.js (default)
Missing parse error
language/expressions/async-generator/early-errors-expression-yield-star-after-newline.js (strict mode)
Missing parse error
language/expressions/async-generator/early-errors-expression-yield-star-after-newline.js (default)
Missing parse error
language/expressions/async-generator/named-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/async-generator/named-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/async-generator/yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/async-generator/yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/class/async-gen-method-static-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/class/async-gen-method-static-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/class/async-gen-method-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/class/async-gen-method-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/class/gen-method-static-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/class/gen-method-static-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/class/gen-method-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/class/gen-method-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/class/method-param-dflt-yield.js (default)
Missing parse error
language/expressions/class/static-method-param-dflt-yield.js (default)
Expand All @@ -580,30 +552,14 @@ language/expressions/function/use-strict-with-non-simple-param.js (strict mode)
Missing parse error
language/expressions/function/use-strict-with-non-simple-param.js (default)
Missing parse error
language/expressions/generators/named-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/generators/named-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/generators/use-strict-with-non-simple-param.js (strict mode)
Missing parse error
language/expressions/generators/use-strict-with-non-simple-param.js (default)
Missing parse error
language/expressions/generators/yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/generators/yield-as-generator-expression-binding-identifier.js (default)
Missing parse error
language/expressions/generators/yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/generators/yield-as-parameter.js (default)
Missing parse error
language/expressions/generators/yield-star-after-newline.js (strict mode)
Missing parse error
language/expressions/generators/yield-star-after-newline.js (default)
Missing parse error
language/expressions/object/method-definition/async-gen-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/object/method-definition/async-gen-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/object/method-definition/early-errors-object-method-NSPL-with-USD.js (strict mode)
Missing parse error
language/expressions/object/method-definition/early-errors-object-method-NSPL-with-USD.js (default)
Expand All @@ -630,12 +586,6 @@ language/expressions/object/method-definition/early-errors-object-method-formals
Missing parse error
language/expressions/object/method-definition/early-errors-object-method-formals-contains-super-call.js (default)
Missing parse error
language/expressions/object/method-definition/gen-yield-as-binding-identifier.js (default)
Missing parse error
language/expressions/object/method-definition/gen-yield-as-identifier-reference.js (default)
Missing parse error
language/expressions/object/method-definition/generator-param-id-yield.js (default)
Missing parse error
language/expressions/object/method-definition/generator-param-redecl-const.js (strict mode)
Missing parse error
language/expressions/object/method-definition/generator-param-redecl-const.js (default)
Expand Down Expand Up @@ -676,8 +626,6 @@ language/expressions/object/method-definition/use-strict-with-non-simple-param.j
Missing parse error
language/expressions/object/method-definition/use-strict-with-non-simple-param.js (default)
Missing parse error
language/expressions/object/method-definition/yield-as-parameter.js (default)
Missing parse error
language/expressions/object/method-definition/yield-star-after-newline.js (strict mode)
Missing parse error
language/expressions/object/method-definition/yield-star-after-newline.js (default)
Expand Down Expand Up @@ -1030,10 +978,6 @@ language/statements/async-function/early-errors-declaration-formals-contains-sup
Missing parse error
language/statements/async-function/early-errors-declaration-formals-contains-super-property.js (default)
Missing parse error
language/statements/async-generator/yield-as-binding-identifier.js (default)
Missing parse error
language/statements/async-generator/yield-as-identifier-reference.js (default)
Missing parse error
language/statements/class/definition/early-errors-class-method-NSPL-with-USD.js (strict mode)
Missing parse error
language/statements/class/definition/early-errors-class-method-NSPL-with-USD.js (default)
Expand Down Expand Up @@ -1560,12 +1504,6 @@ language/statements/generators/use-strict-with-non-simple-param.js (strict mode)
Missing parse error
language/statements/generators/use-strict-with-non-simple-param.js (default)
Missing parse error
language/statements/generators/yield-as-binding-identifier.js (default)
Missing parse error
language/statements/generators/yield-as-identifier-reference.js (default)
Missing parse error
language/statements/generators/yield-as-parameter.js (default)
Missing parse error
language/statements/generators/yield-star-after-newline.js (strict mode)
Missing parse error
language/statements/generators/yield-star-after-newline.js (default)
Expand Down Expand Up @@ -2264,21 +2202,21 @@ language/white-space/mongolian-vowel-separator.js (default)
Missing parse error

=== Summary ===
Passed: 54173 (97.95%)
Failed: 1132 (2.05%)
Passed: 54204 (98.01%)
Failed: 1101 (1.99%)

Features:
Reflect: 244/246 (99.19%)
Symbol.iterator: 1314/1324 (99.24%)
Symbol.toStringTag: 80/82 (97.56%)
arrow-function: 18/24 (75.00%)
async-functions: 144/217 (66.36%)
async-iteration: 6884/7052 (97.62%)
async-iteration: 6898/7052 (97.82%)
class: 124/132 (93.94%)
default-parameters: 3332/3334 (99.94%)
destructuring-binding: 10325/10699 (96.50%)
generator: 390/396 (98.48%)
generators: 1281/1343 (95.38%)
generators: 1283/1343 (95.53%)
let: 125/135 (92.59%)
object-rest: 610/620 (98.39%)
regexp-named-groups: 36/40 (90.00%)
Expand Down

0 comments on commit 2b24a84

Please sign in to comment.