@@ -82,12 +82,13 @@ impl<'a> TypeScriptEnum<'a> {
8282 func_scope_id,
8383 AstNodeId :: DUMMY ,
8484 ) ;
85+ ctx. scopes_mut ( ) . add_binding ( func_scope_id, enum_name. to_compact_str ( ) , param_symbol_id) ;
8586 let ident = BindingIdentifier {
8687 span : decl. id . span ,
8788 name : decl. id . name . clone ( ) ,
8889 symbol_id : Cell :: new ( Some ( param_symbol_id) ) ,
8990 } ;
90- let kind = ast. binding_pattern_kind_from_binding_identifier ( ident) ;
91+ let kind = ast. binding_pattern_kind_from_binding_identifier ( ident. clone ( ) ) ;
9192 let id = ast. binding_pattern ( kind, Option :: < TSTypeAnnotation > :: None , false ) ;
9293
9394 // ((Foo) => {
@@ -102,7 +103,8 @@ impl<'a> TypeScriptEnum<'a> {
102103
103104 // Foo[Foo["X"] = 0] = "X";
104105 let is_already_declared = self . enums . contains_key ( & enum_name) ;
105- let statements = self . transform_ts_enum_members ( & decl. members , enum_name. clone ( ) , ctx) ;
106+
107+ let statements = self . transform_ts_enum_members ( & decl. members , & ident, ctx) ;
106108 let body = ast. alloc_function_body ( decl. span , ast. vec ( ) , statements) ;
107109 let callee = Expression :: FunctionExpression ( ctx. alloc ( Function {
108110 r#type : FunctionType :: FunctionExpression ,
@@ -187,19 +189,29 @@ impl<'a> TypeScriptEnum<'a> {
187189 Some ( stmt)
188190 }
189191
192+ #[ allow( clippy:: needless_pass_by_value) ]
190193 fn transform_ts_enum_members (
191194 & mut self ,
192195 members : & Vec < ' a , TSEnumMember < ' a > > ,
193- enum_name : Atom < ' a > ,
194- ctx : & TraverseCtx < ' a > ,
196+ param : & BindingIdentifier < ' a > ,
197+ ctx : & mut TraverseCtx < ' a > ,
195198 ) -> Vec < ' a , Statement < ' a > > {
196- // TODO: Set `span` and `references_id` on all `IdentifierReference`s created here
199+ let create_identifier_reference = |ctx : & mut TraverseCtx < ' a > | {
200+ let ident = ctx. create_reference_id (
201+ param. span ,
202+ param. name . clone ( ) ,
203+ param. symbol_id . get ( ) ,
204+ ReferenceFlag :: Read ,
205+ ) ;
206+ ctx. ast . expression_from_identifier_reference ( ident)
207+ } ;
197208
198209 let ast = ctx. ast ;
199210
200211 let mut statements = ast. vec ( ) ;
201212 let mut prev_constant_value = Some ( ConstantValue :: Number ( -1.0 ) ) ;
202- let mut previous_enum_members = self . enums . entry ( enum_name. clone ( ) ) . or_default ( ) . clone ( ) ;
213+ let mut previous_enum_members = self . enums . entry ( param. name . clone ( ) ) . or_default ( ) . clone ( ) ;
214+
203215 let mut prev_member_name: Option < Atom < ' a > > = None ;
204216
205217 for member in members {
@@ -238,7 +250,7 @@ impl<'a> TypeScriptEnum<'a> {
238250 ) ;
239251 if !has_binding {
240252 IdentifierReferenceRename :: new (
241- enum_name . clone ( ) ,
253+ param . name . clone ( ) ,
242254 previous_enum_members. clone ( ) ,
243255 ctx,
244256 )
@@ -276,7 +288,7 @@ impl<'a> TypeScriptEnum<'a> {
276288 }
277289 } else if let Some ( prev_member_name) = prev_member_name {
278290 let self_ref = {
279- let obj = ast . expression_identifier_reference ( SPAN , & enum_name ) ;
291+ let obj = create_identifier_reference ( ctx ) ;
280292 let expr = ctx. ast . expression_string_literal ( SPAN , prev_member_name) ;
281293 ast. member_expression_computed ( SPAN , obj, expr, false ) . into ( )
282294 } ;
@@ -292,7 +304,7 @@ impl<'a> TypeScriptEnum<'a> {
292304
293305 // Foo["x"] = init
294306 let member_expr = {
295- let obj = ast . expression_identifier_reference ( SPAN , & enum_name ) ;
307+ let obj = create_identifier_reference ( ctx ) ;
296308 let expr = ast. expression_string_literal ( SPAN , member_name) ;
297309
298310 ast. member_expression_computed ( SPAN , obj, expr, false )
@@ -304,7 +316,7 @@ impl<'a> TypeScriptEnum<'a> {
304316 // Foo[Foo["x"] = init] = "x"
305317 if !is_str {
306318 let member_expr = {
307- let obj = ast . expression_identifier_reference ( SPAN , & enum_name ) ;
319+ let obj = create_identifier_reference ( ctx ) ;
308320 ast. member_expression_computed ( SPAN , obj, expr, false )
309321 } ;
310322 let left = ast. simple_assignment_target_member_expression ( member_expr) ;
@@ -317,9 +329,9 @@ impl<'a> TypeScriptEnum<'a> {
317329 statements. push ( ast. statement_expression ( member. span , expr) ) ;
318330 }
319331
320- self . enums . insert ( enum_name . clone ( ) , previous_enum_members. clone ( ) ) ;
332+ self . enums . insert ( param . name . clone ( ) , previous_enum_members. clone ( ) ) ;
321333
322- let enum_ref = ast . expression_identifier_reference ( SPAN , enum_name ) ;
334+ let enum_ref = create_identifier_reference ( ctx ) ;
323335 // return Foo;
324336 let return_stmt = ast. statement_return ( SPAN , Some ( enum_ref) ) ;
325337 statements. push ( return_stmt) ;
0 commit comments