From 13548a538ae581411841506884c28f1be223079c Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 20 Jan 2016 12:11:24 -0800 Subject: fix switch default in binary format #123 --- src/wasm-binary.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/wasm-binary.h') diff --git a/src/wasm-binary.h b/src/wasm-binary.h index e7b96a49a..358abe25f 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -616,14 +616,18 @@ public: void visitSwitch(Switch *curr) { if (debug) std::cerr << "zz node: Switch" << std::endl; o << int8_t(BinaryConsts::TableSwitch) << int16_t(curr->cases.size()) - << int16_t(curr->targets.size()); + << int16_t(curr->targets.size() + 1); std::map mapping; // target name => index in cases for (size_t i = 0; i < curr->cases.size(); i++) { mapping[curr->cases[i].name] = i; } + if (mapping.find(curr->default_) == mapping.end()) { + mapping[curr->default_] = curr->cases.size(); + } for (auto target : curr->targets) { o << mapping[target]; } + o << mapping[curr->default_]; breakStack.push_back(curr->name); recurse(curr->value); for (auto& c : curr->cases) { @@ -1285,9 +1289,10 @@ public: } return caseLabels[index]; }; - for (auto i = 0; i < numTargets; i++) { + for (auto i = 0; i < numTargets - 1; i++) { curr->targets.push_back(getCaseLabel(getInt16())); } + curr->default_ = getCaseLabel(getInt16()); curr->name = getNextLabel(); breakStack.push_back(curr->name); readExpression(curr->value); -- cgit v1.2.3