Skip to content

Commit d140fe1

Browse files
szuendDevtools-frontend LUCI CQ
authored andcommitted
[source-map] Fix sourceIndex in mapping entries for index source maps
We "sourceIndex" to mapping entries to resolve inlined source positions via "scopes" proposal. This CL fixes the "sourceIndex" for index source maps: These are source maps that contain a set of other source maps describing different parts of a bundle. For index source maps we concatenate all the "sources" arrays from all the "child source maps". The "sourceIndex" is then an index into the concatenated "sources" list. [email protected] Bug: 390337576 Change-Id: I7a450ae466a7ce89516895a137289c4db2c391ac Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6182123 Commit-Queue: Simon Zünd <[email protected]> Reviewed-by: Kim-Anh Tran <[email protected]>
1 parent 5507016 commit d140fe1

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

front_end/core/sdk/SourceMap.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,8 @@ describeWithEnvironment('SourceMap', () => {
341341
assert.lengthOf(sourceMap.sourceURLs(), 3, 'unexpected number of original source URLs');
342342
assertMapping(sourceMap.findEntry(0, 0), 0, 'source1.js', 0, 0);
343343
assertMapping(sourceMap.findEntry(0, 1), 0, 'source1.js', 2, 1);
344-
assertMapping(sourceMap.findEntry(2, 10), 0, 'source3.js', 0, 0);
345-
assertMapping(sourceMap.findEntry(2, 11), 0, 'source3.js', 2, 1);
344+
assertMapping(sourceMap.findEntry(2, 10), 2, 'source3.js', 0, 0);
345+
assertMapping(sourceMap.findEntry(2, 11), 2, 'source3.js', 2, 1);
346346
});
347347

348348
it('can parse source maps with ClosureScript names', () => {

front_end/core/sdk/SourceMap.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -457,18 +457,20 @@ export class SourceMap {
457457
}
458458
}
459459

460-
private eachSection(callback: (arg0: SourceMapV3Object, arg1: number, arg2: number) => void): void {
460+
private eachSection(callback: (arg0: SourceMapV3Object, arg1: number, arg2: number, arg3: number) => void): void {
461461
if (!this.#json) {
462462
return;
463463
}
464464
if ('sections' in this.#json) {
465+
let sourcesIndex = 0;
465466
for (const section of this.#json.sections) {
466467
if ('map' in section) {
467-
callback(section.map, section.offset.line, section.offset.column);
468+
callback(section.map, sourcesIndex, section.offset.line, section.offset.column);
469+
sourcesIndex += section.map.sources.length;
468470
}
469471
}
470472
} else {
471-
callback(this.#json, 0, 0);
473+
callback(this.#json, 0, 0, 0);
472474
}
473475
}
474476

@@ -503,7 +505,7 @@ export class SourceMap {
503505
sourceMapToSourceList.set(sourceMap, sourcesList);
504506
}
505507

506-
private parseMap(map: SourceMapV3Object, lineNumber: number, columnNumber: number): void {
508+
private parseMap(map: SourceMapV3Object, baseSourceIndex: number, lineNumber: number, columnNumber: number): void {
507509
let sourceIndex = 0;
508510
let sourceLineNumber = 0;
509511
let sourceColumnNumber = 0;
@@ -550,14 +552,15 @@ export class SourceMap {
550552
sourceColumnNumber += tokenIter.nextVLQ();
551553

552554
if (!tokenIter.hasNext() || this.isSeparator(tokenIter.peek())) {
553-
this.mappings().push(
554-
new SourceMapEntry(lineNumber, columnNumber, sourceIndex, sourceURL, sourceLineNumber, sourceColumnNumber));
555+
this.mappings().push(new SourceMapEntry(
556+
lineNumber, columnNumber, baseSourceIndex + sourceIndex, sourceURL, sourceLineNumber, sourceColumnNumber));
555557
continue;
556558
}
557559

558560
nameIndex += tokenIter.nextVLQ();
559561
this.mappings().push(new SourceMapEntry(
560-
lineNumber, columnNumber, sourceIndex, sourceURL, sourceLineNumber, sourceColumnNumber, names[nameIndex]));
562+
lineNumber, columnNumber, baseSourceIndex + sourceIndex, sourceURL, sourceLineNumber, sourceColumnNumber,
563+
names[nameIndex]));
561564
}
562565

563566
if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.USE_SOURCE_MAP_SCOPES)) {

0 commit comments

Comments
 (0)