summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-05 16:27:01 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-05 16:27:01 -0800
commita8a78dd5e6f83263085cb3e4dea21c0f10a60b4f (patch)
tree1210338db315ae2a7546d623732b57112be915dc /src
parent6570d8cafc74e2ed6cf877f9b4a12c40ceac5e52 (diff)
downloadbinaryen-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.h19
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) {