summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2022-08-29 09:44:46 -0700
committerGitHub <noreply@github.com>2022-08-29 09:44:46 -0700
commit8108ce28e66f1002932f6e5dc9dd4f23c8b8a9f3 (patch)
tree6a926f435bfb7c5f776a349bb357e1b4f46f1625
parent97fd63154cf8be9e12f1919c40eb6bc949c4c704 (diff)
downloadbinaryen-8108ce28e66f1002932f6e5dc9dd4f23c8b8a9f3.tar.gz
binaryen-8108ce28e66f1002932f6e5dc9dd4f23c8b8a9f3.tar.bz2
binaryen-8108ce28e66f1002932f6e5dc9dd4f23c8b8a9f3.zip
[NFC] Simplify binary reading logic for memories (#4987)
Similar to #4969 but for memories.
-rw-r--r--src/wasm-binary.h6
-rw-r--r--src/wasm/wasm-binary.cpp30
2 files changed, 7 insertions, 29 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index 4a4cab13f..e150915a0 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -1528,12 +1528,6 @@ public:
// names
std::vector<std::unique_ptr<ElementSegment>> elementSegments;
- // we store memories here after being read from binary, before we know their
- // names
- std::vector<std::unique_ptr<Memory>> memories;
- // we store memory imports here before wasm.addMemoryImport after we know
- // their names
- std::vector<Memory*> memoryImports;
// at index i we have all references to the memory i
std::map<Index, std::vector<wasm::Name*>> memoryRefs;
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp
index 1ea931612..df99fabb9 100644
--- a/src/wasm/wasm-binary.cpp
+++ b/src/wasm/wasm-binary.cpp
@@ -2033,7 +2033,7 @@ void WasmBinaryBuilder::readMemories() {
memory->shared,
memory->indexType,
Memory::kUnlimitedSize);
- memories.push_back(std::move(memory));
+ wasm.addMemory(std::move(memory));
}
}
@@ -2247,11 +2247,8 @@ Name WasmBinaryBuilder::getTagName(Index index) {
}
Memory* WasmBinaryBuilder::getMemory(Index index) {
- Index numMemoryImports = memoryImports.size();
- if (index < numMemoryImports) {
- return memoryImports[index];
- } else if (index - numMemoryImports < memories.size()) {
- return memories[index - numMemoryImports].get();
+ if (index < wasm.memories.size()) {
+ return wasm.memories[index].get();
}
throwError("Memory index out of range.");
}
@@ -2347,7 +2344,6 @@ void WasmBinaryBuilder::readImports() {
memory->shared,
memory->indexType,
Memory::kUnlimitedSize);
- memoryImports.push_back(memory.get());
wasm.addMemory(std::move(memory));
break;
}
@@ -2984,9 +2980,6 @@ void WasmBinaryBuilder::processNames() {
for (auto& segment : elementSegments) {
wasm.addElementSegment(std::move(segment));
}
- for (auto& memory : memories) {
- wasm.addMemory(std::move(memory));
- }
for (auto& segment : dataSegments) {
wasm.addDataSegment(std::move(segment));
}
@@ -3392,11 +3385,8 @@ void WasmBinaryBuilder::readNames(size_t payloadLen) {
auto index = getU32LEB();
auto rawName = getInlineString();
auto name = processor.process(rawName);
- auto numMemoryImports = memoryImports.size();
- if (index < numMemoryImports) {
- memoryImports[index]->setExplicitName(name);
- } else if (index - numMemoryImports < memories.size()) {
- memories[index - numMemoryImports]->setExplicitName(name);
+ if (index < wasm.memories.size()) {
+ wasm.memories[index]->setExplicitName(name);
} else {
std::cerr << "warning: memory index out of bounds in name section, "
"memory subsection: "
@@ -4379,16 +4369,10 @@ Index WasmBinaryBuilder::readMemoryAccess(Address& alignment, Address& offset) {
if (hasMemIdx) {
memIdx = getU32LEB();
}
- Memory* memory = nullptr;
- auto numMemoryImports = memoryImports.size();
- if (memIdx < numMemoryImports) {
- memory = memoryImports[memIdx];
- } else if (memIdx - numMemoryImports < memories.size()) {
- memory = memories[memIdx - numMemoryImports].get();
- }
- if (!memory) {
+ if (memIdx >= wasm.memories.size()) {
throwError("Memory index out of range while reading memory alignment.");
}
+ auto* memory = wasm.memories[memIdx].get();
offset = memory->indexType == Type::i32 ? getU32LEB() : getU64LEB();
return memIdx;