diff options
author | Lingming Zhang <33396195+mobsceneZ@users.noreply.github.com> | 2024-02-29 04:37:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-28 12:37:12 -0800 |
commit | 9162740dc8f9ac0b08f7e80c0602b6d614d8dc69 (patch) | |
tree | 8004fcb133dc0c5118aee3aaa73ffb5a65dc9897 /src | |
parent | baefd93d0a00cd33efecfd85e1a4d325457287f1 (diff) | |
download | binaryen-9162740dc8f9ac0b08f7e80c0602b6d614d8dc69.tar.gz binaryen-9162740dc8f9ac0b08f7e80c0602b6d614d8dc69.tar.bz2 binaryen-9162740dc8f9ac0b08f7e80c0602b6d614d8dc69.zip |
C API: Support adding data segments individually (#6346)
Fixes #6314.
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 19 | ||||
-rw-r--r-- | src/binaryen-c.h | 7 |
2 files changed, 26 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 8cbb969d6..f9a778a68 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -5525,6 +5525,25 @@ void BinaryenCopyMemorySegmentData(BinaryenModuleRef module, } std::copy(segment->data.cbegin(), segment->data.cend(), buffer); } +void BinaryenAddDataSegment(BinaryenModuleRef module, + const char* segmentName, + const char* memoryName, + bool segmentPassive, + BinaryenExpressionRef segmentOffset, + const char* segmentData, + BinaryenIndex segmentSize) { + auto* wasm = (Module*)module; + auto name = + segmentName ? Name(segmentName) : Name::fromInt(wasm->dataSegments.size()); + auto curr = Builder::makeDataSegment(name, + memoryName ? memoryName : "0", + segmentPassive, + (Expression*)segmentOffset, + segmentData, + segmentSize); + curr->hasExplicitName = segmentName ? true : false; + wasm->addDataSegment(std::move(curr)); +} // Start function. One per module diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 07a81a4c8..4ead70ea4 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -2952,6 +2952,13 @@ BINARYEN_API bool BinaryenGetMemorySegmentPassive(BinaryenModuleRef module, BINARYEN_API void BinaryenCopyMemorySegmentData(BinaryenModuleRef module, const char* segmentName, char* buffer); +BINARYEN_API void BinaryenAddDataSegment(BinaryenModuleRef module, + const char* segmentName, + const char* memoryName, + bool segmentPassive, + BinaryenExpressionRef segmentOffset, + const char* segmentData, + BinaryenIndex segmentSize); // Start function. One per module |