summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/binaryen-c.cpp19
-rw-r--r--src/binaryen-c.h7
-rw-r--r--test/example/c-api-kitchen-sink.c8
-rw-r--r--test/example/c-api-kitchen-sink.txt2
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")