aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJez Ng <me@jezng.com>2013-06-09 21:26:28 -0700
committerJez Ng <me@jezng.com>2013-06-19 01:22:01 -0700
commitaf52a9aacbe6b137b231a42e745bfb8002ffca8b (patch)
treeeb1b680eb1d27f792e12a8fcb6c16296c2184c47
parent2c0dcd9aa43b630b39deafc7f8ca1426301ebc5a (diff)
Fix source map line numbering for inline scripts.
-rwxr-xr-xemcc13
-rwxr-xr-xtools/sourcemapper.js11
2 files changed, 16 insertions, 8 deletions
diff --git a/emcc b/emcc
index 8dc7652a..5b6d00dc 100755
--- a/emcc
+++ b/emcc
@@ -1585,9 +1585,9 @@ try:
else:
logging.debug('did not see memory initialization')
- def generate_source_maps(filename, map_file_base_name):
+ def generate_source_map(filename, map_file_base_name, offset=0):
jsrun.run_js(shared.path_from_root('tools', 'sourcemapper.js'),
- shared.NODE_JS, [filename, os.getcwd(), map_file_base_name])
+ shared.NODE_JS, [filename, os.getcwd(), map_file_base_name, str(offset)])
# If we were asked to also generate HTML, do that
if final_suffix == 'html':
@@ -1595,7 +1595,12 @@ try:
shell = open(shell_path).read()
html = open(target, 'w')
if not Compression.on:
- if keep_llvm_debug and keep_js_debug: generate_source_maps(final, target)
+ if keep_llvm_debug and keep_js_debug:
+ match = re.match('.*?<script[^>]*>{{{ SCRIPT_CODE }}}</script>', shell,
+ re.DOTALL)
+ if match is None:
+ raise RuntimeError('Could not find script insertion point')
+ generate_source_map(final, target, match.group().count('\n'))
html.write(shell.replace('{{{ SCRIPT_CODE }}}', open(final).read()))
else:
# Compress the main code
@@ -1666,7 +1671,7 @@ try:
from tools.split import split_javascript_file
split_javascript_file(final, unsuffixed(target), split_js_file)
else:
- if keep_llvm_debug and keep_js_debug: generate_source_maps(final, target)
+ if keep_llvm_debug and keep_js_debug: generate_source_map(final, target)
# copy final JS to output
shutil.move(final, target)
diff --git a/tools/sourcemapper.js b/tools/sourcemapper.js
index fce9251f..c7021a0f 100755
--- a/tools/sourcemapper.js
+++ b/tools/sourcemapper.js
@@ -63,7 +63,7 @@ function extractComments(source, commentHandler) {
}
}
-function generateMap(fileName, sourceRoot, mapFileBaseName) {
+function generateMap(fileName, sourceRoot, mapFileBaseName, generatedLineOffset) {
var fs = require('fs');
var path = require('path');
var SourceMapGenerator = require('source-map').SourceMapGenerator;
@@ -91,7 +91,7 @@ function generateMap(fileName, sourceRoot, mapFileBaseName) {
}
generator.addMapping({
- generated: { line: generatedLineNumber, column: 0 },
+ generated: { line: generatedLineNumber + generatedLineOffset, column: 0 },
original: { line: originalLineNumber, column: 0 },
source: originalFileName
});
@@ -108,11 +108,14 @@ function generateMap(fileName, sourceRoot, mapFileBaseName) {
if (require.main === module) {
if (process.argv.length < 3) {
console.log('Usage: ./sourcemapper.js <filename> <source root (default: .)> ' +
- '<map file basename (default: filename)>');
+ '<map file basename (default: filename)>' +
+ '<generated line offset (default: 0)>');
process.exit(1);
} else {
var sourceRoot = process.argv.length > 3 ? process.argv[3] : ".";
var mapFileBaseName = process.argv.length > 4 ? process.argv[4] : process.argv[2];
- generateMap(process.argv[2], sourceRoot, mapFileBaseName);
+ var generatedLineOffset = process.argv.length > 5 ?
+ parseInt(process.argv[5], 10) : 0;
+ generateMap(process.argv[2], sourceRoot, mapFileBaseName, generatedLineOffset);
}
}