diff options
author | Surma <surma@surma.dev> | 2024-03-07 17:39:29 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-07 17:39:29 +0000 |
commit | ab9e3f75fcaae429e236bd50641e0d69e63cfdc2 (patch) | |
tree | 7ba8f348a612e4cf629b5b5e51486d5eee751fb7 /src | |
parent | 920cbc32603fdb8eff8f50283a1788812863f0d3 (diff) | |
download | binaryen-ab9e3f75fcaae429e236bd50641e0d69e63cfdc2.tar.gz binaryen-ab9e3f75fcaae429e236bd50641e0d69e63cfdc2.tar.bz2 binaryen-ab9e3f75fcaae429e236bd50641e0d69e63cfdc2.zip |
Expose features option in C API binary reading (#6380)
This allows reading a module that requires a particular
feature set. The old API assumed only MVP features.
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 11 | ||||
-rw-r--r-- | src/binaryen-c.h | 6 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index f9a778a68..29e0597d7 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -5851,14 +5851,15 @@ char* BinaryenModuleAllocateAndWriteStackIR(BinaryenModuleRef module, return output; } -BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize) { +BinaryenModuleRef BinaryenModuleReadWithFeatures(char* input, + size_t inputSize, + BinaryenFeatures features) { auto* wasm = new Module; std::vector<char> buffer(false); buffer.resize(inputSize); std::copy_n(input, inputSize, buffer.begin()); try { - // TODO: allow providing features in the C API - WasmBinaryReader parser(*wasm, FeatureSet::MVP, buffer); + WasmBinaryReader parser(*wasm, features, buffer); parser.read(); } catch (ParseException& p) { p.dump(std::cerr); @@ -5867,6 +5868,10 @@ BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize) { return wasm; } +BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize) { + return BinaryenModuleReadWithFeatures(input, inputSize, BinaryenFeatureMVP()); +} + void BinaryenModuleInterpret(BinaryenModuleRef module) { ShellExternalInterface interface; ModuleRunner instance(*(Module*)module, &interface, {}); diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 4ead70ea4..42bd45915 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -3175,10 +3175,14 @@ BINARYEN_API char* BinaryenModuleAllocateAndWriteText(BinaryenModuleRef module); BINARYEN_API char* BinaryenModuleAllocateAndWriteStackIR(BinaryenModuleRef module, bool optimize); -// Deserialize a module from binary form. +// Deserialize a module from binary form, assuming the MVP feature set. BINARYEN_API BinaryenModuleRef BinaryenModuleRead(char* input, size_t inputSize); +// Deserialize a module from binary form, enabling the given feature set. +BINARYEN_API BinaryenModuleRef BinaryenModuleReadWithFeatures( + char* input, size_t inputSize, BinaryenFeatures featureSet); + // Execute a module in the Binaryen interpreter. This will create an instance of // the module, run it in the interpreter - which means running the start method // - and then destroying the instance. |