Skip to content

Commit cdd20cd

Browse files
authoredJun 16, 2024··
fix(common): Revert Use SourceMap::adjust_mappings (#9058)
**Description:** getsentry/rust-sourcemap#91 should fix this issue, but let's revert #9052 for now. # Context `swc_core` regressed. Caught by vercel/next.js#66902 ``` ⚠ Linting is disabled. ▲ Next.js 15.0.0-canary.34 ✓ Checking validity of types Creating an optimized production build ... Panic: PanicInfo { payload: Any { .. }, message: Some(attempt to add with overflow), location: Location { file: "/Users/kdy1/.cargo/registry/src/index.crates.io-6f17d22bba15001f/sourcemap-8.0.1/src/encoder.rs", line: 89, col: 13 }, can_unwind: true, force_no_backtrace: false } Backtrace: 0: backtrace::backtrace::libunwind::trace at /Users/kdy1/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.68/src/backtrace/libunwind.rs:93:5 backtrace::backtrace::trace_unsynchronized::<<backtrace::capture::Backtrace>::create::{closure#0}> at /Users/kdy1/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.68/src/backtrace/mod.rs:66:5 backtrace::backtrace::trace::<<backtrace::capture::Backtrace>::create::{closure#0}> at /Users/kdy1/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.68/src/backtrace/mod.rs:53:14 <backtrace::capture::Backtrace>::create at /Users/kdy1/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.68/src/capture.rs:176:9 <backtrace::capture::Backtrace>::new at /Users/kdy1/.cargo/registry/src/index.crates.io-6f17d22bba15001f/backtrace-0.3.68/src/capture.rs:140:22 1: next_swc_napi::init::{closure#0} at packages/next-swc/crates/napi/src/lib.rs:85:29 2: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call at /rustc/6f3df08aadf71e8d4bf7e49f5dc10dfa6f254cb4/library/alloc/src/boxed.rs:2077:9 std::panicking::rust_panic_with_hook at /rustc/6f3df08aadf71e8d4bf7e49f5dc10dfa6f254cb4/library/std/src/panicking.rs:799:13 3: std::panicking::begin_panic_handler::{{closure}} at /rustc/6f3df08aadf71e8d4bf7e49f5dc10dfa6f254cb4/library/std/src/panicking.rs ```
1 parent 11df9e9 commit cdd20cd

File tree

4 files changed

+50
-23
lines changed

4 files changed

+50
-23
lines changed
 

‎crates/swc/tests/fixture/sourcemap/004/output/index.map

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
2-
"mappings": "CAACA,KAAK,gBAAmB,GAAGA,KAAK,gBAAmB,IAAI,EAAA,AAAC,EAAGC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB,EAAE;YAC3F;YACA,IAAIC,IAAa,SAAoBC,CAAI,EAAE;gBACvC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAsB,CAAA,GAAGC,EAA+CC,GAAAA,AAAE,EAAG,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS,WAAoB;oBAC9C,OAAqBA;gBACzB;gBACqBC,SAAS,WAAoB;oBAC9C,OAAqBV;gBACzB;YACJ;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB,EAAE;aAC/Fa,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAA,AAAC,EAAGjB,IAAI,CAAC;gBAC3C;gBACA,WAAY;oBACR,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB,EAAE;QAK3BA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE,WAAY;YACX,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC;IAGhE;CACC",
2+
"mappings": "AAACA,CAAAA,KAAKC,gBAAmB,GAAGD,KAAKC,gBAAmB,IAAI,EAAE,AAAF,EAAIC,IAAI,CAAC;IAC7D;QACI;KACH;IACD;QACU,MAAY,SAAUC,CAAuB,EAAEC,CAAmB,EAAEC,CAAmB;YACzF;YACA,IAAIC,IAAa,SAAoBC,CAAI;gBACrC,IAAIC,IAAOD,EAAKC,IAAI;gBACpB,OAAqB,AAAC,CAAA,GAAGC,EAA+CC,GAAG,AAAHA,EAAK,OAAO;oBAChFC,UAAUH,EAAKI,GAAG;gBACtB;YACJ;YACAP,EAAoBQ,CAAC,CAACT,IACDC,EAAoBS,CAAC,CAACV,GAAqB;gBACvCW,SAAS;oBAC1B,OAAqBA;gBACzB;gBACqBC,SAAS;oBAC1B,OAAqBV;gBACzB;YACJ;YACqB,IAAIG,IAAiDJ,EAAoB,OAC1FU,IAAU,CAAA;QAE1B;QACc,MAAY,SAAUZ,CAAuB,EAAEc,CAAwB,EAAEZ,CAAmB;YAC7Fa,CAAAA,OAAOC,QAAQ,GAAGD,OAAOC,QAAQ,IAAI,EAAE,AAAF,EAAIjB,IAAI,CAAC;gBAC3C;gBACA;oBACI,OAAOG,EAAoB;gBAC/B;aACH;QAGb;IACI;IACS,SAAUA,CAAmB;QAKzBA,EAAoBe,CAAC,CAAC,GAAG;YAC9B;YACA;YACA;SACH,EAAE;YACC,OAPOf,EAAoBA,EAAoBgB,CAAC,GAOxB;QAC5B,IAESC,OAD0BjB,EAAoBe,CAAC;IAGhE;CACC",
33
"names": [
44
"self",
5+
"webpackChunk_N_E",
56
"push",
67
"__unused_webpack_module",
78
"__webpack_exports__",

‎crates/swc/tests/fixture/sourcemap/issue-6552/input-map/output/index.map

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"mappings": "AAAA,IAAMA,GAAG,CAAG,aAAZ,CACAC,OAAO,CAACC,KAAR,CAAe,YAAIC,OAAQ,dAAA,CAA3B,gBAEA,IAAMC,GAAG,CAAG,EAAZ",
2+
"mappings": "AAAA,IAAMA,IAAM,cACZC,QAAQC,KAAR,CAAe,KAAY,OAARC,UAEnB,IAAMC,IAAM",
33
"names": [
44
"xxx",
55
"console",

‎crates/swc/tests/minify/issue-7475/issue-8372/1/output.map

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
{
2-
"mappings": "AAEAA,IAAAA,EAAQC,CAAG,AAFD,IAAA,MAAA,EAAS,QAAA,GAAA,CAAA",
2+
"mappings": "AAEAA,IAAAA,EAAQC,CAFEC,IAAA,MAAA,EAASF,QAAAC,GAAA,CAAAE",
33
"names": [
44
"console",
55
"log",
6-
"aób"
6+
"aób",
7+
"a"
78
],
89
"rangeMappings": "",
910
"sources": [

‎crates/swc_common/src/source_map.rs

+44-19
Original file line numberDiff line numberDiff line change
@@ -1212,20 +1212,30 @@ impl SourceMap {
12121212
pub fn build_source_map_with_config(
12131213
&self,
12141214
mappings: &[(BytePos, LineCol)],
1215-
mut orig: Option<sourcemap::SourceMap>,
1215+
orig: Option<sourcemap::SourceMap>,
12161216
config: impl SourceMapGenConfig,
12171217
) -> sourcemap::SourceMap {
12181218
let mut builder = SourceMapBuilder::new(None);
12191219

12201220
let mut src_id = 0u32;
12211221

1222+
if let Some(orig) = &orig {
1223+
for src in orig.sources() {
1224+
let id = builder.add_source(src);
1225+
src_id = id;
1226+
1227+
builder.set_source_contents(id, orig.get_source_contents(id));
1228+
}
1229+
}
1230+
12221231
// // This method is optimized based on the fact that mapping is sorted.
12231232
// mappings.sort_by_key(|v| v.0);
12241233

12251234
let mut cur_file: Option<Lrc<SourceFile>> = None;
12261235

12271236
let mut prev_dst_line = u32::MAX;
12281237

1238+
let mut inline_sources_content = false;
12291239
let mut ch_state = ByteToCharPosState::default();
12301240
let mut line_state = ByteToCharPosState::default();
12311241

@@ -1257,11 +1267,13 @@ impl SourceMap {
12571267
if config.skip(&f.name) {
12581268
continue;
12591269
}
1260-
src_id = builder.add_source(&config.file_name_to_source(&f.name));
1270+
if orig.is_none() {
1271+
src_id = builder.add_source(&config.file_name_to_source(&f.name));
12611272

1262-
let inline_sources_content = config.inline_sources_content(&f.name);
1263-
if inline_sources_content {
1264-
builder.set_source_contents(src_id, Some(&f.src));
1273+
inline_sources_content = config.inline_sources_content(&f.name);
1274+
if inline_sources_content && orig.is_none() {
1275+
builder.set_source_contents(src_id, Some(&f.src));
1276+
}
12651277
}
12661278

12671279
ch_state = ByteToCharPosState::default();
@@ -1281,7 +1293,7 @@ impl SourceMap {
12811293
continue;
12821294
}
12831295

1284-
let line = match f.lookup_line(pos) {
1296+
let mut line = match f.lookup_line(pos) {
12851297
Some(line) => line as u32,
12861298
None => continue,
12871299
};
@@ -1307,8 +1319,31 @@ impl SourceMap {
13071319
linechpos,
13081320
);
13091321

1310-
let col = chpos - linechpos;
1311-
let name = None;
1322+
let mut col = chpos - linechpos;
1323+
let mut name = None;
1324+
if let Some(orig) = &orig {
1325+
if let Some(token) = orig
1326+
.lookup_token(line, col)
1327+
.filter(|t| t.get_dst_line() == line)
1328+
{
1329+
line = token.get_src_line();
1330+
col = token.get_src_col();
1331+
if token.has_name() {
1332+
name = token.get_name();
1333+
}
1334+
if token.get_source().is_some() {
1335+
// When we have the original source map, we use the source ids from it
1336+
src_id = token.get_raw_token().src_id;
1337+
if inline_sources_content && !builder.has_source_contents(src_id) {
1338+
if let Some(contents) = token.get_source_view() {
1339+
builder.set_source_contents(src_id, Some(contents.source()));
1340+
}
1341+
}
1342+
}
1343+
} else {
1344+
continue;
1345+
}
1346+
}
13121347

13131348
let name_idx = name
13141349
.or_else(|| config.name_for_bytepos(pos))
@@ -1318,17 +1353,7 @@ impl SourceMap {
13181353
prev_dst_line = lc.line;
13191354
}
13201355

1321-
let mut map = builder.into_sourcemap();
1322-
1323-
if let Some(o) = &mut orig {
1324-
o.adjust_mappings(&map);
1325-
}
1326-
1327-
if let Some(orig) = orig {
1328-
map = orig;
1329-
}
1330-
1331-
map
1356+
builder.into_sourcemap()
13321357
}
13331358
}
13341359

0 commit comments

Comments
 (0)
Please sign in to comment.