Skip to content

Commit

Permalink
refactor(transformer): HelperLoader common transform: use hashmap `…
Browse files Browse the repository at this point in the history
…Entry` API
  • Loading branch information
overlookmotel committed Oct 14, 2024
1 parent 9bf6fee commit a58df2f
Showing 1 changed file with 9 additions and 14 deletions.
23 changes: 9 additions & 14 deletions crates/oxc_transformer/src/common/helper_loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ impl<'a> HelperLoaderStore<'a> {
/// Load a helper function and return the callee expression.
pub fn load(&self, helper_name: Atom<'a>, ctx: &mut TraverseCtx<'a>) -> Expression<'a> {
match self.mode {
HelperLoaderMode::Runtime => self.transform_for_runtime_helper(&helper_name, ctx),
HelperLoaderMode::Runtime => self.transform_for_runtime_helper(helper_name, ctx),
HelperLoaderMode::External => self.transform_for_external_helper(helper_name, ctx),
HelperLoaderMode::Inline => {
unreachable!("Inline helpers are not supported yet");
Expand All @@ -221,15 +221,16 @@ impl<'a> HelperLoaderStore<'a> {
impl<'a> HelperLoaderStore<'a> {
fn transform_for_runtime_helper(
&self,
helper_name: &Atom<'a>,
helper_name: Atom<'a>,
ctx: &mut TraverseCtx<'a>,
) -> Expression<'a> {
if !self.loaded_helpers.borrow().contains_key(helper_name) {
self.add_default_import(helper_name.clone(), ctx);
}
let bound_ident = self.loaded_helpers.borrow_mut()[helper_name].1.clone();
let ident = bound_ident.create_read_reference(ctx);
ctx.ast.expression_from_identifier_reference(ident)
let mut loaded_helpers = self.loaded_helpers.borrow_mut();
let (_, binding) = loaded_helpers.entry(helper_name).or_insert_with_key(|helper_name| {
let source = ctx.ast.atom(&format!("{}/helpers/{helper_name}", self.module_name));
let binding = ctx.generate_uid_in_root_scope(helper_name, SymbolFlags::Import);
(source, binding)
});
binding.create_read_expression(ctx)
}

fn transform_for_external_helper(
Expand All @@ -255,12 +256,6 @@ impl<'a> HelperLoaderStore<'a> {
Expression::from(ctx.ast.member_expression_static(SPAN, object, property, false))
}

fn add_default_import(&self, helper_name: Atom<'a>, ctx: &mut TraverseCtx<'a>) {
let source = ctx.ast.atom(&format!("{}/helpers/{helper_name}", self.module_name));
let bound_ident = ctx.generate_uid_in_root_scope(&helper_name, SymbolFlags::Import);
self.loaded_helpers.borrow_mut().insert(helper_name, (source, bound_ident));
}

fn add_imports(&self, transform_ctx: &TransformCtx<'a>) {
let mut loaded_helpers = self.loaded_helpers.borrow_mut();
loaded_helpers.drain().for_each(|(_, (source, import))| {
Expand Down

0 comments on commit a58df2f

Please sign in to comment.