diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-06 19:33:20 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-06 19:33:20 -0800 |
commit | 54cc7b3916c61a0fefd66455ed6de7efe6d317bd (patch) | |
tree | aca53f0e23129b7596bb5163abf03b2d56f70a17 /src/wasm-s-parser.h | |
parent | c66aca505a96c5e043bc00aa6311101de9339854 (diff) | |
download | binaryen-54cc7b3916c61a0fefd66455ed6de7efe6d317bd.tar.gz binaryen-54cc7b3916c61a0fefd66455ed6de7efe6d317bd.tar.bz2 binaryen-54cc7b3916c61a0fefd66455ed6de7efe6d317bd.zip |
fake return
Diffstat (limited to 'src/wasm-s-parser.h')
-rw-r--r-- | src/wasm-s-parser.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 1ed23b190..b9556bb3b 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -33,7 +33,8 @@ IString MODULE("module"), INFINITY_("infinity"), NEG_INFINITY("-infinity"), NAN_("nan"), - NEG_NAN("-nan"); + NEG_NAN("-nan"), + FAKE_RETURN("fake_return_waka123"); // // An element in an S-Expression: a list or a string @@ -540,6 +541,10 @@ public: if (str[1] == 'e') return makeSetLocal(s); abort_on(str); } + case 'r': { + if (str[1] == 'e') return makeReturn(s); + abort_on(str); + } default: abort_on(str); } } @@ -874,6 +879,22 @@ private: return ret; } + Expression* makeReturn(Element& s) { + // return will likely not remain in wasm, but is in the testcases, for now. fake it + Block *temp; + if (!(currFunction->body && (temp = currFunction->body->dyn_cast<Block>()) && temp->name == FAKE_RETURN)) { + Expression* old = currFunction->body; + temp = allocator.alloc<Block>(); + temp->name = FAKE_RETURN; + if (old) temp->list.push_back(old); + currFunction->body = temp; + } + auto ret = allocator.alloc<Break>(); + ret->name = FAKE_RETURN; + ret->value = parseExpression(s[1]); + return ret; + } + void parseMemory(Element& s) { wasm.memory.initial = atoi(s[1]->c_str()); if (s.size() == 2) return; |