Skip to content

Commit

Permalink
fix(codegen): print #field in {} << 0; correctly (#6799)
Browse files Browse the repository at this point in the history
  • Loading branch information
Boshen committed Oct 23, 2024
1 parent 2f6ad42 commit 1b7897c
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 11 deletions.
6 changes: 6 additions & 0 deletions crates/oxc_codegen/src/binary_expr_visitor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
2 changes: 1 addition & 1 deletion crates/oxc_codegen/src/gen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
}
}
Expand Down
18 changes: 12 additions & 6 deletions crates/oxc_codegen/tests/integration/unit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
5 changes: 1 addition & 4 deletions tasks/coverage/snapshots/runtime.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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 SameValuetrue», «false») to be true

tasks/coverage/test262/test/language/expressions/in/private-field-rhs-non-object.js
codegen error: Test262Error: Expected SameValuenull», «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 SameValuetrue», «false») to be true

Expand Down

0 comments on commit 1b7897c

Please sign in to comment.