From 9acda37be4b408a65329575f867acff89694e2dd Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sat, 7 May 2022 21:19:48 +0200 Subject: [PATCH] fix conditionals expressions as method parameters in a SWITCH. --- .../jwebassembly/module/BranchManager.java | 5 +++-- .../runtime/ControlFlowOperators.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/module/BranchManager.java b/src/de/inetsoftware/jwebassembly/module/BranchManager.java index 254a37b..eca32fe 100644 --- a/src/de/inetsoftware/jwebassembly/module/BranchManager.java +++ b/src/de/inetsoftware/jwebassembly/module/BranchManager.java @@ -885,7 +885,7 @@ class BranchManager { for( int p = 0; p < parsedOperations.size(); p++ ) { ParsedBlock parsedBlock = parsedOperations.get( p ); int start = parsedBlock.startPosition; - if( startPosition >= lastPosition ) { + if( start >= lastPosition ) { break; } if( parsedBlock.op != JavaBlockOperator.IF ) { @@ -923,10 +923,11 @@ class BranchManager { } // handle the GOTO (breaks) at the end of the CASE blocks. + int lastBlockPosition = lastPosition; for( Iterator it = parsedOperations.iterator(); it.hasNext(); ) { ParsedBlock parsedBlock = it.next(); int start = parsedBlock.startPosition; - if( startPosition >= lastPosition ) { + if( start >= lastBlockPosition ) { break; } switch( parsedBlock.op ) { diff --git a/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java b/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java index 1037c12..ad60219 100644 --- a/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java +++ b/test/de/inetsoftware/jwebassembly/runtime/ControlFlowOperators.java @@ -46,6 +46,7 @@ public class ControlFlowOperators extends AbstractBaseTest { addParam( list, script, "ifMultipleDouble" ); addParam( list, script, "ifCompare" ); addParam( list, script, "switchDirect" ); + addParam( list, script, "switchWithConditionMethodParams" ); addParam( list, script, "endlessLoop" ); addParam( list, script, "doWhileLoop" ); addParam( list, script, "doWhileLoopTwoConditions" ); @@ -287,6 +288,20 @@ public class ControlFlowOperators extends AbstractBaseTest { return b; } + @Export + public static int switchWithConditionMethodParams() { + int last = 8; + switch( last ) { + case -2: + last = -13; + break; + default: + last = tableSwitch( (last == 0 ? 0 : last) ); + break; + } + return last; + } + @Export static int endlessLoop() { int a = 0;