From 56d50cf92ce7118e99fc802dde4edda28f13233b Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Sun, 6 Oct 2024 00:51:29 +0000 Subject: [PATCH] fix(transformer): exponentiation transform: do not assume `Math` is not a local var (#6302) `Math` is hopefully a global var (and transform will be incorrect if it isn't), but make sure scope tree is correct either way. --- crates/oxc_transformer/src/es2016/exponentiation_operator.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/oxc_transformer/src/es2016/exponentiation_operator.rs b/crates/oxc_transformer/src/es2016/exponentiation_operator.rs index af68bbefb389d..768846dba27e1 100644 --- a/crates/oxc_transformer/src/es2016/exponentiation_operator.rs +++ b/crates/oxc_transformer/src/es2016/exponentiation_operator.rs @@ -135,14 +135,15 @@ impl<'a, 'ctx> ExponentiationOperator<'a, 'ctx> { } } - /// `left ** right` -> `Math.pow(left, right)` + /// `Math.pow(left, right)` fn math_pow( left: Expression<'a>, right: Expression<'a>, ctx: &mut TraverseCtx<'a>, ) -> Expression<'a> { + let math_symbol_id = ctx.scopes().find_binding(ctx.current_scope_id(), "Math"); let ident_math = - ctx.create_unbound_reference_id(SPAN, ctx.ast.atom("Math"), ReferenceFlags::Read); + ctx.create_reference_id(SPAN, Atom::from("Math"), math_symbol_id, ReferenceFlags::Read); let object = ctx.ast.expression_from_identifier_reference(ident_math); let property = ctx.ast.identifier_name(SPAN, "pow"); let callee =