From 724f39dc189dc97bc33f7bbcd3b204eed0e250f9 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Thu, 28 Nov 2019 20:07:51 +0100 Subject: [PATCH] Warning for multiple CATCH blocks --- .../jwebassembly/module/BranchManger.java | 8 ++++++++ .../jwebassembly/runtime/Exceptions.java | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/de/inetsoftware/jwebassembly/module/BranchManger.java b/src/de/inetsoftware/jwebassembly/module/BranchManger.java index 9a5bf90..34dbdd6 100644 --- a/src/de/inetsoftware/jwebassembly/module/BranchManger.java +++ b/src/de/inetsoftware/jwebassembly/module/BranchManger.java @@ -741,6 +741,14 @@ class BranchManger { int idx; for( idx = 0; idx < parsedOperations.size(); idx++ ) { ParsedBlock parsedBlock = parsedOperations.get( idx ); + + if( parsedBlock.op == JavaBlockOperator.TRY ) { + TryCatchFinally tryCatch2 = ((TryCatchParsedBlock)parsedBlock).tryCatch; + if( tryCatch.getStart() == tryCatch2.getStart() && tryCatch.getEnd() == tryCatch2.getEnd() ) { + throw new WasmException( "Try with multiple catch blocks can't compile currently.", null, null, tryBlock.lineNumber ); + } + } + if( parsedBlock.startPosition == gotoPos && parsedBlock.op == JavaBlockOperator.GOTO && parsedBlock.startPosition < parsedBlock.endPosition ) { parsedOperations.remove( idx ); endPos = parsedBlock.endPosition; diff --git a/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java b/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java index b53d322..eefc80d 100644 --- a/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java +++ b/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java @@ -130,6 +130,19 @@ public class Exceptions extends AbstractBaseTest { return v; } +// @Export +// static int multiCatch() { +// int r; +// try { +// r = 5 / 0; +// } catch(RuntimeException ex ) { +// r = 1; +// } catch(Exception ex ) { +// r = 2; +// } +// return r; +// } + // @Export // static int npe() { // Object obj = new NullPointerException();