/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Common Public License (CPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/cpl1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package java.lang.reflect; import org.jikesrvm.classloader.VM_Array; import org.jikesrvm.runtime.VM_Magic; import org.jikesrvm.runtime.VM_Runtime; /** * VM dependent Array operations */ class VMArray { /** * Dynamically create an array of objects. * * @param cls guaranteed to be a valid object type * @param length the length of the array * @return the new array * @throws NegativeArraySizeException if dim is negative * @throws OutOfMemoryError if memory allocation fails */ static Object createObjectArray(Class<?> cls, int length) throws OutOfMemoryError, NegativeArraySizeException { if(cls == null) throw new NullPointerException(); if(length < 0) throw new NegativeArraySizeException(); boolean forSubArch = VM_Magic.runningOnSubArch(); VM_Array arrayType = java.lang.JikesRVMSupport.getTypeForClass(cls).getArrayTypeForElementType(); if (!arrayType.isInitialized(forSubArch)) { arrayType.resolve(forSubArch); arrayType.instantiate(forSubArch); arrayType.initialize(forSubArch); } return VM_Runtime.resolvedNewArray(length, arrayType); } }