diff --git a/src/de/inetsoftware/jwebassembly/module/BranchManager.java b/src/de/inetsoftware/jwebassembly/module/BranchManager.java index 47b7c86..50bdb7f 100644 --- a/src/de/inetsoftware/jwebassembly/module/BranchManager.java +++ b/src/de/inetsoftware/jwebassembly/module/BranchManager.java @@ -617,7 +617,7 @@ class BranchManager { boolean isContinue = false; for( int i = ifCount + 1; i < parsedOpCount; i++ ) { ParsedBlock op = parsedOperations.get( i ); - if( op.endPosition >= elsePos ) { + if( op.endPosition >= elsePos && op.op == JavaBlockOperator.IF ) { isContinue = true; break; } diff --git a/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java b/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java index d76913c..6181b1e 100644 --- a/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java +++ b/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java @@ -54,6 +54,7 @@ public class ControlFlowOperators extends AbstractBaseTest { addParam( list, script, "whileLoopInElse_3" ); addParam( list, script, "whileLoopInElse_13" ); addParam( list, script, "whileLoopInElseAfterReturn" ); + addParam( list, script, "whileLoopAfterIfWithReturn" ); addParam( list, script, "forLoop" ); addParam( list, script, "conditionalOperator" ); addParam( list, script, "conditionalOperator2" ); @@ -392,6 +393,22 @@ public class ControlFlowOperators extends AbstractBaseTest { return result; } + @Export + public static int whileLoopAfterIfWithReturn() { + int yIndex = 13; + int result = 0; + if (yIndex < 3) { + if( yIndex == 3 ) { + return 42; + } + while (yIndex > 7) { + result++; + yIndex--; + } + } + return result; + } + @Export static int forLoop() { int a = 0;