summaryrefslogtreecommitdiff
path: root/src/wasm-s-parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-s-parser.h')
-rw-r--r--src/wasm-s-parser.h28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h
index 429dde417..b6270217b 100644
--- a/src/wasm-s-parser.h
+++ b/src/wasm-s-parser.h
@@ -443,6 +443,7 @@ private:
auto ex = make_unique<Export>();
ex->name = exportName;
ex->value = name;
+ ex->kind = Export::Function;
wasm.addExport(ex.release());
}
functionCounter++;
@@ -1405,15 +1406,28 @@ private:
}
void parseExport(Element& s) {
+ std::unique_ptr<Export> ex = make_unique<Export>();
if (!s[2]->dollared() && !std::isdigit(s[2]->str()[0])) {
- assert(s[2]->str() == MEMORY);
- if (!hasMemory) throw ParseException("memory exported but no memory");
- wasm.memory.exportName = s[1]->str();
- return;
+ ex->name = s[1]->str();
+ if (s[2]->str() == MEMORY) {
+ if (!hasMemory) throw ParseException("memory exported but no memory");
+ ex->value = Name::fromInt(0);
+ ex->kind = Export::Memory;
+ } else if (s[2]->str() == TABLE) {
+ ex->value = Name::fromInt(0);
+ ex->kind = Export::Table;
+ } else if (s[2]->str() == GLOBAL) {
+ ex->value = s[3]->str();
+ ex->kind = Export::Table;
+ } else {
+ WASM_UNREACHABLE();
+ }
+ } else {
+ // function
+ ex->name = s[1]->str();
+ ex->value = s[2]->str();
+ ex->kind = Export::Function;
}
- std::unique_ptr<Export> ex = make_unique<Export>();
- ex->name = s[1]->str();
- ex->value = s[2]->str();
wasm.addExport(ex.release());
}