diff --git a/crates/oxc_codegen/src/binary_expr_visitor.rs b/crates/oxc_codegen/src/binary_expr_visitor.rs index 5111ea2ce..ca4b22527 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 8c308e2d9..0d9532ffa 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 eb65d7dce..312ae4180 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 03193de5f..d83abddd3 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