Skip to content

Commit c3a8c0b

Browse files
authoredJun 18, 2024··
refactor(common): Simplify StringInput implementation (#9071)
1 parent ae6ab65 commit c3a8c0b

File tree

2 files changed

+5
-25
lines changed

2 files changed

+5
-25
lines changed
 

‎crates/swc_common/src/input.rs

+4-25
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ pub type SourceFileInput<'a> = StringInput<'a>;
99
/// Implementation of [Input].
1010
#[derive(Clone)]
1111
pub struct StringInput<'a> {
12-
start_pos_of_iter: BytePos,
1312
last_pos: BytePos,
1413
/// Current cursor
1514
iter: str::CharIndices<'a>,
@@ -31,7 +30,6 @@ impl<'a> StringInput<'a> {
3130
assert!(start <= end);
3231

3332
StringInput {
34-
start_pos_of_iter: start,
3533
last_pos: start,
3634
orig: src,
3735
iter: src.char_indices(),
@@ -82,8 +80,8 @@ impl<'a> Input for StringInput<'a> {
8280

8381
#[inline]
8482
unsafe fn bump(&mut self) {
85-
if let Some((i, c)) = self.iter.next() {
86-
self.last_pos = self.start_pos_of_iter + BytePos((i + c.len_utf8()) as u32);
83+
if let Some((_, c)) = self.iter.next() {
84+
self.last_pos = self.last_pos + BytePos((c.len_utf8()) as u32);
8785
} else {
8886
unsafe {
8987
debug_unreachable!("bump should not be called when cur() == None");
@@ -131,7 +129,6 @@ impl<'a> Input for StringInput<'a> {
131129

132130
self.iter = unsafe { s.get_unchecked(end_idx..) }.char_indices();
133131
self.last_pos = end;
134-
self.start_pos_of_iter = end;
135132

136133
ret
137134
}
@@ -155,7 +152,6 @@ impl<'a> Input for StringInput<'a> {
155152
let ret = unsafe { s.get_unchecked(..last) };
156153

157154
self.last_pos = self.last_pos + BytePos(last as _);
158-
self.start_pos_of_iter = self.last_pos;
159155
self.iter = unsafe { s.get_unchecked(last..) }.char_indices();
160156

161157
ret
@@ -181,7 +177,6 @@ impl<'a> Input for StringInput<'a> {
181177
debug_assert!(last <= s.len());
182178

183179
self.last_pos = self.last_pos + BytePos(last as _);
184-
self.start_pos_of_iter = self.last_pos;
185180
self.iter = unsafe { s.get_unchecked(last..) }.char_indices();
186181

187182
Some(self.last_pos)
@@ -195,7 +190,6 @@ impl<'a> Input for StringInput<'a> {
195190
debug_assert!(idx <= orig.len());
196191
let s = unsafe { orig.get_unchecked(idx..) };
197192
self.iter = s.char_indices();
198-
self.start_pos_of_iter = to;
199193
self.last_pos = to;
200194
}
201195

@@ -217,15 +211,8 @@ impl<'a> Input for StringInput<'a> {
217211
#[inline]
218212
fn eat_byte(&mut self, c: u8) -> bool {
219213
if self.is_byte(c) {
220-
if let Some((i, _)) = self.iter.next() {
221-
self.last_pos = self.start_pos_of_iter + BytePos((i + 1) as u32);
222-
} else {
223-
unsafe {
224-
debug_unreachable!(
225-
"We can't enter here as we already checked the state using `is_byte`"
226-
)
227-
}
228-
}
214+
self.iter.next();
215+
self.last_pos = self.last_pos + BytePos(1_u32);
229216
true
230217
} else {
231218
false
@@ -340,13 +327,11 @@ mod tests {
340327
with_test_sess("foo/d", |mut i| {
341328
assert_eq!(unsafe { i.slice(BytePos(1), BytePos(2)) }, "f");
342329
assert_eq!(i.last_pos, BytePos(2));
343-
assert_eq!(i.start_pos_of_iter, BytePos(2));
344330
assert_eq!(i.cur(), Some('o'));
345331

346332
assert_eq!(unsafe { i.slice(BytePos(2), BytePos(4)) }, "oo");
347333
assert_eq!(unsafe { i.slice(BytePos(1), BytePos(4)) }, "foo");
348334
assert_eq!(i.last_pos, BytePos(4));
349-
assert_eq!(i.start_pos_of_iter, BytePos(4));
350335
assert_eq!(i.cur(), Some('/'));
351336
});
352337
}
@@ -356,13 +341,11 @@ mod tests {
356341
with_test_sess("load", |mut i| {
357342
assert_eq!(unsafe { i.slice(BytePos(1), BytePos(3)) }, "lo");
358343
assert_eq!(i.last_pos, BytePos(3));
359-
assert_eq!(i.start_pos_of_iter, BytePos(3));
360344
assert_eq!(i.cur(), Some('a'));
361345
unsafe { i.reset_to(BytePos(1)) };
362346

363347
assert_eq!(i.cur(), Some('l'));
364348
assert_eq!(i.last_pos, BytePos(1));
365-
assert_eq!(i.start_pos_of_iter, BytePos(1));
366349
});
367350
}
368351

@@ -371,12 +354,10 @@ mod tests {
371354
with_test_sess("foo/d", |mut i| {
372355
assert_eq!(i.cur_pos(), BytePos(1));
373356
assert_eq!(i.last_pos, BytePos(1));
374-
assert_eq!(i.start_pos_of_iter, BytePos(1));
375357
assert_eq!(i.uncons_while(|c| c.is_alphabetic()), "foo");
376358

377359
// assert_eq!(i.cur_pos(), BytePos(4));
378360
assert_eq!(i.last_pos, BytePos(4));
379-
assert_eq!(i.start_pos_of_iter, BytePos(4));
380361
assert_eq!(i.cur(), Some('/'));
381362

382363
unsafe {
@@ -398,10 +379,8 @@ mod tests {
398379
with_test_sess("foo/d", |mut i| {
399380
assert_eq!(i.cur_pos(), BytePos(1));
400381
assert_eq!(i.last_pos, BytePos(1));
401-
assert_eq!(i.start_pos_of_iter, BytePos(1));
402382

403383
assert_eq!(i.find(|c| c == '/'), Some(BytePos(5)));
404-
assert_eq!(i.start_pos_of_iter, BytePos(5));
405384
assert_eq!(i.last_pos, BytePos(5));
406385
assert_eq!(i.cur(), Some('d'));
407386
});

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

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use crate::{
2525
};
2626

2727
mod comments_buffer;
28+
#[deprecated = "Directly use swc_common::input instead"]
2829
pub mod input;
2930
mod jsx;
3031
mod number;

1 commit comments

Comments
 (1)

github-actions[bot] commented on Jun 18, 2024

@github-actions[bot]

Benchmark

Benchmark suite Current: c3a8c0b Previous: aa59ca3 Ratio
es/full/bugs-1 298404 ns/iter (± 7389) 276806 ns/iter (± 2708) 1.08
es/full/minify/libraries/antd 1776794993 ns/iter (± 85834534) 1775197361 ns/iter (± 38370083) 1.00
es/full/minify/libraries/d3 340009579 ns/iter (± 1198619) 343969819 ns/iter (± 2606464) 0.99
es/full/minify/libraries/echarts 1448185177 ns/iter (± 57215045) 1501173311 ns/iter (± 18164791) 0.96
es/full/minify/libraries/jquery 102620388 ns/iter (± 328948) 103152825 ns/iter (± 345404) 0.99
es/full/minify/libraries/lodash 114180397 ns/iter (± 210575) 114381057 ns/iter (± 203713) 1.00
es/full/minify/libraries/moment 59497708 ns/iter (± 113926) 59949144 ns/iter (± 154846) 0.99
es/full/minify/libraries/react 18440265 ns/iter (± 34169) 18468183 ns/iter (± 23208) 1.00
es/full/minify/libraries/terser 273836591 ns/iter (± 812847) 275930999 ns/iter (± 2986853) 0.99
es/full/minify/libraries/three 465472623 ns/iter (± 1926269) 469200391 ns/iter (± 4033313) 0.99
es/full/minify/libraries/typescript 3307073236 ns/iter (± 66794527) 3242314516 ns/iter (± 22886511) 1.02
es/full/minify/libraries/victory 778814392 ns/iter (± 41362395) 732126398 ns/iter (± 17609658) 1.06
es/full/minify/libraries/vue 146983765 ns/iter (± 1449861) 146382973 ns/iter (± 445805) 1.00
es/full/codegen/es3 59683 ns/iter (± 500) 59433 ns/iter (± 179) 1.00
es/full/codegen/es5 59802 ns/iter (± 544) 60223 ns/iter (± 344) 0.99
es/full/codegen/es2015 59643 ns/iter (± 837) 59750 ns/iter (± 129) 1.00
es/full/codegen/es2016 59363 ns/iter (± 225) 59555 ns/iter (± 88) 1.00
es/full/codegen/es2017 59922 ns/iter (± 486) 59444 ns/iter (± 127) 1.01
es/full/codegen/es2018 59558 ns/iter (± 251) 59558 ns/iter (± 311) 1
es/full/codegen/es2019 59539 ns/iter (± 292) 59687 ns/iter (± 124) 1.00
es/full/codegen/es2020 59522 ns/iter (± 258) 59589 ns/iter (± 124) 1.00
es/full/all/es3 163304623 ns/iter (± 863134) 163857586 ns/iter (± 500847) 1.00
es/full/all/es5 157410189 ns/iter (± 944630) 158320732 ns/iter (± 1270723) 0.99
es/full/all/es2015 117606130 ns/iter (± 657633) 118311382 ns/iter (± 546503) 0.99
es/full/all/es2016 116507800 ns/iter (± 731290) 116986396 ns/iter (± 941812) 1.00
es/full/all/es2017 116006693 ns/iter (± 405918) 116573294 ns/iter (± 611717) 1.00
es/full/all/es2018 113359110 ns/iter (± 1290446) 114176931 ns/iter (± 557222) 0.99
es/full/all/es2019 113166007 ns/iter (± 880351) 113743086 ns/iter (± 625226) 0.99
es/full/all/es2020 108889352 ns/iter (± 901090) 109919158 ns/iter (± 1430361) 0.99
es/full/parser 471641 ns/iter (± 3575) 479660 ns/iter (± 2123) 0.98
es/full/base/fixer 15396 ns/iter (± 84) 16231 ns/iter (± 111) 0.95
es/full/base/resolver_and_hygiene 80207 ns/iter (± 1059) 81629 ns/iter (± 363) 0.98
serialization of serde 283 ns/iter (± 5) 283 ns/iter (± 1) 1
css/minify/libraries/bootstrap 22138820 ns/iter (± 159663) 22134904 ns/iter (± 152367) 1.00
css/visitor/compare/clone 1386424 ns/iter (± 8019) 1386120 ns/iter (± 18098) 1.00
css/visitor/compare/visit_mut_span 1513463 ns/iter (± 3707) 1509238 ns/iter (± 5745) 1.00
css/visitor/compare/visit_mut_span_panic 1528328 ns/iter (± 27601) 1546440 ns/iter (± 23388) 0.99
css/visitor/compare/fold_span 2041419 ns/iter (± 7657) 2019398 ns/iter (± 8705) 1.01
css/visitor/compare/fold_span_panic 2177620 ns/iter (± 21379) 2167035 ns/iter (± 9491) 1.00
css/lexer/bootstrap_5_1_3 3456385 ns/iter (± 39317) 3443347 ns/iter (± 14131) 1.00
css/lexer/foundation_6_7_4 2796930 ns/iter (± 3929) 2783031 ns/iter (± 4421) 1.00
css/lexer/tailwind_3_1_1 538937 ns/iter (± 775) 532985 ns/iter (± 773) 1.01
css/parser/bootstrap_5_1_3 16545483 ns/iter (± 137019) 16107989 ns/iter (± 149250) 1.03
css/parser/foundation_6_7_4 13124173 ns/iter (± 119272) 12869520 ns/iter (± 22296) 1.02
css/parser/tailwind_3_1_1 2550064 ns/iter (± 3689) 2543938 ns/iter (± 11924) 1.00
es/codegen/colors 728851 ns/iter (± 397041) 735491 ns/iter (± 408238) 0.99
es/codegen/large 2983940 ns/iter (± 1625054) 2992674 ns/iter (± 1606215) 1.00
es/codegen/with-parser/colors 42861 ns/iter (± 752) 43173 ns/iter (± 210) 0.99
es/codegen/with-parser/large 463201 ns/iter (± 4098) 467093 ns/iter (± 2937) 0.99
es/minify/libraries/antd 1513500764 ns/iter (± 25599337) 1439457464 ns/iter (± 36673194) 1.05
es/minify/libraries/d3 288267559 ns/iter (± 7617598) 285662113 ns/iter (± 5249859) 1.01
es/minify/libraries/echarts 1240120004 ns/iter (± 21590249) 1170164309 ns/iter (± 14949633) 1.06
es/minify/libraries/jquery 82730473 ns/iter (± 266598) 82586949 ns/iter (± 405363) 1.00
es/minify/libraries/lodash 105214327 ns/iter (± 419612) 105128179 ns/iter (± 211494) 1.00
es/minify/libraries/moment 48489880 ns/iter (± 312850) 48295516 ns/iter (± 70956) 1.00
es/minify/libraries/react 16217688 ns/iter (± 105146) 16199453 ns/iter (± 34603) 1.00
es/minify/libraries/terser 220720334 ns/iter (± 2242913) 216286510 ns/iter (± 798911) 1.02
es/minify/libraries/three 378929763 ns/iter (± 11942029) 368498737 ns/iter (± 5626273) 1.03
es/minify/libraries/typescript 2790346985 ns/iter (± 33552215) 2715281684 ns/iter (± 25664593) 1.03
es/minify/libraries/victory 619834605 ns/iter (± 12233761) 591470493 ns/iter (± 7952854) 1.05
es/minify/libraries/vue 121795427 ns/iter (± 649642) 121398326 ns/iter (± 372699) 1.00
es/visitor/compare/clone 1696722 ns/iter (± 5310) 1713411 ns/iter (± 14268) 0.99
es/visitor/compare/visit_mut_span 2042908 ns/iter (± 10336) 2048905 ns/iter (± 10058) 1.00
es/visitor/compare/visit_mut_span_panic 2042237 ns/iter (± 28066) 2045473 ns/iter (± 41457) 1.00
es/visitor/compare/fold_span 2776874 ns/iter (± 11132) 2772337 ns/iter (± 6743) 1.00
es/visitor/compare/fold_span_panic 2812427 ns/iter (± 20426) 2820538 ns/iter (± 5833) 1.00
es/lexer/colors 10691 ns/iter (± 85) 10206 ns/iter (± 91) 1.05
es/lexer/angular 5534263 ns/iter (± 28585) 5214165 ns/iter (± 34944) 1.06
es/lexer/backbone 655838 ns/iter (± 4645) 629176 ns/iter (± 1605) 1.04
es/lexer/jquery 3915086 ns/iter (± 19192) 3633085 ns/iter (± 12200) 1.08
es/lexer/jquery mobile 5815009 ns/iter (± 16885) 5536835 ns/iter (± 23727) 1.05
es/lexer/mootools 3052463 ns/iter (± 10752) 2849917 ns/iter (± 5374) 1.07
es/lexer/underscore 563484 ns/iter (± 1971) 532613 ns/iter (± 2920) 1.06
es/lexer/three 17109930 ns/iter (± 133284) 16306356 ns/iter (± 38543) 1.05
es/lexer/yui 3015053 ns/iter (± 29154) 3002907 ns/iter (± 3010) 1.00
es/lexer/cal-com 13918241 ns/iter (± 67615) 13633090 ns/iter (± 57692) 1.02
es/lexer/typescript 94039195 ns/iter (± 1370052) 92648171 ns/iter (± 355589) 1.02
es/parser/colors 25309 ns/iter (± 111) 25332 ns/iter (± 113) 1.00
es/parser/angular 12846321 ns/iter (± 74576) 12885464 ns/iter (± 280849) 1.00
es/parser/backbone 1860392 ns/iter (± 11844) 1857796 ns/iter (± 8970) 1.00
es/parser/jquery 10302454 ns/iter (± 65260) 10259686 ns/iter (± 68907) 1.00
es/parser/jquery mobile 15480345 ns/iter (± 99111) 15582878 ns/iter (± 99629) 0.99
es/parser/mootools 8012240 ns/iter (± 28885) 7996509 ns/iter (± 33679) 1.00
es/parser/underscore 1639893 ns/iter (± 8571) 1616671 ns/iter (± 6097) 1.01
es/parser/three 45414497 ns/iter (± 460074) 45039401 ns/iter (± 480377) 1.01
es/parser/yui 7615016 ns/iter (± 42554) 7654266 ns/iter (± 30951) 0.99
es/parser/cal-com 42831274 ns/iter (± 639576) 42289782 ns/iter (± 748184) 1.01
es/parser/typescript 277522985 ns/iter (± 1277989) 274300310 ns/iter (± 7167512) 1.01
es/preset-env/usage/builtin_type 135538 ns/iter (± 33325) 136058 ns/iter (± 33335) 1.00
es/preset-env/usage/property 16039 ns/iter (± 92) 16281 ns/iter (± 88) 0.99
es/resolver/typescript 102309416 ns/iter (± 3037993) 102555464 ns/iter (± 1365729) 1.00
es/fixer/typescript 80536188 ns/iter (± 3452806) 81560688 ns/iter (± 3697622) 0.99
es/hygiene/typescript 180336595 ns/iter (± 3601611) 182196149 ns/iter (± 2158027) 0.99
es/resolver_with_hygiene/typescript 304889774 ns/iter (± 3959176) 323507695 ns/iter (± 2333822) 0.94
es/visitor/base-perf/module_clone 55652 ns/iter (± 522) 55585 ns/iter (± 359) 1.00
es/visitor/base-perf/fold_empty 59116 ns/iter (± 648) 58896 ns/iter (± 559) 1.00
es/visitor/base-perf/fold_noop_impl_all 58932 ns/iter (± 1376) 59084 ns/iter (± 380) 1.00
es/visitor/base-perf/fold_noop_impl_vec 59112 ns/iter (± 829) 59131 ns/iter (± 264) 1.00
es/visitor/base-perf/boxing_boxed_clone 63 ns/iter (± 2) 59 ns/iter (± 0) 1.07
es/visitor/base-perf/boxing_unboxed_clone 47 ns/iter (± 0) 47 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 106 ns/iter (± 0) 104 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed 80 ns/iter (± 0) 80 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 2597 ns/iter (± 12) 2612 ns/iter (± 24) 0.99
es/base/parallel/resolver/typescript 2436017107 ns/iter (± 72836518) 2380471652 ns/iter (± 128751168) 1.02
es/base/parallel/hygiene/typescript 3139457241 ns/iter (± 61243789) 3261009079 ns/iter (± 41248450) 0.96
babelify-only 478735 ns/iter (± 3149) 473918 ns/iter (± 8144) 1.01
parse_and_babelify_angular 45531651 ns/iter (± 1604539) 43476548 ns/iter (± 365649) 1.05
parse_and_babelify_backbone 4568744 ns/iter (± 136873) 4382243 ns/iter (± 92113) 1.04
parse_and_babelify_jquery 30799783 ns/iter (± 807998) 29831873 ns/iter (± 432730) 1.03
parse_and_babelify_jquery_mobile 52077767 ns/iter (± 606159) 51297593 ns/iter (± 1140609) 1.02
parse_and_babelify_mootools 27603262 ns/iter (± 366593) 26654944 ns/iter (± 430449) 1.04
parse_and_babelify_underscore 3758173 ns/iter (± 50246) 3719071 ns/iter (± 317861) 1.01
parse_and_babelify_yui 25805334 ns/iter (± 450343) 23909403 ns/iter (± 407830) 1.08
html/minify/document/css_spec 45443479 ns/iter (± 175720) 45865777 ns/iter (± 84665) 0.99
html/minify/document/github 18191952 ns/iter (± 411843) 18580770 ns/iter (± 70040) 0.98
html/minify/document/stackoverflow 16698712 ns/iter (± 561420) 16763175 ns/iter (± 225949) 1.00
html/minify/document_fragment/css_spec 43941909 ns/iter (± 81582) 44936090 ns/iter (± 103232) 0.98
html/minify/document_fragment/github 17770515 ns/iter (± 19087) 18207564 ns/iter (± 47733) 0.98
html/minify/document_fragment/stackoverflow 16273228 ns/iter (± 12522) 16520892 ns/iter (± 15909) 0.99
html/document/visitor/compare/clone 165338 ns/iter (± 2596) 166009 ns/iter (± 1049) 1.00
html/document/visitor/compare/visit_mut_span 182918 ns/iter (± 631) 181627 ns/iter (± 1085) 1.01
html/document/visitor/compare/visit_mut_span_panic 189903 ns/iter (± 5648) 192007 ns/iter (± 5626) 0.99
html/document/visitor/compare/fold_span 231199 ns/iter (± 656) 227009 ns/iter (± 806) 1.02
html/document/visitor/compare/fold_span_panic 283812 ns/iter (± 1416) 279091 ns/iter (± 1433) 1.02
html/document_fragment/visitor/compare/clone 170277 ns/iter (± 947) 166976 ns/iter (± 942) 1.02
html/document_fragment/visitor/compare/visit_mut_span 185527 ns/iter (± 1369) 181363 ns/iter (± 801) 1.02
html/document_fragment/visitor/compare/visit_mut_span_panic 190603 ns/iter (± 1847) 184907 ns/iter (± 590) 1.03
html/document_fragment/visitor/compare/fold_span 229256 ns/iter (± 950) 226840 ns/iter (± 1262) 1.01
html/document_fragment/visitor/compare/fold_span_panic 284213 ns/iter (± 723) 277386 ns/iter (± 740) 1.02
html/lexer/css_2021_spec 13011994 ns/iter (± 33124) 13192877 ns/iter (± 26308) 0.99
html/lexer/github_com_17_05_2022 4981924 ns/iter (± 11618) 5070885 ns/iter (± 6753) 0.98
html/lexer/stackoverflow_com_17_05_2022 4737239 ns/iter (± 6519) 4804463 ns/iter (± 101773) 0.99
html/parser/parser_document/css_2021_spec 25436241 ns/iter (± 58674) 25360492 ns/iter (± 50573) 1.00
html/parser/parser_document/github_com_17_05_2022 8486533 ns/iter (± 40552) 8571934 ns/iter (± 25019) 0.99
html/parser/parser_document/stackoverflow_com_17_05_2022 7351350 ns/iter (± 9532) 7542405 ns/iter (± 7971) 0.97
html/parser/parser_document_fragment/css_2021_spec 25043667 ns/iter (± 116284) 25284252 ns/iter (± 80956) 0.99
html/parser/parser_document_fragment/github_com_17_05_2022 8443954 ns/iter (± 13464) 8523139 ns/iter (± 30603) 0.99
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7294208 ns/iter (± 5476) 7508153 ns/iter (± 11702) 0.97

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

Please sign in to comment.