diff options
Diffstat (limited to 'src/wasm-s-parser.h')
-rw-r--r-- | src/wasm-s-parser.h | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 8f5e08e9d..ec7d6c6dc 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -1090,23 +1090,27 @@ private: im->module = s[2]->str(); if (!s[3]->isStr()) onError(); im->base = s[3]->str(); - Element& params = *s[4]; - IString id = params[0]->str(); - if (id == PARAM) { - for (size_t i = 1; i < params.size(); i++) { - im->type.params.push_back(stringToWasmType(params[i]->str())); + if (s.size() > 4) { + Element& params = *s[4]; + IString id = params[0]->str(); + if (id == PARAM) { + for (size_t i = 1; i < params.size(); i++) { + im->type.params.push_back(stringToWasmType(params[i]->str())); + } + } else if (id == RESULT) { + im->type.result = stringToWasmType(params[1]->str()); + } else if (id == TYPE) { + IString name = params[1]->str(); + assert(wasm.functionTypesMap.find(name) != wasm.functionTypesMap.end()); + im->type = *wasm.functionTypesMap[name]; + } else { + onError(); + } + if (s.size() > 5) { + Element& result = *s[5]; + assert(result[0]->str() == RESULT); + im->type.result = stringToWasmType(result[1]->str()); } - } else if (id == TYPE) { - IString name = params[1]->str(); - assert(wasm.functionTypesMap.find(name) != wasm.functionTypesMap.end()); - im->type = *wasm.functionTypesMap[name]; - } else { - onError(); - } - if (s.size() > 5) { - Element& result = *s[5]; - assert(result[0]->str() == RESULT); - im->type.result = stringToWasmType(result[1]->str()); } wasm.addImport(im); } |