mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-25 07:27:52 +01:00
extract writeMethodParamStart() from writeMethodStart() and prepareImport()
This commit is contained in:
parent
b8b751f909
commit
557c348ed7
@ -472,7 +472,6 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
|
|||||||
ImportFunction importFunction;
|
ImportFunction importFunction;
|
||||||
function = importFunction = new ImportFunction(importModule, importName);
|
function = importFunction = new ImportFunction(importModule, importName);
|
||||||
imports.put( name.signatureName, importFunction );
|
imports.put( name.signatureName, importFunction );
|
||||||
functionType = new FunctionTypeEntry();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -503,14 +502,9 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void writeMethodStart( FunctionName name, String sourceFile ) throws IOException {
|
protected void writeMethodParamStart( FunctionName name ) throws IOException {
|
||||||
function = getFunction( name );
|
function = getFunction( name );
|
||||||
if( createSourceMap ) {
|
|
||||||
int idx = name.className.lastIndexOf( '/' );
|
|
||||||
this.javaSourceFile = name.className.substring( 0, idx + 1 ) + sourceFile;
|
|
||||||
}
|
|
||||||
functionType = new FunctionTypeEntry();
|
functionType = new FunctionTypeEntry();
|
||||||
codeStream.reset();
|
|
||||||
locals.clear();
|
locals.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -542,7 +536,7 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void writeMethodParamFinish() throws IOException {
|
protected void writeMethodParamFinish(FunctionName name) throws IOException {
|
||||||
int typeId = functionTypes.indexOf( functionType );
|
int typeId = functionTypes.indexOf( functionType );
|
||||||
if( typeId < 0 ) {
|
if( typeId < 0 ) {
|
||||||
typeId = functionTypes.size();
|
typeId = functionTypes.size();
|
||||||
@ -551,6 +545,18 @@ public class BinaryModuleWriter extends ModuleWriter implements InstructionOpcod
|
|||||||
function.typeId = typeId;
|
function.typeId = typeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void writeMethodStart( FunctionName name, String sourceFile ) throws IOException {
|
||||||
|
if( createSourceMap ) {
|
||||||
|
int idx = name.className.lastIndexOf( '/' );
|
||||||
|
this.javaSourceFile = name.className.substring( 0, idx + 1 ) + sourceFile;
|
||||||
|
}
|
||||||
|
codeStream.reset();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
|
@ -496,6 +496,7 @@ public class ModuleGenerator {
|
|||||||
* if some Java code can't converted
|
* if some Java code can't converted
|
||||||
*/
|
*/
|
||||||
private void writeMethodSignature( FunctionName name, boolean isStatic, WasmCodeBuilder codeBuilder ) throws IOException, WasmException {
|
private void writeMethodSignature( FunctionName name, boolean isStatic, WasmCodeBuilder codeBuilder ) throws IOException, WasmException {
|
||||||
|
writer.writeMethodParamStart( name );
|
||||||
int paramCount = 0;
|
int paramCount = 0;
|
||||||
if( !isStatic ) {
|
if( !isStatic ) {
|
||||||
StructType instanceType = types.valueOf( name.className );
|
StructType instanceType = types.valueOf( name.className );
|
||||||
@ -529,7 +530,7 @@ public class ModuleGenerator {
|
|||||||
writer.writeMethodParam( "local", type, paramName );
|
writer.writeMethodParam( "local", type, paramName );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writer.writeMethodParamFinish( );
|
writer.writeMethodParamFinish( name );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -95,15 +95,14 @@ public abstract class ModuleWriter implements Closeable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Write the method header.
|
* Write the method header.
|
||||||
|
*
|
||||||
* @param name
|
* @param name
|
||||||
* the function name
|
* the function name
|
||||||
* @param sourceFile
|
|
||||||
* the name of the source file
|
|
||||||
*
|
*
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if any I/O error occur
|
* if any I/O error occur
|
||||||
*/
|
*/
|
||||||
protected abstract void writeMethodStart( FunctionName name, String sourceFile ) throws IOException;
|
protected abstract void writeMethodParamStart( @Nonnull FunctionName name ) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write a method parameter.
|
* Write a method parameter.
|
||||||
@ -122,10 +121,26 @@ public abstract class ModuleWriter implements Closeable {
|
|||||||
/**
|
/**
|
||||||
* Finish the function parameter.
|
* Finish the function parameter.
|
||||||
*
|
*
|
||||||
|
* @param name
|
||||||
|
* the function name
|
||||||
|
*
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if any I/O error occur
|
* if any I/O error occur
|
||||||
*/
|
*/
|
||||||
protected abstract void writeMethodParamFinish() throws IOException;
|
protected abstract void writeMethodParamFinish( @Nonnull FunctionName name ) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write the method header.
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* the function name
|
||||||
|
* @param sourceFile
|
||||||
|
* the name of the source file
|
||||||
|
*
|
||||||
|
* @throws IOException
|
||||||
|
* if any I/O error occur
|
||||||
|
*/
|
||||||
|
protected abstract void writeMethodStart( FunctionName name, String sourceFile ) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mark the current output position with Java code position for crating of a source map.
|
* Mark the current output position with Java code position for crating of a source map.
|
||||||
|
@ -65,8 +65,6 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
|
|
||||||
private StringBuilder methodOutput = new StringBuilder();
|
private StringBuilder methodOutput = new StringBuilder();
|
||||||
|
|
||||||
private FunctionName function;
|
|
||||||
|
|
||||||
private Map<String, Integer> functions = new LinkedHashMap<>();
|
private Map<String, Integer> functions = new LinkedHashMap<>();
|
||||||
|
|
||||||
private int inset;
|
private int inset;
|
||||||
@ -77,8 +75,6 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
|
|
||||||
private boolean useExceptions;
|
private boolean useExceptions;
|
||||||
|
|
||||||
private int importCount;
|
|
||||||
|
|
||||||
private int functionCount;
|
private int functionCount;
|
||||||
|
|
||||||
private boolean callIndirect;
|
private boolean callIndirect;
|
||||||
@ -116,7 +112,7 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
output.append( methodOutput );
|
output.append( methodOutput );
|
||||||
|
|
||||||
if( callIndirect ) {
|
if( callIndirect ) {
|
||||||
int count = importCount + functionCount;
|
int count = functionCount;
|
||||||
String countStr = Integer.toString( count );
|
String countStr = Integer.toString( count );
|
||||||
newline( output );
|
newline( output );
|
||||||
output.append( "(table " ).append( countStr ).append( ' ' ).append( countStr ).append( " anyfunc)" );
|
output.append( "(table " ).append( countStr ).append( ' ' ).append( countStr ).append( " anyfunc)" );
|
||||||
@ -200,8 +196,6 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
newline( methodOutput );
|
newline( methodOutput );
|
||||||
methodOutput.append( "(import \"" ).append( importModule ).append( "\" \"" ).append( importName ).append( "\" (func $" ).append( normalizeName( name ) );
|
methodOutput.append( "(import \"" ).append( importModule ).append( "\" \"" ).append( importName ).append( "\" (func $" ).append( normalizeName( name ) );
|
||||||
isImport = true;
|
isImport = true;
|
||||||
importCount++;
|
|
||||||
function = name;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,21 +235,6 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
output.append( "(export \"" ).append( exportName ).append( "\" (func $" ).append( normalizeName( name ) ).append( "))" );
|
output.append( "(export \"" ).append( exportName ).append( "\" (func $" ).append( normalizeName( name ) ).append( "))" );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void writeMethodStart( FunctionName name, String sourceFile ) throws IOException {
|
|
||||||
function = name;
|
|
||||||
typeOutput.setLength( 0 );
|
|
||||||
newline( methodOutput );
|
|
||||||
methodOutput.append( "(func $" );
|
|
||||||
methodOutput.append( normalizeName( name ) );
|
|
||||||
inset++;
|
|
||||||
methodParamNames.clear();
|
|
||||||
functionCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write the name of a type.
|
* Write the name of a type.
|
||||||
*
|
*
|
||||||
@ -274,6 +253,16 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void writeMethodParamStart( @Nonnull FunctionName name ) throws IOException {
|
||||||
|
typeOutput.setLength( 0 );
|
||||||
|
methodParamNames.clear();
|
||||||
|
functionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@ -302,14 +291,14 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void writeMethodParamFinish( ) throws IOException {
|
protected void writeMethodParamFinish( @Nonnull FunctionName name ) throws IOException {
|
||||||
String typeStr = typeOutput.toString();
|
String typeStr = typeOutput.toString();
|
||||||
int idx = types.indexOf( typeStr );
|
int idx = types.indexOf( typeStr );
|
||||||
if( idx < 0 ) {
|
if( idx < 0 ) {
|
||||||
idx = types.size();
|
idx = types.size();
|
||||||
types.add( typeStr );
|
types.add( typeStr );
|
||||||
}
|
}
|
||||||
functions.put( function.signatureName, idx );
|
functions.put( name.signatureName, idx );
|
||||||
|
|
||||||
if( isImport ) {
|
if( isImport ) {
|
||||||
isImport = false;
|
isImport = false;
|
||||||
@ -317,6 +306,17 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void writeMethodStart( FunctionName name, String sourceFile ) throws IOException {
|
||||||
|
newline( methodOutput );
|
||||||
|
methodOutput.append( "(func $" );
|
||||||
|
methodOutput.append( normalizeName( name ) );
|
||||||
|
inset++;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@ -333,7 +333,6 @@ public class TextModuleWriter extends ModuleWriter {
|
|||||||
inset--;
|
inset--;
|
||||||
newline( methodOutput );
|
newline( methodOutput );
|
||||||
methodOutput.append( ')' );
|
methodOutput.append( ')' );
|
||||||
function = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user