diff --git a/lib/output.js b/lib/output.js index dceece34..2786941e 100644 --- a/lib/output.js +++ b/lib/output.js @@ -308,7 +308,7 @@ function OutputStream(options) { var add_mapping = options.source_map ? function(token, name) { try { if (token) options.source_map.add( - token.file || "?", + token.file, current_line, current_col, token.line, token.col, (!name && token.type == "name") ? token.value : name diff --git a/lib/sourcemap.js b/lib/sourcemap.js index a67011f0..f62b43e1 100644 --- a/lib/sourcemap.js +++ b/lib/sourcemap.js @@ -53,19 +53,33 @@ function SourceMap(options) { orig_line_diff : 0, dest_line_diff : 0, }); + var orig_maps = Object.create(null); var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig); var generator; if (orig_map) { - generator = MOZ_SourceMap.SourceMapGenerator.fromSourceMap(orig_map); + generator = MOZ_SourceMap.SourceMapGenerator.fromSourceMap(orig_map); } else { generator = new MOZ_SourceMap.SourceMapGenerator({ file : options.file, sourceRoot : options.root }); } + function addInput(rawSourceMap) { + var consumer = new MOZ_SourceMap.SourceMapConsumer(rawSourceMap); + orig_maps[consumer.file] = consumer; + } function add(source, gen_line, gen_col, orig_line, orig_col, name) { - if (orig_map) { - var info = orig_map.originalPositionFor({ + var originalMap; + if (source) { + originalMap = orig_maps[source] || orig_map; + } + else { + source = "?"; + originalMap = orig_map; + } + + if (originalMap) { + var info = originalMap.originalPositionFor({ line: orig_line, column: orig_col }); @@ -77,6 +91,7 @@ function SourceMap(options) { orig_col = info.column; name = info.name || name; } + generator.addMapping({ generated : { line: gen_line + options.dest_line_diff, column: gen_col }, original : { line: orig_line + options.orig_line_diff, column: orig_col }, @@ -85,6 +100,7 @@ function SourceMap(options) { }); } return { + addInput : addInput, add : add, get : function() { return generator }, toString : function() { return JSON.stringify(generator.toJSON()); }