Skip to content

Commit

Permalink
fix: don't rename symbols that show many times. Fixes #419
Browse files Browse the repository at this point in the history
  • Loading branch information
hyf0 committed Jan 30, 2024
1 parent a755899 commit f985755
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 15 deletions.
28 changes: 17 additions & 11 deletions crates/rolldown/src/bundler/utils/renamer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,23 @@ impl<'name> Renamer<'name> {

let mut count = 1;
let mut candidate_name = Cow::Borrowed(binding_name);
loop {
let is_shadowed =
stack.iter().any(|used_canonical_names| used_canonical_names.contains(&candidate_name));

if is_shadowed {
candidate_name = Cow::Owned(format!("{binding_name}${count}").into());
count += 1;
} else {
used_canonical_names_for_this_scope.insert(candidate_name.clone());
canonical_names.insert(binding_ref, candidate_name.into_owned());
break;
match canonical_names.entry(binding_ref) {
std::collections::hash_map::Entry::Vacant(slot) => loop {
let is_shadowed = stack
.iter()
.any(|used_canonical_names| used_canonical_names.contains(&candidate_name));

if is_shadowed {
candidate_name = Cow::Owned(format!("{binding_name}${count}").into());
count += 1;
} else {
used_canonical_names_for_this_scope.insert(candidate_name.clone());
slot.insert(candidate_name.into_owned());
break;
}
},
std::collections::hash_map::Entry::Occupied(_) => {
// The symbol is already renamed
}
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ input_file: crates/rolldown/tests/esbuild/default/nested_scope_bug
// entry.js
(() => {
function a() {
b$1();
b();
}
{
var b$1 = () => {
var b = () => {
};
}
a();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ input_file: crates/rolldown/tests/esbuild/default/var_relocating_bundle
// function-nested.js
function x() {
if (true) {
var a$1;
for (var b$1; 0; ) ; for (var e$1 of []) ; for (var {f:f$1, x:[g$1]} of []) ; for (var h$1 in {}) ; for (var {j:j$1, x:[k$1]} in {}) ; function l() {
var a;
for (var b; 0; ) ; for (var e of []) ; for (var {f:f, x:[g]} of []) ; for (var h in {}) ; for (var {j:j, x:[k]} in {}) ; function l() {
}
}
}
Expand Down

0 comments on commit f985755

Please sign in to comment.