summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.cpp21
-rw-r--r--src/binaryen-c.h7
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 ==========
//