mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-15 02:44:47 +01:00
Fix array class name for more complex object arrays
This commit is contained in:
parent
0d7beb611b
commit
b9a904ab42
@ -671,7 +671,7 @@ class JavaMethodWasmCodeBuilder extends WasmCodeBuilder {
|
||||
break;
|
||||
case 189: // anewarray
|
||||
name = ((ConstantClass)constantPool.get( byteCode.readUnsignedShort() )).getName();
|
||||
type = ValueType.externref; //TODO we need to use the right type from name; getTypeManager().valueOf( name );
|
||||
type = getTypeManager().valueOf( name );
|
||||
addArrayInstruction( ArrayOperator.NEW, type, codePos, lineNumber );
|
||||
break;
|
||||
case 190: // arraylength
|
||||
|
@ -23,6 +23,7 @@ import javax.annotation.Nullable;
|
||||
|
||||
import de.inetsoftware.jwebassembly.WasmException;
|
||||
import de.inetsoftware.jwebassembly.javascript.JavaScriptSyntheticFunctionName;
|
||||
import de.inetsoftware.jwebassembly.module.TypeManager.StructType;
|
||||
import de.inetsoftware.jwebassembly.wasm.AnyType;
|
||||
import de.inetsoftware.jwebassembly.wasm.ArrayOperator;
|
||||
import de.inetsoftware.jwebassembly.wasm.ArrayType;
|
||||
@ -136,7 +137,10 @@ class WasmArrayInstruction extends WasmInstruction {
|
||||
* @return the identifier that is valid
|
||||
*/
|
||||
private static String validJsName( AnyType type ) {
|
||||
return type.isRefType() ? "obj" : type.toString();
|
||||
if( type.isRefType() ) {
|
||||
return ((StructType)type).getName().replace( '[', '_' ).replace( '/', '_' ).replace( '.', '_' ).replace( ";", "" );
|
||||
}
|
||||
return type.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -78,7 +78,10 @@ public class ArrayType extends StructType {
|
||||
throw new WasmException( "Not supported array type: " + arrayType, -1 );
|
||||
}
|
||||
}
|
||||
return "[" + ((StructType)arrayType).getName();
|
||||
if( arrayType instanceof ArrayType ) {
|
||||
return "[" + getJavaClassName( ((ArrayType)arrayType).arrayType );
|
||||
}
|
||||
return "[L" + ((StructType)arrayType).getName() + ";";
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -70,6 +70,8 @@ public class ArrayOperations extends AbstractBaseTest {
|
||||
addParam( list, script, "doubleArrayClassName" );
|
||||
addParam( list, script, "booleanArrayClassName" );
|
||||
addParam( list, script, "objectArrayClassName" );
|
||||
addParam( list, script, "stringArrayClassName" );
|
||||
addParam( list, script, "stringMatrixClassName" );
|
||||
addParam( list, script, "byteArrayComponentTypeClassName" );
|
||||
addParam( list, script, "shortArrayComponentTypeClassName" );
|
||||
addParam( list, script, "charArrayComponentTypeClassName" );
|
||||
@ -262,6 +264,16 @@ public class ArrayOperations extends AbstractBaseTest {
|
||||
return JSObject.domString( new Object[0].getClass().getName() );
|
||||
}
|
||||
|
||||
@Export
|
||||
static String stringArrayClassName() {
|
||||
return JSObject.domString( new String[0].getClass().getName() );
|
||||
}
|
||||
|
||||
@Export
|
||||
static String stringMatrixClassName() {
|
||||
return JSObject.domString( new String[0][].getClass().getName() );
|
||||
}
|
||||
|
||||
@Export
|
||||
static String byteArrayComponentTypeClassName() {
|
||||
return JSObject.domString( new byte[0].getClass().getComponentType().getName() );
|
||||
|
Loading…
x
Reference in New Issue
Block a user