From a3aa825ebce2c01a5eb8e3371d9eb249df95e01d Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sat, 21 Mar 2020 11:59:05 +0100 Subject: [PATCH] fix branch result with reference type --- .../jwebassembly/text/TextModuleWriter.java | 22 +++++++++++++------ .../jwebassembly/runtime/StructsNonGC.java | 9 ++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java index 70cf0e5..3acdca1 100644 --- a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java @@ -709,16 +709,20 @@ public class TextModuleWriter extends ModuleWriter { */ @Override protected void writeBlockCode( @Nonnull WasmBlockOperator op, @Nullable Object data ) throws IOException { - String name; + CharSequence name; int insetAfter = 0; switch( op ) { case RETURN: name = "return"; break; case IF: - name = "if"; - if( data != ValueType.empty ) { - name += " (result " + data + ")"; + if( data == ValueType.empty ) { + name = "if"; + } else { + StringBuilder builder = new StringBuilder("if (result "); + writeTypeName( builder, (AnyType)data ); + builder.append( ")" ); + name = builder; } insetAfter++; break; @@ -735,9 +739,13 @@ public class TextModuleWriter extends ModuleWriter { name = "drop"; break; case BLOCK: - name = "block"; - if( data != null ) { - name += " (result " + data + ")"; + if( data == null ) { + name = "block"; + } else { + StringBuilder builder = new StringBuilder("block (result "); + writeTypeName( builder, (AnyType)data ); + builder.append( ")" ); + name = builder; } insetAfter++; break; diff --git a/test/de/inetsoftware/jwebassembly/runtime/StructsNonGC.java b/test/de/inetsoftware/jwebassembly/runtime/StructsNonGC.java index d8bd34f..92f6c14 100644 --- a/test/de/inetsoftware/jwebassembly/runtime/StructsNonGC.java +++ b/test/de/inetsoftware/jwebassembly/runtime/StructsNonGC.java @@ -61,6 +61,7 @@ public class StructsNonGC extends AbstractBaseTest { addParam( list, script, "integerClassName" ); addParam( list, script, "classClassName" ); addParam( list, script, "classConst" ); + addParam( list, script, "branchWithObjectResult" ); } rule.setTestParameters( list ); return list; @@ -209,6 +210,14 @@ public class StructsNonGC extends AbstractBaseTest { Class clazz = Float.class; return JSObject.domString( clazz.getName() ); } + + @Export + static int branchWithObjectResult() { + Integer val1 = 42; + Integer val2 = 7; + Integer val = val1 == val2 ? val1 : val2; + return val; + } } interface TestDefault {