Skip to content

Commit e527c12

Browse files
authoredAug 14, 2023
fix(es/parser): Revert lexer fix for << (#7807)
This temporarily reverts commit 6850372 until #7621 can be fixed. Re-opens #7187.
1 parent 74d446f commit e527c12

File tree

7 files changed

+7
-242
lines changed

7 files changed

+7
-242
lines changed
 

‎crates/swc_ecma_parser/src/lexer/state.rs

-4
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,6 @@ impl Tokens for Lexer<'_> {
189189
fn take_errors(&mut self) -> Vec<Error> {
190190
take(&mut self.errors.borrow_mut())
191191
}
192-
193-
fn reset_to(&mut self, to: BytePos) {
194-
self.input.reset_to(to);
195-
}
196192
}
197193

198194
impl<'a> Iterator for Lexer<'a> {

‎crates/swc_ecma_parser/src/macros.rs

-3
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,6 @@ macro_rules! tok {
113113
('>') => {
114114
crate::token::Token::BinOp(crate::token::BinOpToken::Gt)
115115
};
116-
("<<") => {
117-
crate::token::Token::BinOp(crate::token::BinOpToken::LShift)
118-
};
119116
(">>") => {
120117
crate::token::Token::BinOp(crate::token::BinOpToken::RShift)
121118
};

‎crates/swc_ecma_parser/src/parser/expr.rs

+2-21
Original file line numberDiff line numberDiff line change
@@ -688,12 +688,11 @@ impl<I: Tokens> Parser<I> {
688688
let obj = self.parse_primary_expr()?;
689689
return_if_arrow!(self, obj);
690690

691-
let type_args = if self.syntax().typescript() {
691+
let type_args = if self.syntax().typescript() && is!(self, '<') {
692692
self.try_parse_ts_type_args()
693693
} else {
694694
None
695695
};
696-
697696
let obj = if let Some(type_args) = type_args {
698697
trace_cur!(self, parse_member_expr_or_new_expr__with_type_args);
699698
Box::new(Expr::TsInstantiation(TsInstantiation {
@@ -1621,27 +1620,9 @@ impl<I: Tokens> Parser<I> {
16211620
let callee = self.parse_new_expr()?;
16221621
return_if_arrow!(self, callee);
16231622

1624-
let type_args = if self.input.syntax().typescript() && is_one_of!(self, '<', "<<") {
1625-
let type_args_start = self.input.cur_pos();
1623+
let type_args = if self.input.syntax().typescript() && is!(self, '<') {
16261624
self.try_parse_ts(|p| {
1627-
trace_cur!(p, parse_lhs_expr__type_args);
1628-
1629-
if is!(p, "<<") {
1630-
let ctx = Context {
1631-
should_not_lex_lt_or_gt_as_type: false,
1632-
in_type: true,
1633-
..p.ctx()
1634-
};
1635-
p.input.reset_to(type_args_start);
1636-
p.input.set_ctx(ctx);
1637-
}
1638-
1639-
trace_cur!(p, parse_lhs_expr__before_type_args);
1640-
16411625
let type_args = p.parse_ts_type_args()?;
1642-
1643-
trace_cur!(p, parse_lhs_expr__after_type_args);
1644-
16451626
if is!(p, '(') {
16461627
Ok(Some(type_args))
16471628
} else {

‎crates/swc_ecma_parser/src/parser/input.rs

+3-17
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ pub trait Tokens: Clone + Iterator<Item = TokenAndSpan> {
4646
fn add_module_mode_error(&self, error: Error);
4747

4848
fn take_errors(&mut self) -> Vec<Error>;
49-
50-
fn reset_to(&mut self, to: BytePos);
5149
}
5250

5351
#[derive(Clone)]
@@ -143,8 +141,6 @@ impl Tokens for TokensInput {
143141
fn take_errors(&mut self) -> Vec<Error> {
144142
take(&mut self.errors.borrow_mut())
145143
}
146-
147-
fn reset_to(&mut self, _: BytePos) {}
148144
}
149145

150146
/// Note: Lexer need access to parser's context to lex correctly.
@@ -257,10 +253,6 @@ impl<I: Tokens> Tokens for Capturing<I> {
257253
fn take_errors(&mut self) -> Vec<Error> {
258254
self.inner.take_errors()
259255
}
260-
261-
fn reset_to(&mut self, to: BytePos) {
262-
self.inner.reset_to(to);
263-
}
264256
}
265257

266258
/// This struct is responsible for managing current token and peeked token.
@@ -326,9 +318,9 @@ impl<I: Tokens> Buffer<I> {
326318

327319
#[cold]
328320
#[inline(never)]
329-
pub fn dump_cur(&self) -> String {
330-
match &self.cur {
331-
Some(v) => format!("{:?}", v.token),
321+
pub fn dump_cur(&mut self) -> String {
322+
match self.cur() {
323+
Some(v) => format!("{:?}", v),
332324
None => "<eof>".to_string(),
333325
}
334326
}
@@ -502,10 +494,4 @@ impl<I: Tokens> Buffer<I> {
502494
pub(crate) fn set_token_context(&mut self, c: lexer::TokenContexts) {
503495
self.iter.set_token_context(c)
504496
}
505-
506-
#[inline]
507-
pub(crate) fn reset_to(&mut self, to: BytePos) {
508-
self.cur = None;
509-
self.iter.reset_to(to)
510-
}
511497
}

‎crates/swc_ecma_parser/src/parser/typescript.rs

+2-27
Original file line numberDiff line numberDiff line change
@@ -461,9 +461,7 @@ impl<I: Tokens> Parser<I> {
461461
permit_in_out: bool,
462462
permit_const: bool,
463463
) -> PResult<Box<TsTypeParamDecl>> {
464-
trace_cur!(self, parse_ts_type_params);
465-
466-
let ret = self.in_type().parse_with(|p| {
464+
self.in_type().parse_with(|p| {
467465
p.ts_in_no_context(|p| {
468466
let start = cur_pos!(p);
469467

@@ -485,11 +483,7 @@ impl<I: Tokens> Parser<I> {
485483
params,
486484
}))
487485
})
488-
})?;
489-
490-
trace_cur!(self, parse_ts_type_params__end);
491-
492-
Ok(ret)
486+
})
493487
}
494488

495489
/// `tsParseTypeOrTypePredicateAnnotation`
@@ -585,25 +579,11 @@ impl<I: Tokens> Parser<I> {
585579

586580
#[cfg_attr(feature = "debug", tracing::instrument(skip_all))]
587581
pub(super) fn try_parse_ts_type_args(&mut self) -> Option<Box<TsTypeParamInstantiation>> {
588-
let start = self.input.cur_pos();
589-
590582
trace_cur!(self, try_parse_ts_type_args);
591583
debug_assert!(self.input.syntax().typescript());
592584

593585
self.try_parse_ts(|p| {
594-
let nested = is!(p, "<<");
595-
if nested {
596-
let ctx = Context {
597-
should_not_lex_lt_or_gt_as_type: false,
598-
in_type: true,
599-
..p.ctx()
600-
};
601-
p.input.reset_to(start);
602-
p.input.set_ctx(ctx);
603-
}
604-
605586
let type_args = p.parse_ts_type_args()?;
606-
trace_cur!(p, try_parse_ts_type_args__after_type_args);
607587

608588
if is_one_of!(
609589
p, '<', // invalid syntax
@@ -1865,12 +1845,9 @@ impl<I: Tokens> Parser<I> {
18651845

18661846
// ----- inlined `self.tsFillSignature(tt.arrow, node)`
18671847
let type_params = self.try_parse_ts_type_params(false, true)?;
1868-
trace_cur!(self, parse_ts_fn_or_constructor_type__after_type_params);
18691848
expect!(self, '(');
18701849
let params = self.parse_ts_binding_list_for_signature()?;
1871-
trace_cur!(self, parse_ts_fn_or_constructor_type__after_params);
18721850
let type_ann = self.parse_ts_type_or_type_predicate_ann(&tok!("=>"))?;
1873-
trace_cur!(self, parse_ts_fn_or_constructor_type__after_type_ann);
18741851
// ----- end
18751852

18761853
Ok(if is_fn_type {
@@ -2038,8 +2015,6 @@ impl<I: Tokens> Parser<I> {
20382015
permit_in_out: bool,
20392016
permit_const: bool,
20402017
) -> PResult<Option<Box<TsTypeParamDecl>>> {
2041-
trace_cur!(self, try_parse_ts_type_params);
2042-
20432018
if !cfg!(feature = "typescript") {
20442019
return Ok(None);
20452020
}

‎crates/swc_ecma_parser/tests/typescript/issue-7187/1/input.tsx

-1
This file was deleted.

‎crates/swc_ecma_parser/tests/typescript/issue-7187/1/input.tsx.json

-169
This file was deleted.

1 commit comments

Comments
 (1)

github-actions[bot] commented on Aug 14, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: e527c12 Previous: 5e7834a Ratio
es/full/bugs-1 297853 ns/iter (± 8847) 290182 ns/iter (± 3993) 1.03
es/full/minify/libraries/antd 1310765582 ns/iter (± 4435084) 1308960514 ns/iter (± 9326156) 1.00
es/full/minify/libraries/d3 274788092 ns/iter (± 2473237) 279696969 ns/iter (± 4526061) 0.98
es/full/minify/libraries/echarts 1056011049 ns/iter (± 5136094) 1051804016 ns/iter (± 4203229) 1.00
es/full/minify/libraries/jquery 85172699 ns/iter (± 135928) 84928046 ns/iter (± 105879) 1.00
es/full/minify/libraries/lodash 98459040 ns/iter (± 346164) 98435136 ns/iter (± 252299) 1.00
es/full/minify/libraries/moment 50223077 ns/iter (± 80212) 50030303 ns/iter (± 61871) 1.00
es/full/minify/libraries/react 18002768 ns/iter (± 65107) 18089232 ns/iter (± 40340) 1.00
es/full/minify/libraries/terser 219888250 ns/iter (± 733433) 220115546 ns/iter (± 505684) 1.00
es/full/minify/libraries/three 386834233 ns/iter (± 1417125) 384499746 ns/iter (± 1167559) 1.01
es/full/minify/libraries/typescript 2661688155 ns/iter (± 11433731) 2789494711 ns/iter (± 67649059) 0.95
es/full/minify/libraries/victory 573750764 ns/iter (± 4753642) 597748036 ns/iter (± 16816410) 0.96
es/full/minify/libraries/vue 120717205 ns/iter (± 605973) 121447944 ns/iter (± 609997) 0.99
es/full/codegen/es3 35215 ns/iter (± 106) 34544 ns/iter (± 42) 1.02
es/full/codegen/es5 35057 ns/iter (± 101) 34477 ns/iter (± 57) 1.02
es/full/codegen/es2015 35164 ns/iter (± 65) 34537 ns/iter (± 67) 1.02
es/full/codegen/es2016 35177 ns/iter (± 99) 34593 ns/iter (± 125) 1.02
es/full/codegen/es2017 35221 ns/iter (± 83) 34594 ns/iter (± 61) 1.02
es/full/codegen/es2018 35116 ns/iter (± 82) 34590 ns/iter (± 65) 1.02
es/full/codegen/es2019 35295 ns/iter (± 142) 34541 ns/iter (± 99) 1.02
es/full/codegen/es2020 35219 ns/iter (± 51) 34549 ns/iter (± 67) 1.02
es/full/all/es3 167873349 ns/iter (± 800478) 173370550 ns/iter (± 835288) 0.97
es/full/all/es5 159957927 ns/iter (± 989092) 165253714 ns/iter (± 619598) 0.97
es/full/all/es2015 119717466 ns/iter (± 595030) 124430677 ns/iter (± 764945) 0.96
es/full/all/es2016 119122449 ns/iter (± 777458) 123241645 ns/iter (± 596997) 0.97
es/full/all/es2017 117980371 ns/iter (± 834533) 122360433 ns/iter (± 930967) 0.96
es/full/all/es2018 116599886 ns/iter (± 398948) 120826376 ns/iter (± 594832) 0.97
es/full/all/es2019 115893928 ns/iter (± 995573) 119911666 ns/iter (± 639455) 0.97
es/full/all/es2020 110893589 ns/iter (± 532487) 115901236 ns/iter (± 763322) 0.96
es/full/parser 496107 ns/iter (± 5778) 532335 ns/iter (± 7712) 0.93
es/full/base/fixer 18502 ns/iter (± 69) 17352 ns/iter (± 353) 1.07
es/full/base/resolver_and_hygiene 81608 ns/iter (± 192) 80678 ns/iter (± 130) 1.01
serialization of serde 299 ns/iter (± 0) 296 ns/iter (± 0) 1.01
css/minify/libraries/bootstrap 29072137 ns/iter (± 49942) 29399706 ns/iter (± 74321) 0.99
css/visitor/compare/clone 1631787 ns/iter (± 1355) 1641557 ns/iter (± 1912) 0.99
css/visitor/compare/visit_mut_span 1754399 ns/iter (± 2513) 1791235 ns/iter (± 10170) 0.98
css/visitor/compare/visit_mut_span_panic 1827899 ns/iter (± 3139) 1842726 ns/iter (± 2790) 0.99
css/visitor/compare/fold_span 2587703 ns/iter (± 13837) 2574133 ns/iter (± 17536) 1.01
css/visitor/compare/fold_span_panic 2740419 ns/iter (± 17520) 2763538 ns/iter (± 12417) 0.99
css/lexer/bootstrap_5_1_3 4441576 ns/iter (± 4999) 4475668 ns/iter (± 4542) 0.99
css/lexer/foundation_6_7_4 3733921 ns/iter (± 125161) 3806869 ns/iter (± 1967) 0.98
css/lexer/tailwind_3_1_1 712834 ns/iter (± 626) 722511 ns/iter (± 678) 0.99
css/parser/bootstrap_5_1_3 19817590 ns/iter (± 54116) 19340223 ns/iter (± 35575) 1.02
css/parser/foundation_6_7_4 15952394 ns/iter (± 22214) 15606382 ns/iter (± 27830) 1.02
css/parser/tailwind_3_1_1 3026839 ns/iter (± 10151) 2994553 ns/iter (± 1436) 1.01
es/codegen/colors 738916 ns/iter (± 405942) 730030 ns/iter (± 396720) 1.01
es/codegen/large 3151157 ns/iter (± 1682542) 2913050 ns/iter (± 1531522) 1.08
es/codegen/with-parser/colors 45629 ns/iter (± 485) 45583 ns/iter (± 781) 1.00
es/codegen/with-parser/large 489536 ns/iter (± 777) 487583 ns/iter (± 1027) 1.00
es/minify/libraries/antd 1139865278 ns/iter (± 7750642) 1151057280 ns/iter (± 11905031) 0.99
es/minify/libraries/d3 241198406 ns/iter (± 352949) 240463737 ns/iter (± 551078) 1.00
es/minify/libraries/echarts 902422607 ns/iter (± 4077635) 907903523 ns/iter (± 2740840) 0.99
es/minify/libraries/jquery 74246995 ns/iter (± 92568) 74094869 ns/iter (± 218545) 1.00
es/minify/libraries/lodash 88766260 ns/iter (± 190484) 88507188 ns/iter (± 344805) 1.00
es/minify/libraries/moment 43734505 ns/iter (± 64773) 43765907 ns/iter (± 144572) 1.00
es/minify/libraries/react 16106186 ns/iter (± 77217) 16028831 ns/iter (± 193803) 1.00
es/minify/libraries/terser 187594086 ns/iter (± 376803) 188855249 ns/iter (± 1693850) 0.99
es/minify/libraries/three 322440538 ns/iter (± 811938) 320964827 ns/iter (± 1127687) 1.00
es/minify/libraries/typescript 2273444472 ns/iter (± 11389614) 2293656738 ns/iter (± 33040408) 0.99
es/minify/libraries/victory 481876406 ns/iter (± 1826121) 492254999 ns/iter (± 6007464) 0.98
es/minify/libraries/vue 107429706 ns/iter (± 194663) 106751425 ns/iter (± 174314) 1.01
es/visitor/compare/clone 1937392 ns/iter (± 9051) 1930690 ns/iter (± 4446) 1.00
es/visitor/compare/visit_mut_span 2264187 ns/iter (± 2437) 2286355 ns/iter (± 5596) 0.99
es/visitor/compare/visit_mut_span_panic 2324664 ns/iter (± 2902) 2312709 ns/iter (± 4392) 1.01
es/visitor/compare/fold_span 3354564 ns/iter (± 8955) 3349339 ns/iter (± 19346) 1.00
es/visitor/compare/fold_span_panic 3510530 ns/iter (± 6658) 3452980 ns/iter (± 7795) 1.02
es/lexer/colors 13385 ns/iter (± 61) 13227 ns/iter (± 35) 1.01
es/lexer/angular 6224795 ns/iter (± 5435) 6132611 ns/iter (± 33121) 1.02
es/lexer/backbone 805421 ns/iter (± 1399) 801752 ns/iter (± 709) 1.00
es/lexer/jquery 4552794 ns/iter (± 7889) 4495883 ns/iter (± 3665) 1.01
es/lexer/jquery mobile 6970063 ns/iter (± 8957) 6886155 ns/iter (± 37704) 1.01
es/lexer/mootools 3605187 ns/iter (± 6096) 3562921 ns/iter (± 1442) 1.01
es/lexer/underscore 680627 ns/iter (± 1363) 670531 ns/iter (± 1506) 1.02
es/lexer/three 21765516 ns/iter (± 21613) 21408038 ns/iter (± 53338) 1.02
es/lexer/yui 3904730 ns/iter (± 5425) 3761299 ns/iter (± 1728) 1.04
es/parser/colors 27188 ns/iter (± 63) 27056 ns/iter (± 50) 1.00
es/parser/angular 13373655 ns/iter (± 91902) 13387550 ns/iter (± 47262) 1.00
es/parser/backbone 1971983 ns/iter (± 7954) 1980625 ns/iter (± 10897) 1.00
es/parser/jquery 10799851 ns/iter (± 28545) 10775610 ns/iter (± 45470) 1.00
es/parser/jquery mobile 16444644 ns/iter (± 55974) 16559320 ns/iter (± 43803) 0.99
es/parser/mootools 8297126 ns/iter (± 21124) 8275971 ns/iter (± 21139) 1.00
es/parser/underscore 1712344 ns/iter (± 11295) 1713700 ns/iter (± 10935) 1.00
es/parser/three 46415565 ns/iter (± 228027) 46625817 ns/iter (± 170034) 1.00
es/parser/yui 8184245 ns/iter (± 28875) 8174981 ns/iter (± 31834) 1.00
es/preset-env/usage/builtin_type 135746 ns/iter (± 33467) 136636 ns/iter (± 32059) 0.99
es/preset-env/usage/property 16673 ns/iter (± 41) 16860 ns/iter (± 72) 0.99
es/resolver/typescript 90069429 ns/iter (± 675043) 89045848 ns/iter (± 1257982) 1.01
es/fixer/typescript 64269461 ns/iter (± 463233) 64684293 ns/iter (± 837784) 0.99
es/hygiene/typescript 131766512 ns/iter (± 527431) 132700604 ns/iter (± 2297088) 0.99
es/resolver_with_hygiene/typescript 246050781 ns/iter (± 711301) 240130753 ns/iter (± 3214127) 1.02
es/visitor/base-perf/module_clone 60134 ns/iter (± 341) 59646 ns/iter (± 455) 1.01
es/visitor/base-perf/fold_empty 64091 ns/iter (± 414) 63872 ns/iter (± 216) 1.00
es/visitor/base-perf/fold_noop_impl_all 64292 ns/iter (± 243) 63860 ns/iter (± 403) 1.01
es/visitor/base-perf/fold_noop_impl_vec 64368 ns/iter (± 447) 64214 ns/iter (± 317) 1.00
es/visitor/base-perf/boxing_boxed_clone 56 ns/iter (± 0) 57 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 106 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 75 ns/iter (± 0) 1.04
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2579 ns/iter (± 7) 2545 ns/iter (± 16) 1.01
es/base/parallel/resolver/typescript 4124500282 ns/iter (± 228152147) 4457138072 ns/iter (± 265055999) 0.93
es/base/parallel/hygiene/typescript 1430346648 ns/iter (± 18166792) 1461418366 ns/iter (± 19046645) 0.98
misc/visitors/time-complexity/time 5 151 ns/iter (± 0) 154 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 10 432 ns/iter (± 0) 442 ns/iter (± 2) 0.98
misc/visitors/time-complexity/time 15 810 ns/iter (± 1) 801 ns/iter (± 2) 1.01
misc/visitors/time-complexity/time 20 1300 ns/iter (± 25) 1287 ns/iter (± 1) 1.01
misc/visitors/time-complexity/time 40 5028 ns/iter (± 2) 4352 ns/iter (± 7) 1.16
misc/visitors/time-complexity/time 60 9059 ns/iter (± 2) 9030 ns/iter (± 24) 1.00
es/full-target/es2016 233973 ns/iter (± 2595) 234148 ns/iter (± 785) 1.00
es/full-target/es2017 223535 ns/iter (± 911) 221535 ns/iter (± 1199) 1.01
es/full-target/es2018 211017 ns/iter (± 703) 208767 ns/iter (± 310) 1.01
es2020_nullish_coalescing 71509 ns/iter (± 636) 71561 ns/iter (± 300) 1.00
es2020_optional_chaining 80828 ns/iter (± 402) 81668 ns/iter (± 300) 0.99
es2022_class_properties 116920 ns/iter (± 606) 116335 ns/iter (± 2886) 1.01
es2018_object_rest_spread 76448 ns/iter (± 343) 76003 ns/iter (± 211) 1.01
es2019_optional_catch_binding 65622 ns/iter (± 245) 64743 ns/iter (± 161) 1.01
es2017_async_to_generator 66146 ns/iter (± 357) 65223 ns/iter (± 210) 1.01
es2016_exponentiation 69912 ns/iter (± 159) 69245 ns/iter (± 278) 1.01
es2015_arrow 73140 ns/iter (± 222) 72623 ns/iter (± 219) 1.01
es2015_block_scoped_fn 70715 ns/iter (± 455) 69298 ns/iter (± 232) 1.02
es2015_block_scoping 124669 ns/iter (± 1956) 124348 ns/iter (± 469) 1.00

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

Please sign in to comment.