chore: avoid unsafe code search original name (#2895)

close https://github.com/rolldown/rolldown/issues/716

---------

Co-authored-by: Boshen <boshenc@gmail.com>
This commit is contained in:
underfin 2024-04-03 19:34:21 +08:00 committed by GitHub
parent 54f7cd3978
commit ef4b898be8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -62,12 +62,18 @@ impl SourcemapBuilder {
}
pub fn add_source_mapping_for_name(&mut self, output: &[u8], span: Span, name: &str) {
// SAFETY: search original string by span.
let original_name =
unsafe { self.original_source.get_unchecked(span.start as usize..span.end as usize) };
debug_assert!(
(span.end as usize) <= self.original_source.len(),
"violated {}:{} <= {} for {name}",
span.start,
span.end,
self.original_source.len()
);
let original_name = self.original_source.get(span.start as usize..span.end as usize);
// The token name should be original name.
// If it hasn't change, name should be `None` to reduce `SourceMap` size.
let token_name = if original_name == name { None } else { Some(original_name.into()) };
let token_name =
if original_name == Some(name) { None } else { original_name.map(Into::into) };
self.add_source_mapping(output, span.start, token_name);
}