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 /test/example/c-api-kitchen-sink.c | |
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 'test/example/c-api-kitchen-sink.c')
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index ee32725c1..4a63e931d 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -377,8 +377,38 @@ void test_relooper() { BinaryenModuleDispose(module); } +void test_binaries() { + char buffer[1024]; + size_t size; + + { // create a module and write it to binary + BinaryenModuleRef module = BinaryenModuleCreate(); + BinaryenType params[2] = { BinaryenInt32(), BinaryenInt32() }; + BinaryenFunctionTypeRef iii = BinaryenAddFunctionType(module, "iii", BinaryenInt32(), params, 2); + BinaryenExpressionRef x = BinaryenGetLocal(module, 0, BinaryenInt32()), + y = BinaryenGetLocal(module, 1, BinaryenInt32()); + BinaryenExpressionRef add = BinaryenBinary(module, BinaryenAdd(), x, y); + BinaryenFunctionRef adder = BinaryenAddFunction(module, "adder", iii, NULL, 0, add); + size = BinaryenModuleWrite(module, buffer, 1024); // write out the module + BinaryenModuleDispose(module); + } + + assert(size > 0); + assert(size < 512); // this is a tiny module + + // read the module from the binary + BinaryenModuleRef module = BinaryenModuleRead(buffer, size); + + // validate, print, and free + assert(BinaryenModuleValidate(module)); + printf("module loaded from binary form:\n"); + BinaryenModulePrint(module); + BinaryenModuleDispose(module); +} + int main() { test_core(); test_relooper(); + test_binaries(); } |