diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-s-parser.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 005483420..fe84b0098 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -21,6 +21,7 @@ IString MODULE("module"), RESULT("result"), MEMORY("memory"), EXPORT("export"), + IMPORT("import"), TABLE("table"), LOCAL("local"), TYPE("type"), @@ -194,6 +195,7 @@ private: if (id == FUNC) return parseFunction(curr); if (id == MEMORY) return parseMemory(curr); if (id == EXPORT) return parseExport(curr); + if (id == IMPORT) return parseImport(curr); if (id == TABLE) return parseTable(curr); if (id == TYPE) return parseType(curr); std::cerr << "bad module element " << id.str << '\n'; @@ -612,6 +614,23 @@ private: wasm.exports.push_back(ex); } + void parseImport(Element& s) { + Import im; + im.name = s[1]->str(); + im.module = s[2]->str(); + im.base = s[3]->str(); + Element& params = *s[4]; + if (params[0]->str() == PARAM) { + for (size_t i = 1; i < params.size(); i++) { + im.type.params.push_back(stringToWasmType(params[i]->str())); + } + } else { + abort(); + } + assert(s.size() == 5); + wasm.imports[im.name] = im; + } + void parseTable(Element& s) { for (size_t i = 1; i < s.size(); i++) { wasm.table.names.push_back(s[i]->str()); |