From 4b7596c65647eb9e0b8f03e0d013c68741cfc36e Mon Sep 17 00:00:00 2001 From: Boshen Date: Fri, 18 Jul 2025 23:57:06 +0800 Subject: [PATCH] refactor(codegen): remove clone of source text in sourcemap builder --- crates/oxc_codegen/src/lib.rs | 2 +- crates/oxc_codegen/src/sourcemap_builder.rs | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/crates/oxc_codegen/src/lib.rs b/crates/oxc_codegen/src/lib.rs index c44195a27674a..71d36e6916893 100644 --- a/crates/oxc_codegen/src/lib.rs +++ b/crates/oxc_codegen/src/lib.rs @@ -115,7 +115,7 @@ pub struct Codegen<'a> { // Builders comments: CommentsMap, - sourcemap_builder: Option, + sourcemap_builder: Option>, } impl Default for Codegen<'_> { diff --git a/crates/oxc_codegen/src/sourcemap_builder.rs b/crates/oxc_codegen/src/sourcemap_builder.rs index ee97a6aa6555b..f685f5db59638 100644 --- a/crates/oxc_codegen/src/sourcemap_builder.rs +++ b/crates/oxc_codegen/src/sourcemap_builder.rs @@ -1,4 +1,4 @@ -use std::{path::Path, sync::Arc}; +use std::path::Path; use nonmax::NonMaxU32; use oxc_index::{Idx, IndexVec}; @@ -65,9 +65,9 @@ pub struct ColumnOffsets { } #[expect(clippy::struct_field_names)] -pub struct SourcemapBuilder { +pub struct SourcemapBuilder<'a> { source_id: u32, - original_source: Arc, + original_source: &'a str, last_generated_update: usize, last_position: Option, line_offset_tables: LineOffsetTables, @@ -80,15 +80,15 @@ pub struct SourcemapBuilder { last_line_lookup: u32, } -impl SourcemapBuilder { - pub fn new(path: &Path, source_text: &str) -> Self { +impl<'a> SourcemapBuilder<'a> { + pub fn new(path: &Path, source_text: &'a str) -> Self { let mut sourcemap_builder = oxc_sourcemap::SourceMapBuilder::default(); let line_offset_tables = Self::generate_line_offset_tables(source_text); let source_id = sourcemap_builder.set_source_and_content(path.to_string_lossy().as_ref(), source_text); Self { source_id, - original_source: Arc::from(source_text), + original_source: source_text, last_generated_update: 0, last_position: None, line_offset_tables, @@ -114,18 +114,17 @@ impl SourcemapBuilder { 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 == Some(name) { None } else { original_name.map(Into::into) }; + let token_name = if original_name == Some(name) { None } else { original_name }; self.add_source_mapping(output, span.start, token_name); } - pub fn add_source_mapping(&mut self, output: &[u8], position: u32, name: Option>) { + pub fn add_source_mapping(&mut self, output: &[u8], position: u32, name: Option<&str>) { if matches!(self.last_position, Some(last_position) if last_position == position) { return; } let (original_line, original_column) = self.search_original_line_and_column(position); self.update_generated_line_and_column(output); - let name_id = name.map(|s| self.sourcemap_builder.add_name(&s)); + let name_id = name.map(|s| self.sourcemap_builder.add_name(s)); self.sourcemap_builder.add_token( self.generated_line, self.generated_column,