From b1eb27c474ed67c4f115f55726033e2b45271d8d Mon Sep 17 00:00:00 2001 From: Volker Date: Sun, 5 Aug 2018 14:45:18 +0200 Subject: [PATCH] support dynamic result type for an if block --- .../inetsoftware/jwebassembly/binary/BinaryModuleWriter.java | 2 +- src/de/inetsoftware/jwebassembly/module/BranchManger.java | 4 ++-- src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java index d96c3f3..79be627 100644 --- a/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/binary/BinaryModuleWriter.java @@ -698,7 +698,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod break; case IF: codeStream.write( IF ); - codeStream.write( ValueType.empty.getCode() ); // void; the return type of the block. currently we does not use it + codeStream.write( ((ValueType)data).getCode() ); break; case ELSE: codeStream.write( ELSE ); diff --git a/src/de/inetsoftware/jwebassembly/module/BranchManger.java b/src/de/inetsoftware/jwebassembly/module/BranchManger.java index 84f8c21..080f48d 100644 --- a/src/de/inetsoftware/jwebassembly/module/BranchManger.java +++ b/src/de/inetsoftware/jwebassembly/module/BranchManger.java @@ -252,7 +252,7 @@ class BranchManger { ParsedBlock parsedBlock = parsedOperations.get( i ); if( parsedBlock.startPosition == gotoPos && parsedBlock.op == JavaBlockOperator.GOTO && parsedBlock.startPosition < parsedBlock.endPosition) { parsedOperations.remove( i ); - branch = new BranchNode( startPos, startBlock.endPosition, WasmBlockOperator.IF, null ); + branch = new BranchNode( startPos, startBlock.endPosition, WasmBlockOperator.IF, null, ValueType.empty ); parent.add( branch ); if( i > 0 ) { calculate( branch, parsedOperations.subList( 0, i ) ); @@ -276,7 +276,7 @@ class BranchManger { } if( branch == null ) { - branch = new BranchNode( startPos, endPos, WasmBlockOperator.IF, WasmBlockOperator.END ); + branch = new BranchNode( startPos, endPos, WasmBlockOperator.IF, WasmBlockOperator.END, ValueType.empty ); parent.add( branch ); } startBlock.negateCompare(); diff --git a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java index ea59253..07710cf 100644 --- a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java @@ -282,6 +282,9 @@ public class TextModuleWriter extends ModuleWriter { break; case IF: name = "if"; + if( data != ValueType.empty ) { + name += " (result " + data + ")"; + } insetAfter++; break; case ELSE: