@@ -6,7 +6,7 @@ use swc_ecma_ast::*;
6
6
use swc_ecma_transforms_base:: { helper, helper_expr, perf:: Check } ;
7
7
use swc_ecma_transforms_macros:: fast_path;
8
8
use swc_ecma_utils:: {
9
- contains_this_expr , find_pat_ids,
9
+ find_pat_ids,
10
10
function:: { init_this, FnEnvHoister , FnWrapperResult , FunctionWrapper } ,
11
11
prepend_stmt, private_ident, quote_ident, ExprFactory , Remapper , StmtLike ,
12
12
} ;
@@ -339,54 +339,52 @@ impl VisitMut for Actual {
339
339
return ;
340
340
}
341
341
342
- let is_this_used = contains_this_expr ( & prop. function . body ) ;
343
-
344
- let original_fn_params = prop. function . params . take ( ) ;
345
-
346
- let prop_method_span = prop. function . span ;
347
- let prop_method_body_span = if let Some ( body) = & prop. function . body {
348
- body. span
349
- } else {
350
- DUMMY_SP
342
+ let Function {
343
+ span,
344
+ params,
345
+ body : Some ( body) ,
346
+ ..
347
+ } = & mut * prop. function
348
+ else {
349
+ return ;
351
350
} ;
352
- prop. function . span = prop_method_body_span;
353
351
354
- let fn_ref = make_fn_ref (
355
- Function {
356
- params : Vec :: new ( ) ,
357
- ..* prop. function . take ( )
358
- }
359
- . into ( ) ,
360
- ) ;
352
+ let span = * span;
353
+ let params = params. take ( ) ;
354
+ let mut visitor = FnEnvHoister :: new ( self . unresolved_ctxt ) ;
355
+ body. visit_mut_with ( & mut visitor) ;
361
356
362
- let fn_ref = if is_this_used {
363
- fn_ref. apply ( DUMMY_SP , ThisExpr { span : DUMMY_SP } . into ( ) , Vec :: new ( ) )
364
- } else {
365
- CallExpr {
366
- span : DUMMY_SP ,
367
- callee : fn_ref. as_callee ( ) ,
368
- args : Vec :: new ( ) ,
369
- ..Default :: default ( )
370
- }
371
- . into ( )
372
- } ;
357
+ let expr = make_fn_ref ( FnExpr {
358
+ ident : None ,
359
+ function : prop. function . take ( ) ,
360
+ } ) ;
373
361
374
362
prop. function = Function {
375
- params : original_fn_params,
376
- span : prop_method_span,
377
- is_async : false ,
378
- is_generator : false ,
363
+ span,
364
+ params,
379
365
body : Some ( BlockStmt {
380
- span : DUMMY_SP ,
381
- stmts : vec ! [ Stmt :: Return ( ReturnStmt {
382
- span: DUMMY_SP ,
383
- arg: Some ( Box :: new( fn_ref) ) ,
384
- } ) ] ,
366
+ stmts : visitor
367
+ . to_stmt ( )
368
+ . into_iter ( )
369
+ . chain ( iter:: once (
370
+ ReturnStmt {
371
+ span : DUMMY_SP ,
372
+ arg : Some (
373
+ CallExpr {
374
+ callee : expr. as_callee ( ) ,
375
+ ..Default :: default ( )
376
+ }
377
+ . into ( ) ,
378
+ ) ,
379
+ }
380
+ . into ( ) ,
381
+ ) )
382
+ . collect ( ) ,
385
383
..Default :: default ( )
386
384
} ) ,
387
385
..Default :: default ( )
388
386
}
389
- . into ( )
387
+ . into ( ) ;
390
388
}
391
389
392
390
fn visit_mut_stmts ( & mut self , _n : & mut Vec < Stmt > ) { }
0 commit comments