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