@@ -31,6 +31,7 @@ mod es2020;
3131mod es2021;
3232mod es2022;
3333mod jsx;
34+ mod proposals;
3435mod regexp;
3536mod typescript;
3637
@@ -49,6 +50,7 @@ use es2020::ES2020;
4950use es2021:: ES2021 ;
5051use es2022:: ES2022 ;
5152use jsx:: Jsx ;
53+ use proposals:: explicit_resource_management:: ExplicitResourceManagement ;
5254use regexp:: RegExp ;
5355use rustc_hash:: FxHashMap ;
5456use typescript:: TypeScript ;
@@ -122,6 +124,7 @@ impl<'a> Transformer<'a> {
122124 let mut transformer = TransformerImpl {
123125 common : Common :: new ( & self . env , & self . ctx ) ,
124126 decorator : Decorator :: new ( self . decorator , & self . ctx ) ,
127+ explicit_resource_management : ExplicitResourceManagement :: new ( & self . ctx ) ,
125128 x0_typescript : program
126129 . source_type
127130 . is_typescript ( )
@@ -149,6 +152,7 @@ struct TransformerImpl<'a, 'ctx> {
149152 // NOTE: all callbacks must run in order.
150153 x0_typescript : Option < TypeScript < ' a , ' ctx > > ,
151154 decorator : Decorator < ' a , ' ctx > ,
155+ explicit_resource_management : ExplicitResourceManagement < ' a , ' ctx > ,
152156 x1_jsx : Jsx < ' a , ' ctx > ,
153157 x2_es2022 : ES2022 < ' a , ' ctx > ,
154158 x2_es2021 : ES2021 < ' a , ' ctx > ,
@@ -169,6 +173,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
169173 typescript. enter_program ( program, ctx) ;
170174 }
171175 self . x1_jsx . enter_program ( program, ctx) ;
176+ self . explicit_resource_management . enter_program ( program, ctx) ;
172177 }
173178
174179 fn exit_program ( & mut self , program : & mut Program < ' a > , ctx : & mut TraverseCtx < ' a > ) {
@@ -211,6 +216,10 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
211216 }
212217 }
213218
219+ fn enter_block_statement ( & mut self , node : & mut BlockStatement < ' a > , ctx : & mut TraverseCtx < ' a > ) {
220+ self . explicit_resource_management . enter_block_statement ( node, ctx) ;
221+ }
222+
214223 fn enter_big_int_literal ( & mut self , node : & mut BigIntLiteral < ' a > , ctx : & mut TraverseCtx < ' a > ) {
215224 self . x2_es2020 . enter_big_int_literal ( node, ctx) ;
216225 }
@@ -271,6 +280,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
271280 fn enter_static_block ( & mut self , block : & mut StaticBlock < ' a > , ctx : & mut TraverseCtx < ' a > ) {
272281 self . common . enter_static_block ( block, ctx) ;
273282 self . x2_es2022 . enter_static_block ( block, ctx) ;
283+ self . explicit_resource_management . enter_static_block ( block, ctx) ;
274284 }
275285
276286 fn exit_static_block ( & mut self , block : & mut StaticBlock < ' a > , ctx : & mut TraverseCtx < ' a > ) {
@@ -374,6 +384,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
374384
375385 fn enter_function_body ( & mut self , body : & mut FunctionBody < ' a > , ctx : & mut TraverseCtx < ' a > ) {
376386 self . common . enter_function_body ( body, ctx) ;
387+ self . explicit_resource_management . enter_function_body ( body, ctx) ;
377388 }
378389
379390 fn exit_function_body ( & mut self , body : & mut FunctionBody < ' a > , ctx : & mut TraverseCtx < ' a > ) {
@@ -482,6 +493,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
482493 if let Some ( typescript) = self . x0_typescript . as_mut ( ) {
483494 typescript. enter_statements ( stmts, ctx) ;
484495 }
496+ self . explicit_resource_management . enter_statements ( stmts, ctx) ;
485497 }
486498
487499 fn exit_arrow_function_expression (
@@ -538,6 +550,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
538550 typescript. exit_statement ( stmt, ctx) ;
539551 }
540552 self . decorator . enter_statement ( stmt, ctx) ;
553+ self . explicit_resource_management . enter_statement ( stmt, ctx) ;
541554 self . x2_es2018 . exit_statement ( stmt, ctx) ;
542555 self . x2_es2017 . exit_statement ( stmt, ctx) ;
543556 }
@@ -557,6 +570,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
557570 typescript. enter_statement ( stmt, ctx) ;
558571 }
559572 self . x2_es2018 . enter_statement ( stmt, ctx) ;
573+ self . explicit_resource_management . enter_statement ( stmt, ctx) ;
560574 }
561575
562576 fn enter_declaration ( & mut self , decl : & mut Declaration < ' a > , ctx : & mut TraverseCtx < ' a > ) {
@@ -597,6 +611,7 @@ impl<'a> Traverse<'a> for TransformerImpl<'a, '_> {
597611 if let Some ( typescript) = self . x0_typescript . as_mut ( ) {
598612 typescript. enter_for_of_statement ( stmt, ctx) ;
599613 }
614+ self . explicit_resource_management . enter_for_of_statement ( stmt, ctx) ;
600615 self . x2_es2018 . enter_for_of_statement ( stmt, ctx) ;
601616 }
602617
0 commit comments