summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/wasm2js.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/tools/wasm2js.cpp b/src/tools/wasm2js.cpp
index 2007a65d8..ebed16226 100644
--- a/src/tools/wasm2js.cpp
+++ b/src/tools/wasm2js.cpp
@@ -353,11 +353,13 @@ static void optimizeJS(Ref ast) {
} else if (isUnary(node, L_NOT)) {
node[2] = optimizeBoolean(node[2]);
}
- // Add/subtract can merge coercions up.
+ // Add/subtract can merge coercions up, except when a child is a division,
+ // which needs to be eagerly truncated to remove fractional results.
else if (isBinary(node, PLUS) || isBinary(node, MINUS)) {
auto left = node[2];
auto right = node[3];
- if (isOrZero(left) && isOrZero(right)) {
+ if (isOrZero(left) && isOrZero(right) && !isBinary(left[2], DIV) &&
+ !isBinary(right[2], DIV)) {
auto op = node[1]->getIString();
// Add a coercion on top.
node[1]->setString(OR);