1647 } else {
1648 Class<? extends Object[]> objArrayType = arrayType.asSubclass(Object[].class);
1649 Object[] example = Arrays.copyOf(NO_ARGS_ARRAY, 0, objArrayType);
1650 MethodHandle builder = Lazy.MH_fillNewTypedArray.bindTo(example);
1651 MethodHandle producer = Lazy.MH_arrayIdentity; // must be weakly typed
1652 mh = buildVarargsArray(builder, producer, nargs);
1653 }
1654 mh = mh.asType(MethodType.methodType(arrayType, Collections.<Class<?>>nCopies(nargs, elemType)));
1655 mh = makeIntrinsic(mh, Intrinsic.NEW_ARRAY);
1656 assert(assertCorrectArity(mh, nargs));
1657 if (nargs < cache.length)
1658 cache[nargs] = mh;
1659 return mh;
1660 }
1661
1662 private static MethodHandle buildArrayProducer(Class<?> arrayType) {
1663 Class<?> elemType = arrayType.getComponentType();
1664 assert(elemType.isPrimitive());
1665 return Lazy.MH_copyAsPrimitiveArray.bindTo(Wrapper.forPrimitiveType(elemType));
1666 }
1667 }
|
1647 } else {
1648 Class<? extends Object[]> objArrayType = arrayType.asSubclass(Object[].class);
1649 Object[] example = Arrays.copyOf(NO_ARGS_ARRAY, 0, objArrayType);
1650 MethodHandle builder = Lazy.MH_fillNewTypedArray.bindTo(example);
1651 MethodHandle producer = Lazy.MH_arrayIdentity; // must be weakly typed
1652 mh = buildVarargsArray(builder, producer, nargs);
1653 }
1654 mh = mh.asType(MethodType.methodType(arrayType, Collections.<Class<?>>nCopies(nargs, elemType)));
1655 mh = makeIntrinsic(mh, Intrinsic.NEW_ARRAY);
1656 assert(assertCorrectArity(mh, nargs));
1657 if (nargs < cache.length)
1658 cache[nargs] = mh;
1659 return mh;
1660 }
1661
1662 private static MethodHandle buildArrayProducer(Class<?> arrayType) {
1663 Class<?> elemType = arrayType.getComponentType();
1664 assert(elemType.isPrimitive());
1665 return Lazy.MH_copyAsPrimitiveArray.bindTo(Wrapper.forPrimitiveType(elemType));
1666 }
1667
1668 /*non-public*/ static void assertSame(Object mh1, Object mh2) {
1669 if (mh1 != mh2) {
1670 String msg = String.format("mh1 != mh2: mh1 = %s (form: %s); mh2 = %s (form: %s)",
1671 mh1, ((MethodHandle)mh1).form,
1672 mh2, ((MethodHandle)mh2).form);
1673 throw newInternalError(msg);
1674 }
1675 }
1676 }
|