summaryrefslogtreecommitdiff
path: root/src/wasm-builder.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-builder.h')
-rw-r--r--src/wasm-builder.h24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/wasm-builder.h b/src/wasm-builder.h
index 69e7a7c6a..cc3b99138 100644
--- a/src/wasm-builder.h
+++ b/src/wasm-builder.h
@@ -664,20 +664,32 @@ public:
ret->value = value;
return ret;
}
- MemorySize* makeMemorySize(Name memoryName) {
- auto memory = wasm.getMemory(memoryName);
+
+ // Some APIs can be told if the memory is 32 or 64-bit. If they are not
+ // informed of that, then the memory they refer to is looked up and that
+ // information fetched from there.
+ enum MemoryInfo { Memory32, Memory64, Unspecified };
+
+ bool isMemory64(Name memoryName, MemoryInfo info) {
+ return info == MemoryInfo::Memory64 || (info == MemoryInfo::Unspecified &&
+ wasm.getMemory(memoryName)->is64());
+ }
+
+ MemorySize* makeMemorySize(Name memoryName,
+ MemoryInfo info = MemoryInfo::Unspecified) {
auto* ret = wasm.allocator.alloc<MemorySize>();
- if (memory->is64()) {
+ if (isMemory64(memoryName, info)) {
ret->make64();
}
ret->memory = memoryName;
ret->finalize();
return ret;
}
- MemoryGrow* makeMemoryGrow(Expression* delta, Name memoryName) {
- auto memory = wasm.getMemory(memoryName);
+ MemoryGrow* makeMemoryGrow(Expression* delta,
+ Name memoryName,
+ MemoryInfo info = MemoryInfo::Unspecified) {
auto* ret = wasm.allocator.alloc<MemoryGrow>();
- if (memory->is64()) {
+ if (isMemory64(memoryName, info)) {
ret->make64();
}
ret->delta = delta;