diff options
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 ========== // |