Next step of refactoring with an intermediate model in the memory of

WASM instructions.
This commit is contained in:
Volker 2018-06-21 18:29:20 +02:00
parent c6ca470003
commit 95afeb17a7
7 changed files with 175 additions and 6 deletions

View File

@ -15,13 +15,15 @@
*/
package de.inetsoftware.jwebassembly.module;
import java.io.IOException;
/**
* Cast operations for converting one data type to another
*
* @author Volker Berlin
*
*/
public enum ValueTypeConvertion {
public enum ValueTypeConvertion implements WasmInstruction {
i2l,
i2f,
i2d,
@ -34,4 +36,13 @@ public enum ValueTypeConvertion {
d2i,
d2l,
d2f,
;
/**
* {@inheritDoc}
*/
@Override
public void writeTo( ModuleWriter writer ) throws IOException {
writer.writeCast( this );
}
}

View File

@ -0,0 +1,55 @@
/*
Copyright 2018 Volker Berlin (i-net software)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package de.inetsoftware.jwebassembly.module;
import java.io.IOException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
/**
* WasmInstruction for block operation.
*
* @author Volker Berlin
*
*/
class WasmBlockInstruction implements WasmInstruction {
private final WasmBlockOperator op;
private final Object data;
/**
* Create an instance of block operation.
*
* @param op
* the operation
* @param data
* extra data depending of the operator
*/
WasmBlockInstruction( @Nonnull WasmBlockOperator op, @Nullable Object data ) {
this.op = op;
this.data = data;
}
/**
* {@inheritDoc}
*/
public void writeTo( @Nonnull ModuleWriter writer ) throws IOException {
writer.writeBlockCode( op, data );
}
}

View File

@ -0,0 +1,47 @@
/*
Copyright 2018 Volker Berlin (i-net software)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package de.inetsoftware.jwebassembly.module;
import java.io.IOException;
import javax.annotation.Nonnull;
/**
* WasmInstruction for a function call.
*
* @author Volker Berlin
*
*/
class WasmCallInstruction implements WasmInstruction {
private final String name;
/**
* Create an instance of a function call instruction
* @param name the Java function name
*/
WasmCallInstruction( String name ) {
this.name = name;
}
/**
* {@inheritDoc}
*/
public void writeTo( @Nonnull ModuleWriter writer ) throws IOException {
writer.writeFunctionCall( name );
}
}

View File

@ -28,7 +28,7 @@ import de.inetsoftware.jwebassembly.WasmException;
* @author Volker Berlin
*
*/
class WasmConstInstruction extends WasmInstruction {
class WasmConstInstruction implements WasmInstruction {
private final Number value;
@ -43,7 +43,7 @@ class WasmConstInstruction extends WasmInstruction {
/**
* {@inheritDoc}
*/
void writeTo( @Nonnull ModuleWriter writer ) throws IOException {
public void writeTo( @Nonnull ModuleWriter writer ) throws IOException {
Class<?> clazz = value.getClass();
if( clazz == Integer.class ) {
writer.writeConstInt( ((Integer)value).intValue() );

View File

@ -26,7 +26,7 @@ import javax.annotation.Nonnull;
* @author Volker Berlin
*
*/
abstract class WasmInstruction {
abstract interface WasmInstruction {
/**
* Write this instruction to the WASM module.

View File

@ -27,7 +27,7 @@ import javax.annotation.Nonnull;
* @author Volker Berlin
*
*/
class WasmLoadStoreInstruction extends WasmInstruction {
class WasmLoadStoreInstruction implements WasmInstruction {
private boolean load;
@ -54,7 +54,7 @@ class WasmLoadStoreInstruction extends WasmInstruction {
/**
* {@inheritDoc}
*/
void writeTo( @Nonnull ModuleWriter writer ) throws IOException {
public void writeTo( @Nonnull ModuleWriter writer ) throws IOException {
idx = localVariables.get( idx ); // translate slot index to position index
if( load ) {
writer.writeLoad( idx );

View File

@ -0,0 +1,56 @@
/*
Copyright 2018 Volker Berlin (i-net software)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package de.inetsoftware.jwebassembly.module;
import java.io.IOException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
/**
* WasmInstruction for numeric operation.
*
* @author Volker Berlin
*
*/
class WasmNumericInstruction implements WasmInstruction {
private final NumericOperator numOp;
private final ValueType valueType;
/**
* Create an instance of numeric operation.
*
* @param numOp
* the numeric operation
* @param valueType
* the type of the parameters
*
*/
WasmNumericInstruction( @Nullable NumericOperator numOp, @Nullable ValueType valueType ) {
this.numOp = numOp;
this.valueType = valueType;
}
/**
* {@inheritDoc}
*/
public void writeTo( @Nonnull ModuleWriter writer ) throws IOException {
writer.writeNumericOperator( numOp, valueType );
}
}