diff options
-rwxr-xr-x | emcc | 13 | ||||
-rwxr-xr-x | tools/sourcemapper.js | 11 |
2 files changed, 16 insertions, 8 deletions
@@ -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); } } |