fix branch result with reference type

This commit is contained in:
Volker Berlin 2020-03-21 11:59:05 +01:00
parent 1882d016ac
commit a3aa825ebc
2 changed files with 24 additions and 7 deletions

View File

@ -709,16 +709,20 @@ public class TextModuleWriter extends ModuleWriter {
*/ */
@Override @Override
protected void writeBlockCode( @Nonnull WasmBlockOperator op, @Nullable Object data ) throws IOException { protected void writeBlockCode( @Nonnull WasmBlockOperator op, @Nullable Object data ) throws IOException {
String name; CharSequence name;
int insetAfter = 0; int insetAfter = 0;
switch( op ) { switch( op ) {
case RETURN: case RETURN:
name = "return"; name = "return";
break; break;
case IF: case IF:
if( data == ValueType.empty ) {
name = "if"; name = "if";
if( data != ValueType.empty ) { } else {
name += " (result " + data + ")"; StringBuilder builder = new StringBuilder("if (result ");
writeTypeName( builder, (AnyType)data );
builder.append( ")" );
name = builder;
} }
insetAfter++; insetAfter++;
break; break;
@ -735,9 +739,13 @@ public class TextModuleWriter extends ModuleWriter {
name = "drop"; name = "drop";
break; break;
case BLOCK: case BLOCK:
if( data == null ) {
name = "block"; name = "block";
if( data != null ) { } else {
name += " (result " + data + ")"; StringBuilder builder = new StringBuilder("block (result ");
writeTypeName( builder, (AnyType)data );
builder.append( ")" );
name = builder;
} }
insetAfter++; insetAfter++;
break; break;

View File

@ -61,6 +61,7 @@ public class StructsNonGC extends AbstractBaseTest {
addParam( list, script, "integerClassName" ); addParam( list, script, "integerClassName" );
addParam( list, script, "classClassName" ); addParam( list, script, "classClassName" );
addParam( list, script, "classConst" ); addParam( list, script, "classConst" );
addParam( list, script, "branchWithObjectResult" );
} }
rule.setTestParameters( list ); rule.setTestParameters( list );
return list; return list;
@ -209,6 +210,14 @@ public class StructsNonGC extends AbstractBaseTest {
Class clazz = Float.class; Class clazz = Float.class;
return JSObject.domString( clazz.getName() ); 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 { interface TestDefault {