Skip to content

Commit

Permalink
fix(es/parser): Make let a reserved word in strict mode (#4113)
Browse files Browse the repository at this point in the history
  • Loading branch information
Austaras committed Mar 22, 2022
1 parent 39507b0 commit 9a8fc27
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 21 deletions.
25 changes: 5 additions & 20 deletions crates/swc_ecma_parser/src/parser/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -357,27 +357,12 @@ impl<'a, I: Tokens> Parser<I> {
|| (self.input.syntax().typescript() && is_one_of!(self, IdentRef, "await"))
|| is!(self, IdentRef)
{
// TODO: Handle [Yield, Await]
let id = self.parse_ident_name()?;
match id.sym {
// js_word!("eval") | js_word!("arguments") => {
// self.emit_err(id.span,
// SyntaxError::EvalAndArgumentsInStrict)
// }
js_word!("yield")
| js_word!("static")
| js_word!("implements")
| js_word!("let")
| js_word!("package")
| js_word!("private")
| js_word!("protected")
| js_word!("public") => {
self.emit_strict_mode_err(
self.input.prev_span(),
SyntaxError::InvalidIdentInStrict,
);
}
_ => {}
if id.is_reserved_in_strict_mode(self.ctx().module && !self.ctx().in_declare) {
self.emit_strict_mode_err(
self.input.prev_span(),
SyntaxError::InvalidIdentInStrict,
);
}

if can_be_arrow && id.sym == js_word!("async") && is!(self, BindingIdent) {
Expand Down
2 changes: 1 addition & 1 deletion crates/swc_ecma_parser/src/parser/ident.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,10 @@ impl<'a, I: Tokens> Parser<I> {
p.emit_err(p.input.prev_span(), SyntaxError::InvalidIdentInStrict);
}
Word::Keyword(Keyword::Yield)
| Word::Keyword(Keyword::Let)
| Word::Ident(js_word!("static"))
| Word::Ident(js_word!("implements"))
| Word::Ident(js_word!("interface"))
| Word::Ident(js_word!("let"))
| Word::Ident(js_word!("package"))
| Word::Ident(js_word!("private"))
| Word::Ident(js_word!("protected"))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@

x 'implements', 'interface', 'let', 'package', 'private', 'protected', 'public', 'static', or 'yield' cannot be used as an identifier in strict mode
,-[$DIR/tests/typescript-errors/issue-1391/case2/input.ts:2:5]
2 | let b = 1;
: ^^^
`----

x Expected a semicolon
,-[$DIR/tests/typescript-errors/issue-1391/case2/input.ts:2:5]
2 | let b = 1;
Expand Down
3 changes: 3 additions & 0 deletions crates/swc_ecma_parser/tests/typescript-errors/let/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export {};

let let;
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

x 'implements', 'interface', 'let', 'package', 'private', 'protected', 'public', 'static', or 'yield' cannot be used as an identifier in strict mode
,-[$DIR/tests/typescript-errors/let/index.ts:3:1]
3 | let let;
: ^^^
`----

1 comment on commit 9a8fc27

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 9a8fc27 Previous: dd862ba Ratio
base_tr_fixer 27156 ns/iter (± 4098) 23458 ns/iter (± 358) 1.16
base_tr_resolver_and_hygiene 116596 ns/iter (± 27451) 94958 ns/iter (± 11217) 1.23
codegen_es2015 32087 ns/iter (± 6215) 31110 ns/iter (± 202) 1.03
codegen_es2016 33958 ns/iter (± 7548) 31112 ns/iter (± 171) 1.09
codegen_es2017 37246 ns/iter (± 9011) 31195 ns/iter (± 293) 1.19
codegen_es2018 34451 ns/iter (± 5922) 31204 ns/iter (± 167) 1.10
codegen_es2019 32134 ns/iter (± 6189) 31125 ns/iter (± 271) 1.03
codegen_es2020 31293 ns/iter (± 9845) 31161 ns/iter (± 261) 1.00
codegen_es3 31668 ns/iter (± 5028) 31070 ns/iter (± 209) 1.02
codegen_es5 38180 ns/iter (± 3033) 31058 ns/iter (± 189) 1.23
full_es2015 150752360 ns/iter (± 23205927) 138677368 ns/iter (± 14983760) 1.09
full_es2016 155223019 ns/iter (± 27711548) 138060287 ns/iter (± 5118241) 1.12
full_es2017 156784097 ns/iter (± 17075356) 136987943 ns/iter (± 5315834) 1.14
full_es2018 147493827 ns/iter (± 22822412) 136026640 ns/iter (± 4099888) 1.08
full_es2019 148090788 ns/iter (± 22217304) 135483998 ns/iter (± 3826059) 1.09
full_es2020 137405197 ns/iter (± 23720264) 120466886 ns/iter (± 9057124) 1.14
full_es3 193768115 ns/iter (± 30713141) 183538594 ns/iter (± 6100020) 1.06
full_es5 185024601 ns/iter (± 39701090) 172977956 ns/iter (± 5774500) 1.07
parser 606358 ns/iter (± 69767) 563160 ns/iter (± 12624) 1.08
ser_ast_node 138 ns/iter (± 41) 146 ns/iter (± 2) 0.95
ser_serde 151 ns/iter (± 30) 145 ns/iter (± 1) 1.04
emit_colors 9232158 ns/iter (± 6033967) 15196037 ns/iter (± 12186913) 0.61
emit_large 44440889 ns/iter (± 68677058) 74537578 ns/iter (± 99760353) 0.60
base_clone 2265152 ns/iter (± 268938) 2388054 ns/iter (± 180136) 0.95
fold_span 3981550 ns/iter (± 817315) 3963974 ns/iter (± 299223) 1.00
fold_span_panic 4187836 ns/iter (± 571134) 4314857 ns/iter (± 555378) 0.97
visit_mut_span 2769772 ns/iter (± 448994) 3095537 ns/iter (± 367251) 0.89
visit_mut_span_panic 2730047 ns/iter (± 310318) 2913561 ns/iter (± 250347) 0.94
usage_builtin_type 15537387 ns/iter (± 10594049) 15855368 ns/iter (± 9854246) 0.98
usage_property 429470 ns/iter (± 143715) 395932 ns/iter (± 4017) 1.08
boxing_boxed 118 ns/iter (± 81) 134 ns/iter (± 1) 0.88
boxing_boxed_clone 73 ns/iter (± 24) 71 ns/iter (± 0) 1.03
boxing_unboxed 128 ns/iter (± 30) 120 ns/iter (± 0) 1.07
boxing_unboxed_clone 59 ns/iter (± 15) 63 ns/iter (± 0) 0.94
time_10 300 ns/iter (± 42) 305 ns/iter (± 3) 0.98
time_15 669 ns/iter (± 181) 718 ns/iter (± 3) 0.93
time_20 1169 ns/iter (± 174) 1364 ns/iter (± 5) 0.86
time_40 4798 ns/iter (± 1022) 7097 ns/iter (± 32) 0.68
time_5 92 ns/iter (± 11) 99 ns/iter (± 0) 0.93
time_60 8437 ns/iter (± 2515) 16110 ns/iter (± 83) 0.52
es2015 11002898 ns/iter (± 915357)
total 0 ns/iter (± 0) 0 ns/iter (± 0) NaN

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.