summaryrefslogtreecommitdiff
path: root/src/shell-interface.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/shell-interface.h')
-rw-r--r--src/shell-interface.h27
1 files changed, 4 insertions, 23 deletions
diff --git a/src/shell-interface.h b/src/shell-interface.h
index 6c6961541..4cb5f5349 100644
--- a/src/shell-interface.h
+++ b/src/shell-interface.h
@@ -95,30 +95,7 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface {
void init(Module& wasm, ModuleInstance& instance) override {
memory.resize(wasm.memory.initial * wasm::Memory::kPageSize);
- // apply memory segments
- for (auto& segment : wasm.memory.segments) {
- if (segment.isPassive) {
- continue;
- }
- Address offset = (uint32_t)ConstantExpressionRunner<TrivialGlobalManager>(instance.globals).visit(segment.offset).value.geti32();
- if (offset + segment.data.size() > wasm.memory.initial * wasm::Memory::kPageSize) {
- trap("invalid offset when initializing memory");
- }
- for (size_t i = 0; i != segment.data.size(); ++i) {
- memory.set(offset + i, segment.data[i]);
- }
- }
-
table.resize(wasm.table.initial);
- for (auto& segment : wasm.table.segments) {
- Address offset = (uint32_t)ConstantExpressionRunner<TrivialGlobalManager>(instance.globals).visit(segment.offset).value.geti32();
- if (offset + segment.data.size() > wasm.table.initial) {
- trap("invalid offset when initializing table");
- }
- for (size_t i = 0; i != segment.data.size(); ++i) {
- table[offset + i] = segment.data[i];
- }
- }
}
void importGlobals(std::map<Name, Literal>& globals, Module& wasm) override {
@@ -198,6 +175,10 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface {
memory.set<std::array<uint8_t, 16>>(addr, value);
}
+ void tableStore(Address addr, Name entry) override {
+ table[addr] = entry;
+ }
+
void growMemory(Address /*oldSize*/, Address newSize) override {
memory.resize(newSize);
}