From bab77094c2f0f284735d4028076b5ebb22e0146c Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Fri, 10 Apr 2020 16:33:32 +0200 Subject: [PATCH] Write also for BR_ON_EXN an UNREACHABLE instruction --- .../jwebassembly/binary/BinaryModuleWriter.java | 10 +++++++--- .../jwebassembly/text/TextModuleWriter.java | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java index b9e79f8..4f80706 100644 --- a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java @@ -1320,9 +1320,13 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod codeStream.writeOpCode( RETHROW ); break; case BR_ON_EXN: - codeStream.writeOpCode( BR_ON_EXN ); - codeStream.writeVaruint32( (Integer)data ); // break depth - codeStream.writeVaruint32( 0 ); // event/exception ever 0 because currently there is only one with signature anyref + if( options.useEH() ) { + codeStream.writeOpCode( BR_ON_EXN ); + codeStream.writeVaruint32( (Integer)data ); // break depth + codeStream.writeVaruint32( 0 ); // event/exception ever 0 because currently there is only one with signature anyref + } else { + codeStream.writeOpCode( UNREACHABLE ); + } break; case MONITOR_ENTER: case MONITOR_EXIT: diff --git a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java index e54576f..f2dafc6 100644 --- a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java @@ -783,7 +783,7 @@ public class TextModuleWriter extends ModuleWriter { name = "rethrow"; break; case BR_ON_EXN: - name = "br_on_exn " + data + " 0"; // br_on_exn, break depth, event; // currently there is only one event/exception with anyref + name = options.useEH() ? "br_on_exn " + data + " 0" : "unreachable"; // br_on_exn, break depth, event; // currently there is only one event/exception with anyref break; case MONITOR_ENTER: case MONITOR_EXIT: