mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-25 07:27:52 +01:00
implements java/lang/reflect/Array.newInstance
This commit is contained in:
parent
a74563c5d1
commit
1c84eac0dc
@ -129,4 +129,38 @@ public class ReplacementForArray {
|
|||||||
+ "array.len [S " //
|
+ "array.len [S " //
|
||||||
+ "return " )
|
+ "return " )
|
||||||
private static native int getLengthOfShorts( Object obj );
|
private static native int getLengthOfShorts( Object obj );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replacement of the native Java methods Array.newInstance(c,l)
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
* the object
|
||||||
|
* @return the length of the object
|
||||||
|
*/
|
||||||
|
@Replace( "java/lang/reflect/Array.newInstance(Ljava/lang/Class;I)Ljava/lang/Object;" )
|
||||||
|
private static Object array_newInstance( ReplacementForClass componentClass, int length ) {
|
||||||
|
int vtable = componentClass.vtable;
|
||||||
|
int componentType = getIntFromMemory( vtable + TYPE_DESCRIPTION_INSTANCEOF_OFFSET );
|
||||||
|
switch( componentType ) {
|
||||||
|
case BOOLEAN:
|
||||||
|
return new boolean[length];
|
||||||
|
case BYTE:
|
||||||
|
return new byte[length];
|
||||||
|
case CHAR:
|
||||||
|
return new char[length];
|
||||||
|
case DOUBLE:
|
||||||
|
return new double[length];
|
||||||
|
case FLOAT:
|
||||||
|
return new float[length];
|
||||||
|
case INT:
|
||||||
|
return new int[length];
|
||||||
|
case LONG:
|
||||||
|
return new long[length];
|
||||||
|
case SHORT:
|
||||||
|
return new short[length];
|
||||||
|
default:
|
||||||
|
//TODO it should return the right component array
|
||||||
|
return new Object[length];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,10 @@ import de.inetsoftware.jwebassembly.module.TypeManager;
|
|||||||
@Replace( "java/lang/Class" )
|
@Replace( "java/lang/Class" )
|
||||||
class ReplacementForClass {
|
class ReplacementForClass {
|
||||||
|
|
||||||
private final int vtable;
|
/**
|
||||||
|
* The pointer in the memory for the class/type description.
|
||||||
|
*/
|
||||||
|
final int vtable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a instance
|
* Create a instance
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package de.inetsoftware.jwebassembly.runtime;
|
package de.inetsoftware.jwebassembly.runtime;
|
||||||
|
|
||||||
|
import java.lang.reflect.Array;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -81,6 +82,7 @@ public class ArrayOperations extends AbstractBaseTest {
|
|||||||
addParam( list, script, "doubleArrayComponentTypeClassName" );
|
addParam( list, script, "doubleArrayComponentTypeClassName" );
|
||||||
addParam( list, script, "booleanArrayComponentTypeClassName" );
|
addParam( list, script, "booleanArrayComponentTypeClassName" );
|
||||||
addParam( list, script, "objectArrayComponentTypeClassName" );
|
addParam( list, script, "objectArrayComponentTypeClassName" );
|
||||||
|
addParam( list, script, "arrayNewInstance_getLength" );
|
||||||
}
|
}
|
||||||
rule.setTestParameters( list );
|
rule.setTestParameters( list );
|
||||||
return list;
|
return list;
|
||||||
@ -318,5 +320,11 @@ public class ArrayOperations extends AbstractBaseTest {
|
|||||||
static String objectArrayComponentTypeClassName() {
|
static String objectArrayComponentTypeClassName() {
|
||||||
return JSObject.domString( new Object[0].getClass().getComponentType().getName() );
|
return JSObject.domString( new Object[0].getClass().getComponentType().getName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Export
|
||||||
|
static int arrayNewInstance_getLength() {
|
||||||
|
Object obj = Array.newInstance( byte.class, 42 );
|
||||||
|
return Array.getLength( obj );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user