mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
perf(transformer): look up SymbolId for require only once (#6192)
When inserting `var x = require('y');` statements in `ModuleImports`, look up the binding for `require` only once, rather than for each statement.
This commit is contained in:
parent
a7ed29e67a
commit
da2b2a4060
1 changed files with 15 additions and 4 deletions
|
|
@ -85,7 +85,14 @@ impl<'a, 'ctx> ModuleImports<'a, 'ctx> {
|
|||
imports: &mut IndexMap<Atom<'a>, Vec<NamedImport<'a>>>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) {
|
||||
let stmts = imports.drain(..).map(|(source, names)| Self::get_require(source, names, ctx));
|
||||
if imports.is_empty() {
|
||||
return;
|
||||
}
|
||||
|
||||
let require_symbol_id = ctx.scopes().get_root_binding("require");
|
||||
let stmts = imports
|
||||
.drain(..)
|
||||
.map(|(source, names)| Self::get_require(source, names, require_symbol_id, ctx));
|
||||
self.ctx.top_level_statements.insert_statements(stmts);
|
||||
}
|
||||
|
||||
|
|
@ -116,12 +123,16 @@ impl<'a, 'ctx> ModuleImports<'a, 'ctx> {
|
|||
fn get_require(
|
||||
source: Atom<'a>,
|
||||
names: std::vec::Vec<NamedImport<'a>>,
|
||||
require_symbol_id: Option<SymbolId>,
|
||||
ctx: &mut TraverseCtx<'a>,
|
||||
) -> Statement<'a> {
|
||||
let var_kind = VariableDeclarationKind::Var;
|
||||
let symbol_id = ctx.scopes().get_root_binding("require");
|
||||
let ident =
|
||||
ctx.create_reference_id(SPAN, Atom::from("require"), symbol_id, ReferenceFlags::read());
|
||||
let ident = ctx.create_reference_id(
|
||||
SPAN,
|
||||
Atom::from("require"),
|
||||
require_symbol_id,
|
||||
ReferenceFlags::read(),
|
||||
);
|
||||
let callee = ctx.ast.expression_from_identifier_reference(ident);
|
||||
|
||||
let args = {
|
||||
|
|
|
|||
Loading…
Reference in a new issue