@@ -164,35 +164,38 @@ impl Optimizer<'_> {
164164 "NaN" => {
165165 report_change ! ( "evaluate: `Number.NaN` -> `NaN`" ) ;
166166 self . changed = true ;
167- * e = Ident :: new (
167+ let mut ident = Ident :: new (
168168 atom ! ( "NaN" ) ,
169169 * span,
170170 SyntaxContext :: empty ( ) . apply_mark ( self . marks . unresolved_mark ) ,
171- )
172- . into ( ) ;
171+ ) ;
172+ self . r . add_unresolved ( & mut ident) ;
173+ * e = ident. into ( ) ;
173174 }
174175 "POSITIVE_INFINITY" => {
175176 report_change ! ( "evaluate: `Number.POSITIVE_INFINITY` -> `Infinity`" ) ;
176177 self . changed = true ;
177- * e = Ident :: new (
178+ let mut ident = Ident :: new (
178179 atom ! ( "Infinity" ) ,
179180 * span,
180181 SyntaxContext :: empty ( ) . apply_mark ( self . marks . unresolved_mark ) ,
181- )
182- . into ( ) ;
182+ ) ;
183+ self . r . add_unresolved ( & mut ident) ;
184+ * e = ident. into ( ) ;
183185 }
184186 "NEGATIVE_INFINITY" => {
185187 report_change ! ( "evaluate: `Number.NEGATIVE_INFINITY` -> `-Infinity`" ) ;
186188 self . changed = true ;
189+ let mut ident = Ident :: new (
190+ atom ! ( "Infinity" ) ,
191+ * span,
192+ SyntaxContext :: empty ( ) . apply_mark ( self . marks . unresolved_mark ) ,
193+ ) ;
194+ self . r . add_unresolved ( & mut ident) ;
187195 * e = UnaryExpr {
188196 span : * span,
189197 op : op ! ( unary, "-" ) ,
190- arg : Ident :: new (
191- atom ! ( "Infinity" ) ,
192- * span,
193- SyntaxContext :: empty ( ) . apply_mark ( self . marks . unresolved_mark ) ,
194- )
195- . into ( ) ,
198+ arg : ident. into ( ) ,
196199 }
197200 . into ( ) ;
198201 }
@@ -420,12 +423,13 @@ impl Optimizer<'_> {
420423 report_change ! ( "evaluate: Evaluated an expression as `{}`" , value) ;
421424
422425 if value. is_nan ( ) {
423- * e = Ident :: new (
426+ let mut ident = Ident :: new (
424427 atom ! ( "NaN" ) ,
425428 e. span ( ) ,
426429 SyntaxContext :: empty ( ) . apply_mark ( self . marks . unresolved_mark ) ,
427- )
428- . into ( ) ;
430+ ) ;
431+ self . r . add_unresolved ( & mut ident) ;
432+ * e = ident. into ( ) ;
429433 return ;
430434 }
431435
@@ -450,12 +454,13 @@ impl Optimizer<'_> {
450454 report_change ! ( "evaluate: Evaluated `{:?} ** {:?}`" , l, r) ;
451455
452456 if l. is_nan ( ) || r. is_nan ( ) {
453- * e = Ident :: new (
457+ let mut ident = Ident :: new (
454458 atom ! ( "NaN" ) ,
455459 bin. span ,
456460 SyntaxContext :: empty ( ) . apply_mark ( self . marks . unresolved_mark ) ,
457- )
458- . into ( ) ;
461+ ) ;
462+ self . r . add_unresolved ( & mut ident) ;
463+ * e = ident. into ( ) ;
459464 } else {
460465 * e = Lit :: Num ( Number {
461466 span : bin. span ,
@@ -488,13 +493,15 @@ impl Optimizer<'_> {
488493 report_change ! ( "evaluate: `{} / 0` => `Infinity`" , ln) ;
489494
490495 // Sign does not matter for NaN
496+ let mut ident = Ident :: new_no_ctxt ( atom ! ( "Infinity" ) , bin. span ) ;
497+ self . r . add_unresolved ( & mut ident) ;
491498 * e = if ln. is_sign_positive ( ) == rn. is_sign_positive ( ) {
492- Ident :: new_no_ctxt ( atom ! ( "Infinity" ) , bin . span ) . into ( )
499+ ident . into ( )
493500 } else {
494501 UnaryExpr {
495502 span : bin. span ,
496503 op : op ! ( unary, "-" ) ,
497- arg : Ident :: new_no_ctxt ( atom ! ( "Infinity" ) , bin . span ) . into ( ) ,
504+ arg : ident . into ( ) ,
498505 }
499506 . into ( )
500507 } ;
0 commit comments