498 /*non-public*/ static Object checkCast(Object mh, Object obj) {
499 return ((DirectMethodHandle) mh).checkCast(obj);
500 }
501
502 Object checkCast(Object obj) {
503 return member.getReturnType().cast(obj);
504 }
505
506 // Caching machinery for field accessors:
507 private static final byte
508 AF_GETFIELD = 0,
509 AF_PUTFIELD = 1,
510 AF_GETSTATIC = 2,
511 AF_PUTSTATIC = 3,
512 AF_GETSTATIC_INIT = 4,
513 AF_PUTSTATIC_INIT = 5,
514 AF_LIMIT = 6;
515 // Enumerate the different field kinds using Wrapper,
516 // with an extra case added for checked references.
517 private static final int
518 FT_LAST_WRAPPER = Wrapper.values().length-1,
519 FT_UNCHECKED_REF = Wrapper.OBJECT.ordinal(),
520 FT_CHECKED_REF = FT_LAST_WRAPPER+1,
521 FT_LIMIT = FT_LAST_WRAPPER+2;
522 private static int afIndex(byte formOp, boolean isVolatile, int ftypeKind) {
523 return ((formOp * FT_LIMIT * 2)
524 + (isVolatile ? FT_LIMIT : 0)
525 + ftypeKind);
526 }
527 @Stable
528 private static final LambdaForm[] ACCESSOR_FORMS
529 = new LambdaForm[afIndex(AF_LIMIT, false, 0)];
530 private static int ftypeKind(Class<?> ftype) {
531 if (ftype.isPrimitive())
532 return Wrapper.forPrimitiveType(ftype).ordinal();
533 else if (VerifyType.isNullReferenceConversion(Object.class, ftype))
534 return FT_UNCHECKED_REF;
535 else
536 return FT_CHECKED_REF;
537 }
538
|
498 /*non-public*/ static Object checkCast(Object mh, Object obj) {
499 return ((DirectMethodHandle) mh).checkCast(obj);
500 }
501
502 Object checkCast(Object obj) {
503 return member.getReturnType().cast(obj);
504 }
505
506 // Caching machinery for field accessors:
507 private static final byte
508 AF_GETFIELD = 0,
509 AF_PUTFIELD = 1,
510 AF_GETSTATIC = 2,
511 AF_PUTSTATIC = 3,
512 AF_GETSTATIC_INIT = 4,
513 AF_PUTSTATIC_INIT = 5,
514 AF_LIMIT = 6;
515 // Enumerate the different field kinds using Wrapper,
516 // with an extra case added for checked references.
517 private static final int
518 FT_LAST_WRAPPER = Wrapper.COUNT-1,
519 FT_UNCHECKED_REF = Wrapper.OBJECT.ordinal(),
520 FT_CHECKED_REF = FT_LAST_WRAPPER+1,
521 FT_LIMIT = FT_LAST_WRAPPER+2;
522 private static int afIndex(byte formOp, boolean isVolatile, int ftypeKind) {
523 return ((formOp * FT_LIMIT * 2)
524 + (isVolatile ? FT_LIMIT : 0)
525 + ftypeKind);
526 }
527 @Stable
528 private static final LambdaForm[] ACCESSOR_FORMS
529 = new LambdaForm[afIndex(AF_LIMIT, false, 0)];
530 private static int ftypeKind(Class<?> ftype) {
531 if (ftype.isPrimitive())
532 return Wrapper.forPrimitiveType(ftype).ordinal();
533 else if (VerifyType.isNullReferenceConversion(Object.class, ftype))
534 return FT_UNCHECKED_REF;
535 else
536 return FT_CHECKED_REF;
537 }
538
|