mirror of
https://github.com/danbulant/oxc
synced 2026-05-23 06:08:47 +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>>>,
|
imports: &mut IndexMap<Atom<'a>, Vec<NamedImport<'a>>>,
|
||||||
ctx: &mut TraverseCtx<'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);
|
self.ctx.top_level_statements.insert_statements(stmts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,12 +123,16 @@ impl<'a, 'ctx> ModuleImports<'a, 'ctx> {
|
||||||
fn get_require(
|
fn get_require(
|
||||||
source: Atom<'a>,
|
source: Atom<'a>,
|
||||||
names: std::vec::Vec<NamedImport<'a>>,
|
names: std::vec::Vec<NamedImport<'a>>,
|
||||||
|
require_symbol_id: Option<SymbolId>,
|
||||||
ctx: &mut TraverseCtx<'a>,
|
ctx: &mut TraverseCtx<'a>,
|
||||||
) -> Statement<'a> {
|
) -> Statement<'a> {
|
||||||
let var_kind = VariableDeclarationKind::Var;
|
let var_kind = VariableDeclarationKind::Var;
|
||||||
let symbol_id = ctx.scopes().get_root_binding("require");
|
let ident = ctx.create_reference_id(
|
||||||
let ident =
|
SPAN,
|
||||||
ctx.create_reference_id(SPAN, Atom::from("require"), symbol_id, ReferenceFlags::read());
|
Atom::from("require"),
|
||||||
|
require_symbol_id,
|
||||||
|
ReferenceFlags::read(),
|
||||||
|
);
|
||||||
let callee = ctx.ast.expression_from_identifier_reference(ident);
|
let callee = ctx.ast.expression_from_identifier_reference(ident);
|
||||||
|
|
||||||
let args = {
|
let args = {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue