summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r--src/wasm-interpreter.h27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index 5032b7277..ac095e0c0 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -2309,20 +2309,19 @@ private:
std::unordered_set<size_t> droppedSegments;
void initializeTableContents() {
- for (auto& table : wasm.tables) {
- for (auto& segment : table->segments) {
- Address offset = (uint32_t)InitializerExpressionRunner<GlobalManager>(
- globals, maxDepth)
- .visit(segment.offset)
- .getSingleValue()
- .geti32();
- if (offset + segment.data.size() > table->initial) {
- externalInterface->trap("invalid offset when initializing table");
- }
- for (size_t i = 0; i != segment.data.size(); ++i) {
- externalInterface->tableStore(
- table->name, offset + i, segment.data[i]);
- }
+ for (auto& segment : wasm.elementSegments) {
+ if (segment->table.isNull()) {
+ continue;
+ }
+
+ Address offset =
+ (uint32_t)InitializerExpressionRunner<GlobalManager>(globals, maxDepth)
+ .visit(segment->offset)
+ .getSingleValue()
+ .geti32();
+ for (size_t i = 0; i != segment->data.size(); ++i) {
+ externalInterface->tableStore(
+ segment->table, offset + i, segment->data[i]);
}
}
}