Skip to content

Commit 8108ce2

Browse files
authored
[NFC] Simplify binary reading logic for memories (#4987)
Similar to #4969 but for memories.
1 parent 97fd631 commit 8108ce2

File tree

2 files changed

+7
-29
lines changed

2 files changed

+7
-29
lines changed

src/wasm-binary.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,12 +1528,6 @@ class WasmBinaryBuilder {
15281528
// names
15291529
std::vector<std::unique_ptr<ElementSegment>> elementSegments;
15301530

1531-
// we store memories here after being read from binary, before we know their
1532-
// names
1533-
std::vector<std::unique_ptr<Memory>> memories;
1534-
// we store memory imports here before wasm.addMemoryImport after we know
1535-
// their names
1536-
std::vector<Memory*> memoryImports;
15371531
// at index i we have all references to the memory i
15381532
std::map<Index, std::vector<wasm::Name*>> memoryRefs;
15391533

src/wasm/wasm-binary.cpp

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2033,7 +2033,7 @@ void WasmBinaryBuilder::readMemories() {
20332033
memory->shared,
20342034
memory->indexType,
20352035
Memory::kUnlimitedSize);
2036-
memories.push_back(std::move(memory));
2036+
wasm.addMemory(std::move(memory));
20372037
}
20382038
}
20392039

@@ -2247,11 +2247,8 @@ Name WasmBinaryBuilder::getTagName(Index index) {
22472247
}
22482248

22492249
Memory* WasmBinaryBuilder::getMemory(Index index) {
2250-
Index numMemoryImports = memoryImports.size();
2251-
if (index < numMemoryImports) {
2252-
return memoryImports[index];
2253-
} else if (index - numMemoryImports < memories.size()) {
2254-
return memories[index - numMemoryImports].get();
2250+
if (index < wasm.memories.size()) {
2251+
return wasm.memories[index].get();
22552252
}
22562253
throwError("Memory index out of range.");
22572254
}
@@ -2347,7 +2344,6 @@ void WasmBinaryBuilder::readImports() {
23472344
memory->shared,
23482345
memory->indexType,
23492346
Memory::kUnlimitedSize);
2350-
memoryImports.push_back(memory.get());
23512347
wasm.addMemory(std::move(memory));
23522348
break;
23532349
}
@@ -2984,9 +2980,6 @@ void WasmBinaryBuilder::processNames() {
29842980
for (auto& segment : elementSegments) {
29852981
wasm.addElementSegment(std::move(segment));
29862982
}
2987-
for (auto& memory : memories) {
2988-
wasm.addMemory(std::move(memory));
2989-
}
29902983
for (auto& segment : dataSegments) {
29912984
wasm.addDataSegment(std::move(segment));
29922985
}
@@ -3392,11 +3385,8 @@ void WasmBinaryBuilder::readNames(size_t payloadLen) {
33923385
auto index = getU32LEB();
33933386
auto rawName = getInlineString();
33943387
auto name = processor.process(rawName);
3395-
auto numMemoryImports = memoryImports.size();
3396-
if (index < numMemoryImports) {
3397-
memoryImports[index]->setExplicitName(name);
3398-
} else if (index - numMemoryImports < memories.size()) {
3399-
memories[index - numMemoryImports]->setExplicitName(name);
3388+
if (index < wasm.memories.size()) {
3389+
wasm.memories[index]->setExplicitName(name);
34003390
} else {
34013391
std::cerr << "warning: memory index out of bounds in name section, "
34023392
"memory subsection: "
@@ -4379,16 +4369,10 @@ Index WasmBinaryBuilder::readMemoryAccess(Address& alignment, Address& offset) {
43794369
if (hasMemIdx) {
43804370
memIdx = getU32LEB();
43814371
}
4382-
Memory* memory = nullptr;
4383-
auto numMemoryImports = memoryImports.size();
4384-
if (memIdx < numMemoryImports) {
4385-
memory = memoryImports[memIdx];
4386-
} else if (memIdx - numMemoryImports < memories.size()) {
4387-
memory = memories[memIdx - numMemoryImports].get();
4388-
}
4389-
if (!memory) {
4372+
if (memIdx >= wasm.memories.size()) {
43904373
throwError("Memory index out of range while reading memory alignment.");
43914374
}
4375+
auto* memory = wasm.memories[memIdx].get();
43924376
offset = memory->indexType == Type::i32 ? getU32LEB() : getU64LEB();
43934377

43944378
return memIdx;

0 commit comments

Comments
 (0)