summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLingming Zhang <33396195+mobsceneZ@users.noreply.github.com>2024-02-29 04:37:12 +0800
committerGitHub <noreply@github.com>2024-02-28 12:37:12 -0800
commit9162740dc8f9ac0b08f7e80c0602b6d614d8dc69 (patch)
tree8004fcb133dc0c5118aee3aaa73ffb5a65dc9897 /src
parentbaefd93d0a00cd33efecfd85e1a4d325457287f1 (diff)
downloadbinaryen-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.cpp19
-rw-r--r--src/binaryen-c.h7
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