mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-15 10:44:47 +01:00
get_i32 must mark as used if used for field access
This commit is contained in:
parent
5c3536ffd3
commit
371cde8c0e
@ -20,7 +20,6 @@ import java.io.IOException;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import de.inetsoftware.jwebassembly.javascript.JavaScriptSyntheticFunctionName;
|
||||
import de.inetsoftware.jwebassembly.module.TypeManager.StructType;
|
||||
import de.inetsoftware.jwebassembly.wasm.MemoryOperator;
|
||||
import de.inetsoftware.jwebassembly.wasm.NamedStorageType;
|
||||
@ -123,7 +122,7 @@ class WasmCallIndirectInstruction extends WasmCallInstruction {
|
||||
writer.writeStructOperator( StructOperator.GET, type, new NamedStorageType( type, "", "vtable" ), 0 ); // vtable is ever on position 0
|
||||
} else {
|
||||
writer.writeConst( 0, ValueType.i32 ); // vtable is ever on position 0
|
||||
writer.writeFunctionCall( new JavaScriptSyntheticFunctionName( "NonGC", "get_i32", () -> "(a,i) => a[i]", ValueType.anyref, ValueType.i32, null, ValueType.i32 ) );
|
||||
writer.writeFunctionCall( WasmCodeBuilder.GET_I32 );
|
||||
}
|
||||
writer.writeMemoryOperator( MemoryOperator.load, ValueType.i32, virtualFunctionIdx * 4, 2 );
|
||||
writer.writeVirtualFunctionCall( getFunctionName(), type );
|
||||
|
@ -29,6 +29,7 @@ import de.inetsoftware.classparser.LocalVariableTable;
|
||||
import de.inetsoftware.classparser.Member;
|
||||
import de.inetsoftware.classparser.MethodInfo;
|
||||
import de.inetsoftware.jwebassembly.WasmException;
|
||||
import de.inetsoftware.jwebassembly.javascript.JavaScriptSyntheticFunctionName;
|
||||
import de.inetsoftware.jwebassembly.javascript.NonGC;
|
||||
import de.inetsoftware.jwebassembly.module.WasmInstruction.Type;
|
||||
import de.inetsoftware.jwebassembly.wasm.AnyType;
|
||||
@ -50,6 +51,11 @@ import de.inetsoftware.jwebassembly.wasm.WasmOptions;
|
||||
*/
|
||||
public abstract class WasmCodeBuilder {
|
||||
|
||||
/**
|
||||
* declare for frequently use of virtual call with non GC mode.
|
||||
*/
|
||||
static final SyntheticFunctionName GET_I32 = new JavaScriptSyntheticFunctionName( "NonGC", "get_i32", () -> "(a,i) => a[i]", ValueType.anyref, ValueType.i32, null, ValueType.i32 );
|
||||
|
||||
private final LocaleVariableManager localVariables = new LocaleVariableManager();
|
||||
|
||||
private final List<WasmInstruction> instructions = new ArrayList<>();
|
||||
@ -486,6 +492,10 @@ public abstract class WasmCodeBuilder {
|
||||
}
|
||||
virtualCall.setVariableIndexOfThis( varIndex );
|
||||
instructions.add( virtualCall );
|
||||
if( !options.useGC() ) {
|
||||
functions.markAsNeeded( GET_I32, true );
|
||||
functions.markAsImport( GET_I32, GET_I32.getAnnotation() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user