summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-s-parser.cpp
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2019-07-03 15:56:04 -0700
committerGitHub <noreply@github.com>2019-07-03 15:56:04 -0700
commit2a138faec4b21ee2eae89f00d1e00987bab6305a (patch)
tree9a6482a76a5e796fa27fd95e9a299c7b37bf17a3 /src/wasm/wasm-s-parser.cpp
parent256187c823ab6a04b3b55c3d9d3497ae2004d165 (diff)
downloadbinaryen-2a138faec4b21ee2eae89f00d1e00987bab6305a.tar.gz
binaryen-2a138faec4b21ee2eae89f00d1e00987bab6305a.tar.bz2
binaryen-2a138faec4b21ee2eae89f00d1e00987bab6305a.zip
Initial tail call implementation (#2197)
Including parsing, printing, assembling, disassembling. TODO: - interpreting - effects - finalization and typing - fuzzing - JS/C API
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r--src/wasm/wasm-s-parser.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 04c31815f..7a2d8a009 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -1622,17 +1622,19 @@ Expression* SExpressionWasmBuilder::makeLoop(Element& s) {
return ret;
}
-Expression* SExpressionWasmBuilder::makeCall(Element& s) {
+Expression* SExpressionWasmBuilder::makeCall(Element& s, bool isReturn) {
auto target = getFunctionName(*s[1]);
auto ret = allocator.alloc<Call>();
ret->target = target;
ret->type = functionTypes[ret->target];
parseCallOperands(s, 2, s.size(), ret);
+ ret->isReturn = isReturn;
ret->finalize();
return ret;
}
-Expression* SExpressionWasmBuilder::makeCallIndirect(Element& s) {
+Expression* SExpressionWasmBuilder::makeCallIndirect(Element& s,
+ bool isReturn) {
if (!wasm.table.exists) {
throw ParseException("no table");
}
@@ -1645,6 +1647,7 @@ Expression* SExpressionWasmBuilder::makeCallIndirect(Element& s) {
ret->type = functionType->result;
parseCallOperands(s, i, s.size() - 1, ret);
ret->target = parseExpression(s[s.size() - 1]);
+ ret->isReturn = isReturn;
ret->finalize();
return ret;
}