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.h19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h
index dcf9d2540..61d29ada1 100644
--- a/src/wasm-interpreter.h
+++ b/src/wasm-interpreter.h
@@ -2222,7 +2222,7 @@ public:
WASM_UNREACHABLE("unimp");
}
- virtual void tableStore(Name tableName, Address addr, Name entry) {
+ virtual void tableStore(Name tableName, Address addr, Literal entry) {
WASM_UNREACHABLE("unimp");
}
};
@@ -2309,21 +2309,22 @@ private:
std::unordered_set<size_t> droppedSegments;
void initializeTableContents() {
- for (auto& segment : wasm.elementSegments) {
- if (segment->table.isNull()) {
- continue;
- }
-
+ ModuleUtils::iterActiveElementSegments(wasm, [&](ElementSegment* segment) {
Address offset =
(uint32_t)InitializerExpressionRunner<GlobalManager>(globals, maxDepth)
.visit(segment->offset)
.getSingleValue()
.geti32();
- for (size_t i = 0; i != segment->data.size(); ++i) {
+
+ Function dummyFunc;
+ FunctionScope dummyScope(&dummyFunc, {});
+ RuntimeExpressionRunner runner(*this, dummyScope, maxDepth);
+ for (Index i = 0; i < segment->data.size(); ++i) {
+ Flow ret = runner.visit(segment->data[i]);
externalInterface->tableStore(
- segment->table, offset + i, segment->data[i]);
+ segment->table, offset + i, ret.getSingleValue());
}
- }
+ });
}
void initializeMemoryContents() {