|
1 | 1 | use oxc_allocator::Vec; |
2 | 2 | use oxc_ast::ast::*; |
3 | | -use oxc_traverse::{traverse_mut_with_ctx, ReusableTraverseCtx, Traverse, TraverseCtx}; |
4 | | - |
5 | | -use crate::CompressorPass; |
6 | | - |
7 | | -/// Collapse variable declarations. |
8 | | -/// |
9 | | -/// Join Vars: |
10 | | -/// `var a; var b = 1; var c = 2` => `var a, b = 1; c = 2` |
11 | | -/// <https://github.com/google/closure-compiler/blob/v20240609/src/com/google/javascript/jscomp/CollapseVariableDeclarations.java> |
12 | | -/// |
13 | | -/// Collapse into for statements: |
14 | | -/// `var a = 0; for(;a<0;a++) {}` => `for(var a = 0;a<0;a++) {}` |
15 | | -/// <https://github.com/google/closure-compiler/blob/v20240609/src/com/google/javascript/jscomp/Denormalize.java> |
16 | | -pub struct CollapseVariableDeclarations { |
17 | | - pub(crate) changed: bool, |
18 | | -} |
19 | | - |
20 | | -impl<'a> CompressorPass<'a> for CollapseVariableDeclarations { |
21 | | - fn build(&mut self, program: &mut Program<'a>, ctx: &mut ReusableTraverseCtx<'a>) { |
22 | | - self.changed = false; |
23 | | - traverse_mut_with_ctx(self, program, ctx); |
24 | | - } |
25 | | -} |
26 | | - |
27 | | -impl<'a> Traverse<'a> for CollapseVariableDeclarations { |
28 | | - fn exit_statements(&mut self, stmts: &mut Vec<'a, Statement<'a>>, ctx: &mut TraverseCtx<'a>) { |
| 3 | +use oxc_traverse::TraverseCtx; |
| 4 | + |
| 5 | +use super::PeepholeOptimizations; |
| 6 | + |
| 7 | +impl<'a> PeepholeOptimizations { |
| 8 | + /// Collapse variable declarations. |
| 9 | + /// |
| 10 | + /// Join Vars: |
| 11 | + /// `var a; var b = 1; var c = 2` => `var a, b = 1; c = 2` |
| 12 | + /// <https://github.com/google/closure-compiler/blob/v20240609/src/com/google/javascript/jscomp/CollapseVariableDeclarations.java> |
| 13 | + /// |
| 14 | + /// Collapse into for statements: |
| 15 | + /// `var a = 0; for(;a<0;a++) {}` => `for(var a = 0;a<0;a++) {}` |
| 16 | + /// <https://github.com/google/closure-compiler/blob/v20240609/src/com/google/javascript/jscomp/Denormalize.java> |
| 17 | + pub fn collapse_variable_declarations( |
| 18 | + &mut self, |
| 19 | + stmts: &mut Vec<'a, Statement<'a>>, |
| 20 | + ctx: &mut TraverseCtx<'a>, |
| 21 | + ) { |
29 | 22 | self.join_vars(stmts, ctx); |
30 | 23 | self.maybe_collapse_into_for_statements(stmts, ctx); |
31 | 24 | } |
32 | | -} |
33 | | - |
34 | | -// Join Vars |
35 | | -impl<'a> CollapseVariableDeclarations { |
36 | | - pub fn new() -> Self { |
37 | | - Self { changed: false } |
38 | | - } |
39 | 25 |
|
40 | 26 | fn is_require_call(var_decl: &VariableDeclaration) -> bool { |
41 | 27 | var_decl |
@@ -112,7 +98,7 @@ impl<'a> CollapseVariableDeclarations { |
112 | 98 | } |
113 | 99 |
|
114 | 100 | // Collapse into for statements |
115 | | -impl<'a> CollapseVariableDeclarations { |
| 101 | +impl<'a> PeepholeOptimizations { |
116 | 102 | fn maybe_collapse_into_for_statements( |
117 | 103 | &mut self, |
118 | 104 | stmts: &mut Vec<'a, Statement<'a>>, |
@@ -240,18 +226,6 @@ mod test { |
240 | 226 | mod join_vars { |
241 | 227 | use super::{test, test_same}; |
242 | 228 |
|
243 | | - #[test] |
244 | | - fn cjs() { |
245 | | - // Do not join `require` calls for cjs-module-lexer. |
246 | | - test_same( |
247 | | - " Object.defineProperty(exports, '__esModule', { value: true }); |
248 | | - var compilerDom = require('@vue/compiler-dom'); |
249 | | - var runtimeDom = require('@vue/runtime-dom'); |
250 | | - var shared = require('@vue/shared'); |
251 | | - ", |
252 | | - ); |
253 | | - } |
254 | | - |
255 | 229 | #[test] |
256 | 230 | fn test_collapsing() { |
257 | 231 | // Basic collapsing |
|
0 commit comments