summaryrefslogtreecommitdiff
path: root/src/parser/context-defs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/context-defs.cpp')
-rw-r--r--src/parser/context-defs.cpp32
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;