diff options
Diffstat (limited to 'src/parser/context-defs.cpp')
-rw-r--r-- | src/parser/context-defs.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/parser/context-defs.cpp b/src/parser/context-defs.cpp index 76e61d4fb..e5c598b6b 100644 --- a/src/parser/context-defs.cpp +++ b/src/parser/context-defs.cpp @@ -72,6 +72,36 @@ Result<> ParseDefsCtx::addGlobal(Name, return Ok{}; } +Result<> ParseDefsCtx::addImplicitElems(Type, + std::vector<Expression*>&& elems) { + auto& e = wasm.elementSegments[implicitElemIndices.at(index)]; + e->data = std::move(elems); + return Ok{}; +} + +Result<> ParseDefsCtx::addElem(Name, + Name* table, + std::optional<Expression*> offset, + std::vector<Expression*>&& elems, + Index pos) { + auto& e = wasm.elementSegments[index]; + if (offset) { + e->offset = *offset; + if (table) { + e->table = *table; + } else if (wasm.tables.size() > 0) { + e->table = wasm.tables[0]->name; + } else { + return in.err(pos, "active element segment with no table"); + } + } else { + e->offset = nullptr; + e->table = Name(); + } + e->data = std::move(elems); + return Ok{}; +} + Result<> ParseDefsCtx::addData( Name, Name* mem, std::optional<ExprT> offset, DataStringT, Index pos) { auto& d = wasm.dataSegments[index]; @@ -83,7 +113,7 @@ Result<> ParseDefsCtx::addData( } else if (wasm.memories.size() > 0) { d->memory = wasm.memories[0]->name; } else { - return in.err(pos, "active segment with no memory"); + return in.err(pos, "active data segment with no memory"); } } else { d->isPassive = true; |