gecko-dev/devtools/shared/wasm-source-map.js
Yury Delendik 3c4f86517b Bug 1364535 - Inverse source mapping for WebAssembly maps. r=jlast
MozReview-Commit-ID: JqEkdLpIv2o

--HG--
extra : rebase_source : 381c8ff7b754299c468c0e790177aace74bab44f
2017-06-19 10:55:20 -05:00

115 lines
2.5 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* SourceMapConsumer for WebAssembly source maps. It transposes columns with
* lines, which allows mapping data to be used with SpiderMonkey Debugger API.
*/
class WasmRemap {
/**
* @param map SourceMapConsumer
*/
constructor(map) {
this._map = map;
this.version = map.version;
this.file = map.file;
this._computeColumnSpans = false;
}
get sources() {
return this._map.sources;
}
get sourceRoot() {
return this._map.sourceRoot;
}
/**
* @param url string
*/
set sourceRoot(url) { // important, since sources are using this.
this._map.sourceRoot = url;
}
get names() {
return this._map.names;
}
get sourcesContent() {
return this._map.sourcesContent;
}
get mappings() {
throw new Error("not supported");
}
computeColumnSpans() {
this._computeColumnSpans = true;
}
originalPositionFor(generatedPosition) {
let result = this._map.originalPositionFor({
line: 1,
column: generatedPosition.line,
bias: generatedPosition.bias
});
return result;
}
_remapGeneratedPosition(position) {
let generatedPosition = {
line: position.column,
column: 0,
};
if (this._computeColumnSpans) {
generatedPosition.lastColumn = Infinity;
}
return generatedPosition;
}
generatedPositionFor(originalPosition) {
let position = this._map.generatedPositionFor(originalPosition);
return this._remapGeneratedPosition(position);
}
allGeneratedPositionsFor(originalPosition) {
let positions = this._map.allGeneratedPositionsFor(originalPosition);
return positions.map((position) => {
return this._remapGeneratedPosition(position);
});
}
hasContentsOfAllSources() {
return this._map.hasContentsOfAllSources();
}
sourceContentFor(source, returnNullOnMissing) {
return this._map.sourceContentFor(source, returnNullOnMissing);
}
eachMapping(callback, context, order) {
this._map.eachMapping((entry) => {
let {
source,
generatedColumn,
originalLine,
originalColumn,
name
} = entry;
callback({
source,
generatedLine: generatedColumn,
generatedColumn: 0,
originalLine,
originalColumn,
name,
});
}, context, order);
}
}
exports.WasmRemap = WasmRemap;