mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
feat(minifier): minimize not !(x === undefined) -> x !== undefined (#8429)
This commit is contained in:
parent
7f69561caf
commit
dab7a51e78
2 changed files with 18 additions and 8 deletions
|
|
@ -117,14 +117,21 @@ impl<'a> PeepholeMinimizeConditions {
|
||||||
expr: &mut UnaryExpression<'a>,
|
expr: &mut UnaryExpression<'a>,
|
||||||
ctx: &mut TraverseCtx<'a>,
|
ctx: &mut TraverseCtx<'a>,
|
||||||
) -> Option<Expression<'a>> {
|
) -> Option<Expression<'a>> {
|
||||||
if expr.operator.is_not() {
|
if !expr.operator.is_not() {
|
||||||
if let Expression::UnaryExpression(e1) = &mut expr.argument {
|
return None;
|
||||||
if e1.operator.is_not() && ValueType::from(&e1.argument).is_boolean() {
|
|
||||||
return Some(ctx.ast.move_expression(&mut e1.argument));
|
|
||||||
}
|
}
|
||||||
|
match &mut expr.argument {
|
||||||
|
Expression::UnaryExpression(e)
|
||||||
|
if e.operator.is_not() && ValueType::from(&e.argument).is_boolean() =>
|
||||||
|
{
|
||||||
|
Some(ctx.ast.move_expression(&mut e.argument))
|
||||||
}
|
}
|
||||||
|
Expression::BinaryExpression(e) if e.operator.is_equality() => {
|
||||||
|
e.operator = e.operator.equality_inverse_operator().unwrap();
|
||||||
|
Some(ctx.ast.move_expression(&mut expr.argument))
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
}
|
}
|
||||||
None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn try_minimize_if(
|
fn try_minimize_if(
|
||||||
|
|
@ -1968,6 +1975,9 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn minimize_nots_with_binary_expressions() {
|
fn minimize_nots_with_binary_expressions() {
|
||||||
|
test("!(x === undefined)", "x !== undefined");
|
||||||
|
test("!(typeof(x) === 'undefined')", "typeof x != 'undefined'");
|
||||||
|
test("!(x === void 0)", "x !== void 0");
|
||||||
test("!!delete x.y", "delete x.y");
|
test("!!delete x.y", "delete x.y");
|
||||||
test("!!!delete x.y", "!delete x.y");
|
test("!!!delete x.y", "!delete x.y");
|
||||||
test("!!!!delete x.y", "delete x.y");
|
test("!!!!delete x.y", "delete x.y");
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
| Oxc | ESBuild | Oxc | ESBuild |
|
| Oxc | ESBuild | Oxc | ESBuild |
|
||||||
Original | minified | minified | gzip | gzip | Fixture
|
Original | minified | minified | gzip | gzip | Fixture
|
||||||
-------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------
|
||||||
72.14 kB | 23.71 kB | 23.70 kB | 8.61 kB | 8.54 kB | react.development.js
|
72.14 kB | 23.70 kB | 23.70 kB | 8.60 kB | 8.54 kB | react.development.js
|
||||||
|
|
||||||
173.90 kB | 59.79 kB | 59.82 kB | 19.41 kB | 19.33 kB | moment.js
|
173.90 kB | 59.79 kB | 59.82 kB | 19.41 kB | 19.33 kB | moment.js
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue