@@ -32,7 +32,7 @@ pub trait ConstantEvaluation<'a>: MayHaveSideEffects {
32
32
// and there are only a very few cases where we can compute a number value, but there could
33
33
// also be side effects. e.g. `void doSomething()` has value NaN, regardless of the behavior
34
34
// of `doSomething()`
35
- if value. is_some ( ) && self . expression_may_have_side_efffects ( expr) {
35
+ if value. is_some ( ) && self . expression_may_have_side_effects ( expr) {
36
36
None
37
37
} else {
38
38
value
@@ -41,23 +41,23 @@ pub trait ConstantEvaluation<'a>: MayHaveSideEffects {
41
41
42
42
fn get_side_free_string_value ( & self , expr : & Expression < ' a > ) -> Option < Cow < ' a , str > > {
43
43
let value = expr. to_js_string ( ) ;
44
- if value. is_some ( ) && !self . expression_may_have_side_efffects ( expr) {
44
+ if value. is_some ( ) && !self . expression_may_have_side_effects ( expr) {
45
45
return value;
46
46
}
47
47
None
48
48
}
49
49
50
50
fn get_side_free_boolean_value ( & self , expr : & Expression < ' a > ) -> Option < bool > {
51
51
let value = self . get_boolean_value ( expr) ;
52
- if value. is_some ( ) && !self . expression_may_have_side_efffects ( expr) {
52
+ if value. is_some ( ) && !self . expression_may_have_side_effects ( expr) {
53
53
return value;
54
54
}
55
55
None
56
56
}
57
57
58
58
fn get_side_free_bigint_value ( & self , expr : & Expression < ' a > ) -> Option < BigInt > {
59
59
let value = expr. to_big_int ( ) ;
60
- if value. is_some ( ) && self . expression_may_have_side_efffects ( expr) {
60
+ if value. is_some ( ) && self . expression_may_have_side_effects ( expr) {
61
61
None
62
62
} else {
63
63
value
@@ -201,8 +201,8 @@ pub trait ConstantEvaluation<'a>: MayHaveSideEffects {
201
201
) -> Option < ConstantValue < ' a > > {
202
202
match operator {
203
203
BinaryOperator :: Addition => {
204
- if self . expression_may_have_side_efffects ( left)
205
- || self . expression_may_have_side_efffects ( right)
204
+ if self . expression_may_have_side_effects ( left)
205
+ || self . expression_may_have_side_effects ( right)
206
206
{
207
207
return None ;
208
208
}
@@ -319,7 +319,7 @@ pub trait ConstantEvaluation<'a>: MayHaveSideEffects {
319
319
None
320
320
}
321
321
BinaryOperator :: Instanceof => {
322
- if self . expression_may_have_side_efffects ( left) {
322
+ if self . expression_may_have_side_effects ( left) {
323
323
return None ;
324
324
}
325
325
if let Expression :: Identifier ( right_ident) = right {
@@ -379,34 +379,36 @@ pub trait ConstantEvaluation<'a>: MayHaveSideEffects {
379
379
Some ( ConstantValue :: String ( Cow :: Borrowed ( s) ) )
380
380
}
381
381
UnaryOperator :: Void => ( expr. argument . is_literal ( )
382
- || !self . expression_may_have_side_efffects ( & expr. argument ) )
382
+ || !self . expression_may_have_side_effects ( & expr. argument ) )
383
383
. then_some ( ConstantValue :: Undefined ) ,
384
384
UnaryOperator :: LogicalNot => self
385
385
. get_side_free_boolean_value ( & expr. argument )
386
386
. map ( |b| !b)
387
387
. map ( ConstantValue :: Boolean ) ,
388
388
UnaryOperator :: UnaryPlus => {
389
- self . eval_to_number ( & expr. argument ) . map ( ConstantValue :: Number )
389
+ self . get_side_free_number_value ( & expr. argument ) . map ( ConstantValue :: Number )
390
390
}
391
391
UnaryOperator :: UnaryNegation => match ValueType :: from ( & expr. argument ) {
392
- ValueType :: BigInt => {
393
- self . eval_to_big_int ( & expr. argument ) . map ( |v| -v) . map ( ConstantValue :: BigInt )
394
- }
392
+ ValueType :: BigInt => self
393
+ . get_side_free_bigint_value ( & expr. argument )
394
+ . map ( |v| -v)
395
+ . map ( ConstantValue :: BigInt ) ,
395
396
ValueType :: Number => self
396
- . eval_to_number ( & expr. argument )
397
+ . get_side_free_number_value ( & expr. argument )
397
398
. map ( |v| if v. is_nan ( ) { v } else { -v } )
398
399
. map ( ConstantValue :: Number ) ,
399
400
ValueType :: Undefined => Some ( ConstantValue :: Number ( f64:: NAN ) ) ,
400
401
ValueType :: Null => Some ( ConstantValue :: Number ( -0.0 ) ) ,
401
402
_ => None ,
402
403
} ,
403
404
UnaryOperator :: BitwiseNot => match ValueType :: from ( & expr. argument ) {
404
- ValueType :: BigInt => {
405
- self . eval_to_big_int ( & expr. argument ) . map ( |v| !v) . map ( ConstantValue :: BigInt )
406
- }
405
+ ValueType :: BigInt => self
406
+ . get_side_free_bigint_value ( & expr. argument )
407
+ . map ( |v| !v)
408
+ . map ( ConstantValue :: BigInt ) ,
407
409
#[ expect( clippy:: cast_lossless) ]
408
410
_ => self
409
- . eval_to_number ( & expr. argument )
411
+ . get_side_free_number_value ( & expr. argument )
410
412
. map ( |v| ( !v. to_int_32 ( ) ) as f64 )
411
413
. map ( ConstantValue :: Number ) ,
412
414
} ,
@@ -423,7 +425,7 @@ pub trait ConstantEvaluation<'a>: MayHaveSideEffects {
423
425
if let Some ( ConstantValue :: String ( s) ) = self . eval_expression ( & expr. object ) {
424
426
Some ( ConstantValue :: Number ( s. encode_utf16 ( ) . count ( ) . to_f64 ( ) . unwrap ( ) ) )
425
427
} else {
426
- if self . expression_may_have_side_efffects ( & expr. object ) {
428
+ if self . expression_may_have_side_effects ( & expr. object ) {
427
429
return None ;
428
430
}
429
431
if let Expression :: ArrayExpression ( arr) = & expr. object {
@@ -446,7 +448,7 @@ pub trait ConstantEvaluation<'a>: MayHaveSideEffects {
446
448
if let Some ( ConstantValue :: String ( s) ) = self . eval_expression ( & expr. object ) {
447
449
Some ( ConstantValue :: Number ( s. encode_utf16 ( ) . count ( ) . to_f64 ( ) . unwrap ( ) ) )
448
450
} else {
449
- if self . expression_may_have_side_efffects ( & expr. object ) {
451
+ if self . expression_may_have_side_effects ( & expr. object ) {
450
452
return None ;
451
453
}
452
454
if let Expression :: ArrayExpression ( arr) = & expr. object {
0 commit comments