diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2019-07-03 15:56:04 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-03 15:56:04 -0700 |
commit | 2a138faec4b21ee2eae89f00d1e00987bab6305a (patch) | |
tree | 9a6482a76a5e796fa27fd95e9a299c7b37bf17a3 /src/wasm/wasm-s-parser.cpp | |
parent | 256187c823ab6a04b3b55c3d9d3497ae2004d165 (diff) | |
download | binaryen-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.cpp | 7 |
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; } |