summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDouglas Crosher <info@jsstats.com>2016-01-16 12:32:34 +1100
committerDouglas Crosher <info@jsstats.com>2016-01-18 00:06:50 +1100
commit0c78665777e244741bfe6e2ab30fedded96354bd (patch)
tree537ca686d4a94346981e5cddad639071a420b4b5 /src
parent74b3798652f65fbbbe94b9aac2cb4f0fb8ccea09 (diff)
downloadbinaryen-0c78665777e244741bfe6e2ab30fedded96354bd.tar.gz
binaryen-0c78665777e244741bfe6e2ab30fedded96354bd.tar.bz2
binaryen-0c78665777e244741bfe6e2ab30fedded96354bd.zip
The break operation may have a value, and must with the v8 encoding.
Diffstat (limited to 'src')
-rw-r--r--src/wasm-binary.h6
-rw-r--r--src/wasm.h4
2 files changed, 8 insertions, 2 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h
index 6b2e960d4..0b8663497 100644
--- a/src/wasm-binary.h
+++ b/src/wasm-binary.h
@@ -607,6 +607,11 @@ public:
abort();
}
if (curr->condition) recurse(curr->condition);
+ if (curr->value) {
+ recurse(curr->value);
+ } else {
+ o << int8_t(BinaryConsts::Nop);
+ }
}
void visitSwitch(Switch *curr) {
if (debug) std::cerr << "zz node: Switch" << std::endl;
@@ -1267,6 +1272,7 @@ public:
auto offset = getInt8();
curr->name = breakStack[breakStack.size() - 1 - offset];
if (code == BinaryConsts::BrIf) readExpression(curr->condition);
+ readExpression(curr->value);
}
void visitSwitch(Switch *curr) {
if (debug) std::cerr << "zz node: Switch" << std::endl;
diff --git a/src/wasm.h b/src/wasm.h
index 8a3ceac7c..9edd7645e 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -432,14 +432,14 @@ public:
doIndent(o, indent) << name << '\n';
} else {
printOpening(o, "br ") << name;
- if (!value) {
+ if (!value || value->is<Nop>()) {
// avoid a new line just for the parens
o << ")";
return o;
}
incIndent(o, indent);
}
- if (value) printFullLine(o, indent, value);
+ if (value && !value->is<Nop>()) printFullLine(o, indent, value);
return decIndent(o, indent);
}
};