212 assertEquals((float) i, (float) mh_fz.invokeExact(x)); // boolean -> float |
212 assertEquals((float) i, (float) mh_fz.invokeExact(x)); // boolean -> float |
213 assertEquals((double) i, (double) mh_dz.invokeExact(x)); // boolean -> double |
213 assertEquals((double) i, (double) mh_dz.invokeExact(x)); // boolean -> double |
214 } |
214 } |
215 private static void boolean2prim_invalid(boolean x) throws Throwable { |
215 private static void boolean2prim_invalid(boolean x) throws Throwable { |
216 if (DO_CASTS) return; |
216 if (DO_CASTS) return; |
217 try { byte y = (byte) mh_bz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> byte |
217 try { byte y = (byte) mh_bz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> byte |
218 try { char y = (char) mh_cz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> char |
218 try { char y = (char) mh_cz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> char |
219 try { short y = (short) mh_sz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> short |
219 try { short y = (short) mh_sz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> short |
220 try { int y = (int) mh_iz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> int |
220 try { int y = (int) mh_iz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> int |
221 try { long y = (long) mh_jz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> long |
221 try { long y = (long) mh_jz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> long |
222 try { float y = (float) mh_fz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> float |
222 try { float y = (float) mh_fz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> float |
223 try { double y = (double) mh_dz.invokeExact(x); fail(); } catch (ClassCastException _) {} // boolean -> double |
223 try { double y = (double) mh_dz.invokeExact(x); fail(); } catch (ClassCastException expected) {} // boolean -> double |
224 } |
224 } |
225 |
225 |
226 private static MethodHandle mh_b(Class ret) { return mh(ret, byte.class); } |
226 private static MethodHandle mh_b(Class ret) { return mh(ret, byte.class); } |
227 |
227 |
228 private final static MethodHandle mh_zb = mh_b(boolean.class); |
228 private final static MethodHandle mh_zb = mh_b(boolean.class); |
246 assertEquals((char) x, (char) mh_cb.invokeExact(x)); // byte -> char |
246 assertEquals((char) x, (char) mh_cb.invokeExact(x)); // byte -> char |
247 assertEquals((boolean) z, (boolean) mh_zb.invokeExact(x)); // byte -> boolean |
247 assertEquals((boolean) z, (boolean) mh_zb.invokeExact(x)); // byte -> boolean |
248 } |
248 } |
249 private static void byte2prim_invalid(byte x) throws Throwable { |
249 private static void byte2prim_invalid(byte x) throws Throwable { |
250 if (DO_CASTS) return; |
250 if (DO_CASTS) return; |
251 try { char y = (char) mh_cb.invokeExact(x); fail(); } catch (ClassCastException _) {} // byte -> char |
251 try { char y = (char) mh_cb.invokeExact(x); fail(); } catch (ClassCastException expected) {} // byte -> char |
252 try { boolean y = (boolean) mh_zb.invokeExact(x); fail(); } catch (ClassCastException _) {} // byte -> boolean |
252 try { boolean y = (boolean) mh_zb.invokeExact(x); fail(); } catch (ClassCastException expected) {} // byte -> boolean |
253 } |
253 } |
254 |
254 |
255 private static MethodHandle mh_c(Class ret) { return mh(ret, char.class); } |
255 private static MethodHandle mh_c(Class ret) { return mh(ret, char.class); } |
256 |
256 |
257 private final static MethodHandle mh_zc = mh_c(boolean.class); |
257 private final static MethodHandle mh_zc = mh_c(boolean.class); |
275 assertEquals((byte) x, (byte) mh_bc.invokeExact(x)); // char -> byte |
275 assertEquals((byte) x, (byte) mh_bc.invokeExact(x)); // char -> byte |
276 assertEquals((short) x, (short) mh_sc.invokeExact(x)); // char -> short |
276 assertEquals((short) x, (short) mh_sc.invokeExact(x)); // char -> short |
277 } |
277 } |
278 private static void char2prim_invalid(char x) throws Throwable { |
278 private static void char2prim_invalid(char x) throws Throwable { |
279 if (DO_CASTS) return; |
279 if (DO_CASTS) return; |
280 try { boolean y = (boolean) mh_zc.invokeExact(x); fail(); } catch (ClassCastException _) {} // char -> boolean |
280 try { boolean y = (boolean) mh_zc.invokeExact(x); fail(); } catch (ClassCastException expected) {} // char -> boolean |
281 try { byte y = (byte) mh_bc.invokeExact(x); fail(); } catch (ClassCastException _) {} // char -> byte |
281 try { byte y = (byte) mh_bc.invokeExact(x); fail(); } catch (ClassCastException expected) {} // char -> byte |
282 try { short y = (short) mh_sc.invokeExact(x); fail(); } catch (ClassCastException _) {} // char -> short |
282 try { short y = (short) mh_sc.invokeExact(x); fail(); } catch (ClassCastException expected) {} // char -> short |
283 } |
283 } |
284 |
284 |
285 private static MethodHandle mh_s(Class ret) { return mh(ret, short.class); } |
285 private static MethodHandle mh_s(Class ret) { return mh(ret, short.class); } |
286 |
286 |
287 private final static MethodHandle mh_zs = mh_s(boolean.class); |
287 private final static MethodHandle mh_zs = mh_s(boolean.class); |
305 assertEquals((byte) x, (byte) mh_bs.invokeExact(x)); // short -> byte |
305 assertEquals((byte) x, (byte) mh_bs.invokeExact(x)); // short -> byte |
306 assertEquals((char) x, (char) mh_cs.invokeExact(x)); // short -> char |
306 assertEquals((char) x, (char) mh_cs.invokeExact(x)); // short -> char |
307 } |
307 } |
308 private static void short2prim_invalid(short x) throws Throwable { |
308 private static void short2prim_invalid(short x) throws Throwable { |
309 if (DO_CASTS) return; |
309 if (DO_CASTS) return; |
310 try { boolean y = (boolean) mh_zs.invokeExact(x); fail(); } catch (ClassCastException _) {} // short -> boolean |
310 try { boolean y = (boolean) mh_zs.invokeExact(x); fail(); } catch (ClassCastException expected) {} // short -> boolean |
311 try { byte y = (byte) mh_bs.invokeExact(x); fail(); } catch (ClassCastException _) {} // short -> byte |
311 try { byte y = (byte) mh_bs.invokeExact(x); fail(); } catch (ClassCastException expected) {} // short -> byte |
312 try { char y = (char) mh_cs.invokeExact(x); fail(); } catch (ClassCastException _) {} // short -> char |
312 try { char y = (char) mh_cs.invokeExact(x); fail(); } catch (ClassCastException expected) {} // short -> char |
313 } |
313 } |
314 |
314 |
315 private static MethodHandle mh_i(Class ret) { return mh(ret, int.class); } |
315 private static MethodHandle mh_i(Class ret) { return mh(ret, int.class); } |
316 |
316 |
317 private final static MethodHandle mh_zi = mh_i(boolean.class); |
317 private final static MethodHandle mh_zi = mh_i(boolean.class); |
335 assertEquals((char) x, (char) mh_ci.invokeExact(x)); // int -> char |
335 assertEquals((char) x, (char) mh_ci.invokeExact(x)); // int -> char |
336 assertEquals((short) x, (short) mh_si.invokeExact(x)); // int -> short |
336 assertEquals((short) x, (short) mh_si.invokeExact(x)); // int -> short |
337 } |
337 } |
338 private static void int2prim_invalid(int x) throws Throwable { |
338 private static void int2prim_invalid(int x) throws Throwable { |
339 if (DO_CASTS) return; |
339 if (DO_CASTS) return; |
340 try { boolean y = (boolean) mh_zi.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> boolean |
340 try { boolean y = (boolean) mh_zi.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> boolean |
341 try { byte y = (byte) mh_bi.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> byte |
341 try { byte y = (byte) mh_bi.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> byte |
342 try { char y = (char) mh_ci.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> char |
342 try { char y = (char) mh_ci.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> char |
343 try { short y = (short) mh_si.invokeExact(x); fail(); } catch (ClassCastException _) {} // int -> short |
343 try { short y = (short) mh_si.invokeExact(x); fail(); } catch (ClassCastException expected) {} // int -> short |
344 } |
344 } |
345 |
345 |
346 private static MethodHandle mh_j(Class ret) { return mh(ret, long.class); } |
346 private static MethodHandle mh_j(Class ret) { return mh(ret, long.class); } |
347 |
347 |
348 private final static MethodHandle mh_zj = mh_j(boolean.class); |
348 private final static MethodHandle mh_zj = mh_j(boolean.class); |
366 assertEquals((short) x, (short) mh_sj.invokeExact(x)); // long -> short |
366 assertEquals((short) x, (short) mh_sj.invokeExact(x)); // long -> short |
367 assertEquals((int) x, (int) mh_ij.invokeExact(x)); // long -> int |
367 assertEquals((int) x, (int) mh_ij.invokeExact(x)); // long -> int |
368 } |
368 } |
369 private static void long2prim_invalid(long x) throws Throwable { |
369 private static void long2prim_invalid(long x) throws Throwable { |
370 if (DO_CASTS) return; |
370 if (DO_CASTS) return; |
371 try { boolean y = (boolean) mh_zj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> boolean |
371 try { boolean y = (boolean) mh_zj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> boolean |
372 try { byte y = (byte) mh_bj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> byte |
372 try { byte y = (byte) mh_bj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> byte |
373 try { char y = (char) mh_cj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> char |
373 try { char y = (char) mh_cj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> char |
374 try { short y = (short) mh_sj.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> short |
374 try { short y = (short) mh_sj.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> short |
375 try { int y = (int) mh_ij.invokeExact(x); fail(); } catch (ClassCastException _) {} // long -> int |
375 try { int y = (int) mh_ij.invokeExact(x); fail(); } catch (ClassCastException expected) {} // long -> int |
376 } |
376 } |
377 |
377 |
378 private static MethodHandle mh_f(Class ret) { return mh(ret, float.class); } |
378 private static MethodHandle mh_f(Class ret) { return mh(ret, float.class); } |
379 |
379 |
380 private final static MethodHandle mh_zf = mh_f(boolean.class); |
380 private final static MethodHandle mh_zf = mh_f(boolean.class); |
398 assertEquals((int) x, (int) mh_if.invokeExact(x)); // float -> int |
398 assertEquals((int) x, (int) mh_if.invokeExact(x)); // float -> int |
399 assertEquals((long) x, (long) mh_jf.invokeExact(x)); // float -> long |
399 assertEquals((long) x, (long) mh_jf.invokeExact(x)); // float -> long |
400 } |
400 } |
401 private static void float2prim_invalid(float x) throws Throwable { |
401 private static void float2prim_invalid(float x) throws Throwable { |
402 if (DO_CASTS) return; |
402 if (DO_CASTS) return; |
403 try { boolean y = (boolean) mh_zf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> boolean |
403 try { boolean y = (boolean) mh_zf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> boolean |
404 try { byte y = (byte) mh_bf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> byte |
404 try { byte y = (byte) mh_bf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> byte |
405 try { char y = (char) mh_cf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> char |
405 try { char y = (char) mh_cf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> char |
406 try { short y = (short) mh_sf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> short |
406 try { short y = (short) mh_sf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> short |
407 try { int y = (int) mh_if.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> int |
407 try { int y = (int) mh_if.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> int |
408 try { long y = (long) mh_jf.invokeExact(x); fail(); } catch (ClassCastException _) {} // float -> long |
408 try { long y = (long) mh_jf.invokeExact(x); fail(); } catch (ClassCastException expected) {} // float -> long |
409 } |
409 } |
410 |
410 |
411 private static MethodHandle mh_d(Class ret) { return mh(ret, double.class); } |
411 private static MethodHandle mh_d(Class ret) { return mh(ret, double.class); } |
412 |
412 |
413 private final static MethodHandle mh_zd = mh_d(boolean.class); |
413 private final static MethodHandle mh_zd = mh_d(boolean.class); |
431 assertEquals((long) x, (long) mh_jd.invokeExact(x)); // double -> long |
431 assertEquals((long) x, (long) mh_jd.invokeExact(x)); // double -> long |
432 assertEquals((float) x, (float) mh_fd.invokeExact(x)); // double -> float |
432 assertEquals((float) x, (float) mh_fd.invokeExact(x)); // double -> float |
433 } |
433 } |
434 private static void double2prim_invalid(double x) throws Throwable { |
434 private static void double2prim_invalid(double x) throws Throwable { |
435 if (DO_CASTS) return; |
435 if (DO_CASTS) return; |
436 try { boolean y = (boolean) mh_zd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> boolean |
436 try { boolean y = (boolean) mh_zd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> boolean |
437 try { byte y = (byte) mh_bd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> byte |
437 try { byte y = (byte) mh_bd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> byte |
438 try { char y = (char) mh_cd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> char |
438 try { char y = (char) mh_cd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> char |
439 try { short y = (short) mh_sd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> short |
439 try { short y = (short) mh_sd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> short |
440 try { int y = (int) mh_id.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> int |
440 try { int y = (int) mh_id.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> int |
441 try { long y = (long) mh_jd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> long |
441 try { long y = (long) mh_jd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> long |
442 try { float y = (float) mh_fd.invokeExact(x); fail(); } catch (ClassCastException _) {} // double -> float |
442 try { float y = (float) mh_fd.invokeExact(x); fail(); } catch (ClassCastException expected) {} // double -> float |
443 } |
443 } |
444 |
444 |
445 private final static MethodHandle mh_zv = mh(boolean.class); |
445 private final static MethodHandle mh_zv = mh(boolean.class); |
446 private final static MethodHandle mh_bv = mh(byte.class ); |
446 private final static MethodHandle mh_bv = mh(byte.class ); |
447 private final static MethodHandle mh_cv = mh(char.class ); |
447 private final static MethodHandle mh_cv = mh(char.class ); |