summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-12-11 23:16:13 -0500
committerAlon Zakai <alonzakai@gmail.com>2015-12-11 23:16:13 -0500
commit84288282ef586d5664159b9a9fc54dacfc89c052 (patch)
tree602ff56fc98c75efe0d54f49cab4f11d57e99d40 /src
parent339b2bfa765a95cdb7d7a991257b59fafe23aef1 (diff)
downloadbinaryen-84288282ef586d5664159b9a9fc54dacfc89c052.tar.gz
binaryen-84288282ef586d5664159b9a9fc54dacfc89c052.tar.bz2
binaryen-84288282ef586d5664159b9a9fc54dacfc89c052.zip
handle missing assign in call as a discard
Diffstat (limited to 'src')
-rw-r--r--src/s2wasm.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/s2wasm.h b/src/s2wasm.h
index 0c56e4bfb..b9ae08c02 100644
--- a/src/s2wasm.h
+++ b/src/s2wasm.h
@@ -264,10 +264,10 @@ private:
}
};
auto setOutput = [&](Expression* curr, Name assign) {
- if (assign.str[1] == 'p') { // push
- estack.push_back(curr);
- } else if (assign.str[1] == 'd') { // discard
+ if (assign.isNull() || assign.str[1] == 'd') { // discard
bstack.back()->list.push_back(curr);
+ } else if (assign.str[1] == 'p') { // push
+ estack.push_back(curr);
} else { // set to a local
auto set = allocator.alloc<SetLocal>();
set->name = assign;
@@ -351,8 +351,11 @@ private:
default: abort_on("i32.?");
}
} else if (match("call")) {
- Name assign = getAssign();
- skipComma();
+ Name assign;
+ if (*s == '$') {
+ assign = getAssign();
+ skipComma();
+ }
auto curr = allocator.alloc<Call>();
curr->target = getCommaSeparated();
while (1) {