From d3261149e624550f25cc09f4f5524fef6a8511f3 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sat, 27 Feb 2021 22:22:24 +0100 Subject: [PATCH] Update the exception handling support to the current proposal --- .../binary/BinaryModuleWriter.java | 1 + .../jwebassembly/module/BranchManger.java | 18 +++++++++--------- .../jwebassembly/text/TextModuleWriter.java | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java index cf65d70..9f2615b 100644 --- a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java @@ -1342,6 +1342,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod case CATCH: if( options.useEH() ) { codeStream.writeOpCode( CATCH ); + codeStream.writeVaruint32( (Integer)data ); } else { codeStream.writeOpCode( BR ); codeStream.writeVaruint32( 0 ); diff --git a/src/de/inetsoftware/jwebassembly/module/BranchManger.java b/src/de/inetsoftware/jwebassembly/module/BranchManger.java index a6757c7..19cf356 100644 --- a/src/de/inetsoftware/jwebassembly/module/BranchManger.java +++ b/src/de/inetsoftware/jwebassembly/module/BranchManger.java @@ -978,7 +978,7 @@ class BranchManger { parent.add( tryNode ); calculate( tryNode, parsedOperations.subList( 0, idx ) ); - BranchNode catchNode = new BranchNode( catchPos, endPos, WasmBlockOperator.CATCH, WasmBlockOperator.END ); + BranchNode catchNode = new BranchNode( catchPos, endPos, WasmBlockOperator.CATCH, WasmBlockOperator.END, 0 ); parent.add( catchNode ); // Create a block/end structure for every CATCH without the first CATCH @@ -1097,14 +1097,14 @@ class BranchManger { catchNode.add( 0, unBoxing ); return; } - AnyType excepType = getCatchType( tryCatch ); - BlockType blockType = options.types.blockType( Arrays.asList( ValueType.exnref ), Arrays.asList( excepType ) ); - BranchNode unBoxing = new BranchNode( catchPos, catchPos, WasmBlockOperator.BLOCK, WasmBlockOperator.END, blockType ); - catchNode.add( 0, unBoxing ); - - //TODO localVariables.getTempVariable( ValueType.exnref, catchPos, endPos ); https://github.com/WebAssembly/wabt/issues/1388 - unBoxing.add( new BranchNode( catchPos, catchPos, WasmBlockOperator.BR_ON_EXN, null, 0 ) ); - unBoxing.add( new BranchNode( catchPos, catchPos, WasmBlockOperator.RETHROW, null ) ); +// AnyType excepType = getCatchType( tryCatch ); +// BlockType blockType = options.types.blockType( Arrays.asList( ValueType.exnref ), Arrays.asList( excepType ) ); +// BranchNode unBoxing = new BranchNode( catchPos, catchPos, WasmBlockOperator.BLOCK, WasmBlockOperator.END, blockType ); +// catchNode.add( 0, unBoxing ); +// +// //TODO localVariables.getTempVariable( ValueType.exnref, catchPos, endPos ); https://github.com/WebAssembly/wabt/issues/1388 +// unBoxing.add( new BranchNode( catchPos, catchPos, WasmBlockOperator.BR_ON_EXN, null, 0 ) ); +// unBoxing.add( new BranchNode( catchPos, catchPos, WasmBlockOperator.RETHROW, null ) ); } private AnyType getCatchType( TryCatchFinally tryCatch ) { diff --git a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java index 962df82..75c6f7e 100644 --- a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java @@ -831,7 +831,7 @@ public class TextModuleWriter extends ModuleWriter { break; case CATCH: inset--; - name = options.useEH() ? "catch" : "br 0"; + name = options.useEH() ? "catch " + data : "br 0"; insetAfter++; break; case THROW: