summaryrefslogtreecommitdiff
path: root/src/wasm-s-parser.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-08-18 11:15:39 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-09-07 09:55:01 -0700
commit2e2e0241a10c0eccb89365c1b50217d6d0d3a386 (patch)
tree4f19b9cc857065ffd30e956f787af546c73cccec /src/wasm-s-parser.h
parente0809680bb82ecfc950aef97537827442b559fcf (diff)
downloadbinaryen-2e2e0241a10c0eccb89365c1b50217d6d0d3a386.tar.gz
binaryen-2e2e0241a10c0eccb89365c1b50217d6d0d3a386.tar.bz2
binaryen-2e2e0241a10c0eccb89365c1b50217d6d0d3a386.zip
export kinds
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());
}