From b974e9351405880fe1d021e3ae7fda92f1b3bb4f Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 20 Nov 2015 09:58:10 -0800 Subject: br_if --- src/wasm-interpreter.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/wasm-interpreter.h') diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 3f69d36e5..e20d3a358 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -211,14 +211,19 @@ private: } Flow visitBreak(Break *curr) override { NOTE_ENTER("Break"); + bool condition = true; + if (curr->condition) { + Flow flow = visit(curr->condition); + if (flow.breaking()) return flow; + condition = flow.value.getInteger(); + } + Flow flow(curr->name); if (curr->value) { - Flow flow = visit(curr->value); - if (!flow.breaking()) { - flow.breakTo = curr->name; - } - return flow; + flow = visit(curr->value); + if (flow.breaking()) return flow; + flow.breakTo = curr->name; } - return Flow(curr->name); + return condition ? flow : Flow(); } Flow visitSwitch(Switch *curr) override { NOTE_ENTER("Switch"); -- cgit v1.2.3