diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 16:27:01 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 16:27:01 -0800 |
commit | a8a78dd5e6f83263085cb3e4dea21c0f10a60b4f (patch) | |
tree | 1210338db315ae2a7546d623732b57112be915dc /src | |
parent | 6570d8cafc74e2ed6cf877f9b4a12c40ceac5e52 (diff) | |
download | binaryen-a8a78dd5e6f83263085cb3e4dea21c0f10a60b4f.tar.gz binaryen-a8a78dd5e6f83263085cb3e4dea21c0f10a60b4f.tar.bz2 binaryen-a8a78dd5e6f83263085cb3e4dea21c0f10a60b4f.zip |
parse funcs with a named type
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-s-parser.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 28f30a579..761a751ac 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -227,12 +227,16 @@ private: size_t localIndex; // params and locals size_t labelIndex; + IString getName(size_t index) { + return IString(std::to_string(index).c_str(), false); + } + IString getNameWhenNextNotString(Element& s, size_t& i, size_t& index) { if (s[i]->isStr()) { index++; return s[i++]->str(); } - return IString(std::to_string(index++).c_str(), false); + return getName(index++); } IString getNameOnCondition(Element& s, size_t& i, size_t& index, bool givenName) { @@ -240,7 +244,7 @@ private: index++; return s[i++]->str(); } - return IString(std::to_string(index++).c_str(), false); + return getName(index++); } void parseFunction(Element& s) { @@ -271,6 +275,17 @@ private: currLocalTypes[name] = type; } else if (id == RESULT) { func->result = stringToWasmType(curr[1]->str()); + } else if (id == TYPE) { + Name name = curr[1]->str(); + assert(wasm.functionTypesMap.find(name) != wasm.functionTypesMap.end()); + FunctionType* type = wasm.functionTypesMap[name]; + func->result = type->result; + for (size_t j = 0; i < type->params.size(); j++) { + IString name = getName(j); + WasmType currType = type->params[j]; + func->params.emplace_back(name, currType); + currLocalTypes[name] = currType; + } } else { Expression* ex = parseExpression(curr); if (!func->body) { |