diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-18 10:10:30 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-18 10:10:30 -0800 |
commit | 50876c7e6893b4b86d72767dc93e3565fcb0afb9 (patch) | |
tree | 7d058a2322ba7e22c76f681075f02150079b3773 | |
parent | c988fb1a8b66f4c2241e98cbabc2068c968d6003 (diff) | |
download | binaryen-50876c7e6893b4b86d72767dc93e3565fcb0afb9.tar.gz binaryen-50876c7e6893b4b86d72767dc93e3565fcb0afb9.tar.bz2 binaryen-50876c7e6893b4b86d72767dc93e3565fcb0afb9.zip |
set call types in a post-pass in s-parser
-rw-r--r-- | src/wasm-s-parser.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 2e01bfc5f..9819c4a60 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -236,6 +236,7 @@ class SExpressionWasmBuilder { MixedArena allocator; std::function<void ()> onError; int functionCounter; + std::vector<Call*> calls; // we only know call types afterwards, so we set their type in a post-pass public: // Assumes control of and modifies the input. @@ -244,6 +245,11 @@ public: for (unsigned i = 1; i < module.size(); i++) { parseModuleElement(*module[i]); } + // post-pass, fix up call types + for (auto call : calls) { + call->type = wasm.functionsMap[call->target]->result; + } + calls.clear(); } private: @@ -949,6 +955,7 @@ private: Expression* makeCall(Element& s) { auto ret = allocator.alloc<Call>(); + calls.push_back(ret); ret->target = s[1]->str(); parseCallOperands(s, 2, ret); return ret; |