diff options
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r-- | src/wasm-interpreter.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 47a442020..1cdd86387 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -227,8 +227,13 @@ private: if (index >= 0 && index < curr->targets.size()) { target = curr->targets[index]; } - auto iter = curr->caseMap.find(target); - if (iter == curr->caseMap.end()) { + // This is obviously very inefficient. This should be a cached data structure + std::map<Name, size_t> caseMap; // name => index in cases + for (size_t i = 0; i < curr->cases.size(); i++) { + caseMap[curr->cases[i].name] = i; + } + auto iter = caseMap.find(target); + if (iter == caseMap.end()) { // not in the cases, so this is a break outside return Flow(target); } |