File tree 10 files changed +193
-11
lines changed
swc/tests/fixture/issues-8xxx/8737
tests/fixture/issues/8737
10 files changed +193
-11
lines changed Original file line number Diff line number Diff line change
1
+ {
2
+ "jsc" : {
3
+ "parser" : {
4
+ "syntax" : " ecmascript" ,
5
+ "jsx" : false
6
+ },
7
+ "target" : " es5" ,
8
+ "loose" : false ,
9
+ "minify" : {
10
+ "compress" : {
11
+ "arguments" : false ,
12
+ "arrows" : true ,
13
+ "booleans" : true ,
14
+ "booleans_as_integers" : false ,
15
+ "collapse_vars" : true ,
16
+ "comparisons" : true ,
17
+ "computed_props" : true ,
18
+ "conditionals" : true ,
19
+ "dead_code" : true ,
20
+ "directives" : true ,
21
+ "drop_console" : false ,
22
+ "drop_debugger" : true ,
23
+ "evaluate" : true ,
24
+ "expression" : false ,
25
+ "hoist_funs" : false ,
26
+ "hoist_props" : true ,
27
+ "hoist_vars" : false ,
28
+ "if_return" : true ,
29
+ "join_vars" : true ,
30
+ "keep_classnames" : false ,
31
+ "keep_fargs" : true ,
32
+ "keep_fnames" : false ,
33
+ "keep_infinity" : false ,
34
+ "loops" : true ,
35
+ "negate_iife" : true ,
36
+ "properties" : true ,
37
+ "reduce_funcs" : false ,
38
+ "reduce_vars" : false ,
39
+ "side_effects" : true ,
40
+ "switches" : true ,
41
+ "typeofs" : true ,
42
+ "unsafe" : false ,
43
+ "unsafe_arrows" : false ,
44
+ "unsafe_comps" : false ,
45
+ "unsafe_Function" : false ,
46
+ "unsafe_math" : false ,
47
+ "unsafe_symbols" : false ,
48
+ "unsafe_methods" : false ,
49
+ "unsafe_proto" : false ,
50
+ "unsafe_regexp" : false ,
51
+ "unsafe_undefined" : false ,
52
+ "unused" : true ,
53
+ "const_to_let" : true ,
54
+ "pristine_globals" : true
55
+ },
56
+ "mangle" : false
57
+ }
58
+ },
59
+ "module" : {
60
+ "type" : " es6"
61
+ },
62
+ "isModule" : true
63
+ }
Original file line number Diff line number Diff line change
1
+ d ( ( ) => {
2
+ var obj = {
3
+ key : "some string" ,
4
+ } ;
5
+
6
+ var b = ( ) => {
7
+ switch ( a ) {
8
+ default :
9
+ break ;
10
+ }
11
+ return obj . key ;
12
+ } ;
13
+ return ( ) => b ;
14
+ } ) ;
Original file line number Diff line number Diff line change
1
+ d ( function ( ) {
2
+ var b = function ( ) {
3
+ return a , "some string" ;
4
+ } ;
5
+ return function ( ) {
6
+ return b ;
7
+ } ;
8
+ } ) ;
Original file line number Diff line number Diff line change @@ -269,6 +269,7 @@ impl Vars {
269
269
|| !self . lits . is_empty ( )
270
270
|| !self . lits_for_cmp . is_empty ( )
271
271
|| !self . lits_for_array_access . is_empty ( )
272
+ || !self . hoisted_props . is_empty ( )
272
273
|| !self . removed . is_empty ( )
273
274
{
274
275
let mut v = Finalizer {
Original file line number Diff line number Diff line change @@ -405,24 +405,35 @@ impl VisitMut for Finalizer<'_> {
405
405
}
406
406
407
407
fn visit_mut_expr ( & mut self , n : & mut Expr ) {
408
- if let Expr :: Ident ( i) = n {
409
- if let Some ( expr) = self . lits . get ( & i. to_id ( ) ) {
410
- * n = * expr. clone ( ) ;
408
+ match n {
409
+ Expr :: Ident ( i) => {
410
+ if let Some ( expr) = self . lits . get ( & i. to_id ( ) ) {
411
+ * n = * expr. clone ( ) ;
412
+ return ;
413
+ }
411
414
}
412
- } else {
413
- n. visit_mut_children_with ( self ) ;
414
- }
415
-
416
- if let Expr :: Member ( e) = n {
417
- if let Expr :: Ident ( obj) = & * e. obj {
418
- if let MemberProp :: Ident ( prop) = & e. prop {
419
- if let Some ( ident) = self . hoisted_props . get ( & ( obj. to_id ( ) , prop. sym . clone ( ) ) ) {
415
+ Expr :: Member ( e) => {
416
+ if let Expr :: Ident ( obj) = & * e. obj {
417
+ let sym = match & e. prop {
418
+ MemberProp :: Ident ( i) => & i. sym ,
419
+ MemberProp :: Computed ( e) => match & * e. expr {
420
+ Expr :: Lit ( Lit :: Str ( s) ) => & s. value ,
421
+ _ => return ,
422
+ } ,
423
+ _ => return ,
424
+ } ;
425
+
426
+ if let Some ( ident) = self . hoisted_props . get ( & ( obj. to_id ( ) , sym. clone ( ) ) ) {
420
427
self . changed = true ;
421
428
* n = ident. clone ( ) . into ( ) ;
429
+ return ;
422
430
}
423
431
}
424
432
}
433
+ _ => { }
425
434
}
435
+
436
+ n. visit_mut_children_with ( self ) ;
426
437
}
427
438
428
439
fn visit_mut_stmts ( & mut self , n : & mut Vec < Stmt > ) {
Original file line number Diff line number Diff line change
1
+ d ( function ( ) {
2
+ var obj = {
3
+ key : "some string"
4
+ } , b = function ( ) {
5
+ return a , obj . key ;
6
+ } ;
7
+ return function ( ) {
8
+ return b ;
9
+ } ;
10
+ } ) ;
Original file line number Diff line number Diff line change
1
+ d ( function ( ) {
2
+ var b = function ( ) {
3
+ return a , "some string" ;
4
+ } ;
5
+ return function ( ) {
6
+ return b ;
7
+ } ;
8
+ } ) ;
Original file line number Diff line number Diff line change
1
+ {
2
+ "defaults" : true ,
3
+ "arguments" : false ,
4
+ "arrows" : true ,
5
+ "booleans" : true ,
6
+ "booleans_as_integers" : false ,
7
+ "collapse_vars" : true ,
8
+ "comparisons" : true ,
9
+ "computed_props" : true ,
10
+ "conditionals" : true ,
11
+ "dead_code" : true ,
12
+ "directives" : true ,
13
+ "drop_console" : false ,
14
+ "drop_debugger" : true ,
15
+ "evaluate" : true ,
16
+ "expression" : false ,
17
+ "hoist_funs" : false ,
18
+ "hoist_props" : true ,
19
+ "hoist_vars" : false ,
20
+ "if_return" : true ,
21
+ "join_vars" : true ,
22
+ "keep_classnames" : false ,
23
+ "keep_fargs" : true ,
24
+ "keep_fnames" : false ,
25
+ "keep_infinity" : false ,
26
+ "loops" : true ,
27
+ "negate_iife" : true ,
28
+ "properties" : true ,
29
+ "reduce_funcs" : false ,
30
+ "reduce_vars" : false ,
31
+ "side_effects" : true ,
32
+ "switches" : true ,
33
+ "typeofs" : true ,
34
+ "unsafe" : false ,
35
+ "unsafe_arrows" : false ,
36
+ "unsafe_comps" : false ,
37
+ "unsafe_Function" : false ,
38
+ "unsafe_math" : false ,
39
+ "unsafe_symbols" : false ,
40
+ "unsafe_methods" : false ,
41
+ "unsafe_proto" : false ,
42
+ "unsafe_regexp" : false ,
43
+ "unsafe_undefined" : false ,
44
+ "unused" : true ,
45
+ "const_to_let" : true ,
46
+ "pristine_globals" : true
47
+ }
Original file line number Diff line number Diff line change
1
+ d ( ( ) => {
2
+ var obj = {
3
+ key : "some string" ,
4
+ } ;
5
+
6
+ var b = ( ) => {
7
+ switch ( a ) {
8
+ default :
9
+ break ;
10
+ }
11
+ return obj . key ;
12
+ } ;
13
+ return ( ) => b ;
14
+ } ) ;
Original file line number Diff line number Diff line change
1
+ d ( ( ) => {
2
+ var obj = {
3
+ key : "some string"
4
+ } , b = ( ) => ( a , obj . key ) ;
5
+ return ( ) => b ;
6
+ } ) ;
You can’t perform that action at this time.
0 commit comments