implements br_table

This commit is contained in:
Volker Berlin 2018-05-05 21:39:36 +02:00
parent a7fc8e0fc6
commit 7f92d062e9
2 changed files with 16 additions and 1 deletions

View File

@ -644,6 +644,14 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
codeStream.write( BR ); codeStream.write( BR );
codeStream.writeVaruint32( (Integer)data ); codeStream.writeVaruint32( (Integer)data );
break; break;
case BR_TABLE:
codeStream.write( BR_TABLE );
int[] targets = (int[])data;
codeStream.writeVaruint32( targets.length - 1 );
for( int i : targets ) {
codeStream.writeVaruint32( i );
}
break;
default: default:
throw new Error( "Unknown block: " + op ); throw new Error( "Unknown block: " + op );
} }

View File

@ -21,11 +21,11 @@ import java.util.List;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import de.inetsoftware.jwebassembly.module.WasmBlockOperator;
import de.inetsoftware.jwebassembly.module.ModuleWriter; import de.inetsoftware.jwebassembly.module.ModuleWriter;
import de.inetsoftware.jwebassembly.module.NumericOperator; import de.inetsoftware.jwebassembly.module.NumericOperator;
import de.inetsoftware.jwebassembly.module.ValueType; import de.inetsoftware.jwebassembly.module.ValueType;
import de.inetsoftware.jwebassembly.module.ValueTypeConvertion; import de.inetsoftware.jwebassembly.module.ValueTypeConvertion;
import de.inetsoftware.jwebassembly.module.WasmBlockOperator;
/** /**
* Module Writer for text format with S-expressions. * Module Writer for text format with S-expressions.
@ -279,6 +279,13 @@ public class TextModuleWriter extends ModuleWriter {
case BR: case BR:
name = "br " + data; name = "br " + data;
break; break;
case BR_TABLE:
StringBuilder builder = new StringBuilder( "br_table");
for( int i : (int[])data ) {
builder.append( ' ' ).append( i );
}
name = builder.toString();
break;
default: default:
throw new Error( "Unknown block: " + op ); throw new Error( "Unknown block: " + op );
} }