summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJackson Gardner <eyebrowsoffire@gmail.com>2022-05-24 09:59:47 -0700
committerGitHub <noreply@github.com>2022-05-24 09:59:47 -0700
commit721e8ffb975a6e68a56287cd46ecc19e107211c6 (patch)
tree021219639b5c4b80c235cce42c79902c40fa4794 /src
parenta78d0e44cbcc72682ab9c45dec76d4b1c52588c9 (diff)
downloadbinaryen-721e8ffb975a6e68a56287cd46ecc19e107211c6.tar.gz
binaryen-721e8ffb975a6e68a56287cd46ecc19e107211c6.tar.bz2
binaryen-721e8ffb975a6e68a56287cd46ecc19e107211c6.zip
Add C and JS API functions for accessing memory info (#4682)
Based on #3573 plus minor fixes
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.cpp31
-rw-r--r--src/binaryen-c.h9
-rw-r--r--src/js/binaryen.js-post.js19
3 files changed, 57 insertions, 2 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 709672aa4..44f323339 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -3812,6 +3812,37 @@ uint32_t BinaryenGetMemorySegmentByteOffset(BinaryenModuleRef module,
Fatal() << "non-constant offsets aren't supported yet";
return 0;
}
+bool BinaryenHasMemory(BinaryenModuleRef module) {
+ return ((Module*)module)->memory.exists;
+}
+BinaryenIndex BinaryenMemoryGetInitial(BinaryenModuleRef module) {
+ return ((Module*)module)->memory.initial;
+}
+bool BinaryenMemoryHasMax(BinaryenModuleRef module) {
+ return ((Module*)module)->memory.hasMax();
+}
+BinaryenIndex BinaryenMemoryGetMax(BinaryenModuleRef module) {
+ return ((Module*)module)->memory.max;
+}
+const char* BinaryenMemoryImportGetModule(BinaryenModuleRef module) {
+ auto& memory = ((Module*)module)->memory;
+ if (memory.imported()) {
+ return memory.module.c_str();
+ } else {
+ return "";
+ }
+}
+const char* BinaryenMemoryImportGetBase(BinaryenModuleRef module) {
+ auto& memory = ((Module*)module)->memory;
+ if (memory.imported()) {
+ return memory.base.c_str();
+ } else {
+ return "";
+ }
+}
+bool BinaryenMemoryIsShared(BinaryenModuleRef module) {
+ return ((Module*)module)->memory.shared;
+}
size_t BinaryenGetMemorySegmentByteLength(BinaryenModuleRef module,
BinaryenIndex id) {
const auto& segments = ((Module*)module)->memory.segments;
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index ed0f01f1c..715b08880 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -2285,6 +2285,15 @@ BINARYEN_API void BinaryenSetMemory(BinaryenModuleRef module,
BinaryenIndex numSegments,
bool shared);
+BINARYEN_API bool BinaryenHasMemory(BinaryenModuleRef module);
+BINARYEN_API BinaryenIndex BinaryenMemoryGetInitial(BinaryenModuleRef module);
+BINARYEN_API bool BinaryenMemoryHasMax(BinaryenModuleRef module);
+BINARYEN_API BinaryenIndex BinaryenMemoryGetMax(BinaryenModuleRef module);
+BINARYEN_API const char*
+BinaryenMemoryImportGetModule(BinaryenModuleRef module);
+BINARYEN_API const char* BinaryenMemoryImportGetBase(BinaryenModuleRef module);
+BINARYEN_API bool BinaryenMemoryIsShared(BinaryenModuleRef module);
+
// Memory segments. Query utilities.
BINARYEN_API uint32_t BinaryenGetNumMemorySegments(BinaryenModuleRef module);
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 28f5b6258..b6ea7dee1 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -2500,9 +2500,24 @@ function wrapModule(module, self = {}) {
);
});
};
+ self['hasMemory'] = function() {
+ return Boolean(Module['_BinaryenHasMemory'](module));
+ };
+ self['getMemoryInfo'] = function() {
+ var memoryInfo = {
+ 'module': UTF8ToString(Module['_BinaryenMemoryImportGetModule'](module)),
+ 'base': UTF8ToString(Module['_BinaryenMemoryImportGetBase'](module)),
+ 'initial': Module['_BinaryenMemoryGetInitial'](module),
+ 'shared': Boolean(Module['_BinaryenMemoryIsShared'](module))
+ };
+ if (Module['_BinaryenMemoryHasMax'](module)) {
+ memoryInfo['max'] = Module['_BinaryenMemoryGetMax'](module);
+ }
+ return memoryInfo;
+ };
self['getNumMemorySegments'] = function() {
return Module['_BinaryenGetNumMemorySegments'](module);
- }
+ };
self['getMemorySegmentInfoByIndex'] = function(id) {
return {
'offset': Module['_BinaryenGetMemorySegmentByteOffset'](module, id),
@@ -2517,7 +2532,7 @@ function wrapModule(module, self = {}) {
})(),
'passive': Boolean(Module['_BinaryenGetMemorySegmentPassive'](module, id))
};
- }
+ };
self['setStart'] = function(start) {
return Module['_BinaryenSetStart'](module, start);
};