From 1b7897cf0198828091bc0603d7d18cc3cb448947 Mon Sep 17 00:00:00 2001 From: Boshen <1430279+Boshen@users.noreply.github.com> Date: Wed, 23 Oct 2024 05:34:22 +0000 Subject: [PATCH] fix(codegen): print `#field in {} << 0;` correctly (#6799) --- crates/oxc_codegen/src/binary_expr_visitor.rs | 6 ++++++ crates/oxc_codegen/src/gen.rs | 2 +- crates/oxc_codegen/tests/integration/unit.rs | 18 ++++++++++++------ tasks/coverage/snapshots/runtime.snap | 5 +---- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/crates/oxc_codegen/src/binary_expr_visitor.rs b/crates/oxc_codegen/src/binary_expr_visitor.rs index 5111ea2cee972..ca4b22527a37a 100644 --- a/crates/oxc_codegen/src/binary_expr_visitor.rs +++ b/crates/oxc_codegen/src/binary_expr_visitor.rs @@ -196,6 +196,12 @@ impl<'a> BinaryExpressionVisitor<'a> { _ => {} } + if let Expression::PrivateInExpression(e) = self.e.left() { + e.gen_expr(p, Precedence::Lowest, Context::empty()); + self.visit_right_and_finish(p); + return false; + } + true } diff --git a/crates/oxc_codegen/src/gen.rs b/crates/oxc_codegen/src/gen.rs index 8c308e2d92ec7..0d9532ffaad4e 100644 --- a/crates/oxc_codegen/src/gen.rs +++ b/crates/oxc_codegen/src/gen.rs @@ -1700,7 +1700,7 @@ impl<'a> GenExpr for PrivateInExpression<'a> { p.wrap(precedence >= Precedence::Compare, |p| { self.left.print(p, ctx); p.print_str(" in "); - self.right.print_expr(p, Precedence::Equals, Context::empty()); + self.right.print_expr(p, Precedence::Equals, Context::FORBID_IN); }); } } diff --git a/crates/oxc_codegen/tests/integration/unit.rs b/crates/oxc_codegen/tests/integration/unit.rs index eb65d7dced4e3..312ae41805e44 100644 --- a/crates/oxc_codegen/tests/integration/unit.rs +++ b/crates/oxc_codegen/tests/integration/unit.rs @@ -11,18 +11,24 @@ fn module_decl() { #[test] fn expr() { test("new (foo()).bar();", "new (foo()).bar();\n"); - test( - "class Foo { #test - bar() { if (!(#test in Foo)) { } } - }", - "class Foo {\n\t#test;\n\tbar() {\n\t\tif (!(#test in Foo)) {}\n\t}\n}\n", - ); test_minify("x in new Error()", "x in new Error();"); test("1000000000000000128.0.toFixed(0)", "0xde0b6b3a7640080.toFixed(0);\n"); test_minify("1000000000000000128.0.toFixed(0)", "0xde0b6b3a7640080.toFixed(0);"); } +#[test] +fn private_in() { + test( + "class Foo { #test; bar() { if (!(#test in Foo)) { } } }", + "class Foo {\n\t#test;\n\tbar() {\n\t\tif (!(#test in Foo)) {}\n\t}\n}\n", + ); + test( + "class Foo { #test; bar() { #field in {} << 0 } }", + "class Foo {\n\t#test;\n\tbar() {\n\t\t#field in {} << 0;\n\t}\n}\n", + ); +} + #[test] fn access_property() { test( diff --git a/tasks/coverage/snapshots/runtime.snap b/tasks/coverage/snapshots/runtime.snap index 03193de5f7f7d..d83abddd38605 100644 --- a/tasks/coverage/snapshots/runtime.snap +++ b/tasks/coverage/snapshots/runtime.snap @@ -2,7 +2,7 @@ commit: 06454619 runtime Summary: AST Parsed : 18446/18446 (100.00%) -Positive Passed: 17183/18446 (93.15%) +Positive Passed: 17184/18446 (93.16%) tasks/coverage/test262/test/annexB/language/function-code/block-decl-func-block-scoping.js minify error: ReferenceError: f is not defined @@ -1758,9 +1758,6 @@ minify error: Test262Error: The result of (1n > "0.") is false Expected SameValu tasks/coverage/test262/test/language/expressions/greater-than-or-equal/bigint-and-incomparable-string.js minify error: Test262Error: The result of (1n >= "0.") is false Expected SameValue(«true», «false») to be true -tasks/coverage/test262/test/language/expressions/in/private-field-rhs-non-object.js -codegen error: Test262Error: Expected SameValue(«null», «null») to be false - tasks/coverage/test262/test/language/expressions/less-than/bigint-and-incomparable-string.js minify error: Test262Error: The result of ("0." < 1n) is false Expected SameValue(«true», «false») to be true