Skip to content

Commit

Permalink
fix(codegen): print parenthesis on negative bigint lit when neccessary (
Browse files Browse the repository at this point in the history
#8258)

closes #8257

i couldn't really write a test for this, as it only happens when codegen + minifier are used together.

Regression should be prevented by the 262 suite in #8256 (failed CI run before i implemented this fix: https://github.com/oxc-project/oxc/actions/runs/12621310419/job/35168016825)
  • Loading branch information
camc314 committed Jan 6, 2025
1 parent 6a97e29 commit b6d16f4
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions crates/oxc_codegen/src/gen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1167,7 +1167,7 @@ impl GenExpr for Expression<'_> {
Self::BooleanLiteral(lit) => lit.print(p, ctx),
Self::NullLiteral(lit) => lit.print(p, ctx),
Self::NumericLiteral(lit) => lit.print_expr(p, precedence, ctx),
Self::BigIntLiteral(lit) => lit.print(p, ctx),
Self::BigIntLiteral(lit) => lit.print_expr(p, precedence, ctx),
Self::RegExpLiteral(lit) => lit.print(p, ctx),
Self::StringLiteral(lit) => lit.print(p, ctx),
Self::Identifier(ident) => ident.print(p, ctx),
Expand Down Expand Up @@ -1306,16 +1306,20 @@ impl GenExpr for NumericLiteral<'_> {
}
}

impl Gen for BigIntLiteral<'_> {
fn gen(&self, p: &mut Codegen, _ctx: Context) {
impl GenExpr for BigIntLiteral<'_> {
fn gen_expr(&self, p: &mut Codegen, precedence: Precedence, _ctx: Context) {
let raw = self.raw.as_str().cow_replace('_', "");
if raw.starts_with('-') {
p.print_space_before_operator(Operator::Unary(UnaryOperator::UnaryNegation));
}

p.print_space_before_identifier();
p.add_source_mapping(self.span);
p.print_str(&raw);
if !raw.starts_with('-') {
p.print_str(&raw);
} else if precedence >= Precedence::Prefix {
p.print_ascii_byte(b'(');
p.print_str(&raw);
p.print_ascii_byte(b')');
} else {
p.print_str(&raw);
}
}
}

Expand Down Expand Up @@ -3310,7 +3314,7 @@ impl Gen for TSLiteral<'_> {
Self::BooleanLiteral(decl) => decl.print(p, ctx),
Self::NullLiteral(decl) => decl.print(p, ctx),
Self::NumericLiteral(decl) => decl.print_expr(p, Precedence::Lowest, ctx),
Self::BigIntLiteral(decl) => decl.print(p, ctx),
Self::BigIntLiteral(decl) => decl.print_expr(p, Precedence::Lowest, ctx),
Self::RegExpLiteral(decl) => decl.print(p, ctx),
Self::StringLiteral(decl) => decl.print(p, ctx),
Self::TemplateLiteral(decl) => decl.print(p, ctx),
Expand Down

0 comments on commit b6d16f4

Please sign in to comment.