diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-05-05 18:12:00 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-05-05 18:12:00 -0700 |
commit | 07f0bad2540a6023ab7b0029b9532e1d44b41c03 (patch) | |
tree | 8bf4a713d5aad46a2ed2ff8223ff62623533d056 /src | |
parent | b253b083e1fc96434527511b68d6fd07f8d6f233 (diff) | |
download | binaryen-07f0bad2540a6023ab7b0029b9532e1d44b41c03.tar.gz binaryen-07f0bad2540a6023ab7b0029b9532e1d44b41c03.tar.bz2 binaryen-07f0bad2540a6023ab7b0029b9532e1d44b41c03.zip |
add reading and writing binaries to C API (#443)
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 21 | ||||
-rw-r--r-- | src/binaryen-c.h | 7 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index a876c998b..d46125bb3 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -21,6 +21,7 @@ #include "binaryen-c.h" #include "pass.h" #include "wasm.h" +#include "wasm-binary.h" #include "wasm-builder.h" #include "wasm-printing.h" #include "wasm-validator.h" @@ -398,6 +399,26 @@ void BinaryenModuleOptimize(BinaryenModuleRef module) { passRunner.run(); } +size_t BinaryenModuleWrite(BinaryenModuleRef module, char* output, size_t outputSize) { + Module* wasm = (Module*)module; + BufferWithRandomAccess buffer(false); + WasmBinaryWriter writer(wasm, buffer, false); + writer.write(); + size_t bytes = std::min(buffer.size(), outputSize); + std::copy_n(buffer.begin(), bytes, output); + return bytes; +} + +BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize) { + auto* wasm = new Module; + std::vector<char> buffer(false); + buffer.resize(inputSize); + std::copy_n(input, inputSize, buffer.begin()); + WasmBinaryBuilder parser(*wasm, buffer, false); + parser.read(); + return wasm; +} + // // ========== CFG / Relooper ========== // diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 9319de209..da445dfb2 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -273,6 +273,13 @@ int BinaryenModuleValidate(BinaryenModuleRef module); // Run the standard optimization passes on the module. void BinaryenModuleOptimize(BinaryenModuleRef module); +// Serialize a module into binary form. +// @return how many bytes were written. This will be less than or equal to bufferSize +size_t BinaryenModuleWrite(BinaryenModuleRef module, char* output, size_t outputSize); + +// Deserialize a module from binary form. +BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize); + // // ========== CFG / Relooper ========== // |