diff options
Diffstat (limited to 'src/wasm-builder.h')
-rw-r--r-- | src/wasm-builder.h | 24 |
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; |