diff options
-rw-r--r-- | src/binaryen-c.cpp | 19 | ||||
-rw-r--r-- | src/binaryen-c.h | 7 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.c | 8 | ||||
-rw-r--r-- | test/example/c-api-kitchen-sink.txt | 2 |
4 files changed, 36 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 diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c index d5681097c..bf80833a0 100644 --- a/test/example/c-api-kitchen-sink.c +++ b/test/example/c-api-kitchen-sink.c @@ -549,6 +549,14 @@ void test_core() { 1, 0, "0"); + BinaryenAddDataSegment(module, NULL, NULL, true, NULL, "data segment 2", 14); + BinaryenAddDataSegment(module, + "seg", + "0", + false, + BinaryenConst(module, BinaryenLiteralInt32(0)), + "data segment 3", + 14); BinaryenExpressionRef valueList[] = { // Unary diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index 850028a07..469267a4d 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -91,6 +91,8 @@ BinaryenFeatureAll: 131071 (memory $0 1 256 shared) (data $0 (i32.const 10) "hello, world") (data $1 "I am passive") + (data $2 "data segment 2") + (data $seg (i32.const 0) "data segment 3") (table $tab 0 100 funcref) (table $0 1 1 funcref) (elem $0 (table $0) (i32.const 0) func $"kitchen()sinker") |