diff options
| author | bors <bors@rust-lang.org> | 2018-02-07 17:51:52 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-02-07 17:51:52 +0000 |
| commit | 29c8276cee4a0eab7e0634ff25c6b47bd9f87c6c (patch) | |
| tree | aabb7278f081c3c90cea9e0337779739805408a9 /src/librustc_binaryen/BinaryenWrapper.cpp | |
| parent | fee39ba8bd98f5b93c60de51336830fa7f0b9d97 (diff) | |
| parent | 732c83007c9069c6dd33a5dc98e62337dca014bd (diff) | |
| download | rust-29c8276cee4a0eab7e0634ff25c6b47bd9f87c6c.tar.gz rust-29c8276cee4a0eab7e0634ff25c6b47bd9f87c6c.zip | |
Auto merge of #48053 - Manishearth:rollup, r=Manishearth
Rollup of 10 pull requests - Successful merges: #47613, #47631, #47810, #47883, #47922, #47944, #48014, #48018, #48020, #48028 - Failed merges:
Diffstat (limited to 'src/librustc_binaryen/BinaryenWrapper.cpp')
| -rw-r--r-- | src/librustc_binaryen/BinaryenWrapper.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/librustc_binaryen/BinaryenWrapper.cpp b/src/librustc_binaryen/BinaryenWrapper.cpp index d1095a7819d..55f11665f6d 100644 --- a/src/librustc_binaryen/BinaryenWrapper.cpp +++ b/src/librustc_binaryen/BinaryenWrapper.cpp @@ -14,6 +14,7 @@ #include <stdint.h> #include <string> +#include <sstream> #include <stdlib.h> #include "s2wasm.h" @@ -24,6 +25,7 @@ using namespace wasm; struct BinaryenRustModule { BufferWithRandomAccess buffer; + std::string sourceMapJSON; }; struct BinaryenRustModuleOptions { @@ -36,6 +38,7 @@ struct BinaryenRustModuleOptions { bool ignoreUnknownSymbols; bool debugInfo; std::string startFunction; + std::string sourceMapUrl; BinaryenRustModuleOptions() : globalBase(0), @@ -46,7 +49,8 @@ struct BinaryenRustModuleOptions { importMemory(false), ignoreUnknownSymbols(false), debugInfo(false), - startFunction("") + startFunction(""), + sourceMapUrl("") {} }; @@ -74,6 +78,12 @@ BinaryenRustModuleOptionsSetStart(BinaryenRustModuleOptions *options, } extern "C" void +BinaryenRustModuleOptionsSetSourceMapUrl(BinaryenRustModuleOptions *options, + char *sourceMapUrl) { + options->sourceMapUrl = sourceMapUrl; +} + +extern "C" void BinaryenRustModuleOptionsSetStackAllocation(BinaryenRustModuleOptions *options, uint64_t stack) { options->stackAllocation = stack; @@ -106,12 +116,20 @@ BinaryenRustModuleCreate(const BinaryenRustModuleOptions *options, { WasmBinaryWriter writer(&linker.getOutput().wasm, ret->buffer, options->debug); writer.setNamesSection(options->debugInfo); - // FIXME: support source maps? - // writer.setSourceMap(sourceMapStream.get(), sourceMapUrl); + + std::unique_ptr<std::ostringstream> sourceMapStream = nullptr; + { + sourceMapStream = make_unique<std::ostringstream>(); + writer.setSourceMap(sourceMapStream.get(), options->sourceMapUrl); + } // FIXME: support symbol maps? // writer.setSymbolMap(symbolMap); writer.write(); + + if (sourceMapStream) { + ret->sourceMapJSON = sourceMapStream->str(); + } } return ret.release(); } @@ -126,6 +144,16 @@ BinaryenRustModuleLen(const BinaryenRustModule *M) { return M->buffer.size(); } +extern "C" const char* +BinaryenRustModuleSourceMapPtr(const BinaryenRustModule *M) { + return M->sourceMapJSON.data(); +} + +extern "C" size_t +BinaryenRustModuleSourceMapLen(const BinaryenRustModule *M) { + return M->sourceMapJSON.length(); +} + extern "C" void BinaryenRustModuleFree(BinaryenRustModule *M) { delete M; |
