src/share/classes/java/lang/invoke/BoundMethodHandle.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File jdk Sdiff src/share/classes/java/lang/invoke

src/share/classes/java/lang/invoke/BoundMethodHandle.java

Print this page
rev 9490 : 8037210: Get rid of char-based descriptions 'J' of basic types
Reviewed-by: jrose, ?
rev 9491 : imported patch meth-asm.enum


 623             }
 624 
 625             // finally, invoke the constructor and return
 626             mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", makeSignature(types, true));
 627             mv.visitInsn(ARETURN);
 628             mv.visitMaxs(0, 0);
 629             mv.visitEnd();
 630 
 631             // emit copyWith()
 632             mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "copyWith", makeSignature("", false), null, null);
 633             mv.visitCode();
 634             // make instance
 635             mv.visitTypeInsn(NEW, className);
 636             mv.visitInsn(DUP);
 637             // load mt, lf
 638             mv.visitVarInsn(ALOAD, 1);
 639             mv.visitVarInsn(ALOAD, 2);
 640             // put fields on the stack
 641             emitPushFields(types, className, mv);
 642             // finally, invoke the constructor and return
 643             mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", makeSignature(types, true));
 644             mv.visitInsn(ARETURN);
 645             mv.visitMaxs(0, 0);
 646             mv.visitEnd();
 647 
 648             // for each type, emit copyWithExtendT()
 649             for (BasicType type : BasicType.ARG_TYPES) {
 650                 int ord = type.ordinal();
 651                 char btChar = type.basicTypeChar();
 652                 mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "copyWithExtend" + btChar, makeSignature(String.valueOf(btChar), false), null, E_THROWABLE);
 653                 mv.visitCode();
 654                 // return SPECIES_DATA.extendWith(t).constructor[0].invokeBasic(mt, lf, argL0, ..., narg)
 655                 // obtain constructor
 656                 mv.visitFieldInsn(GETSTATIC, className, "SPECIES_DATA", SPECIES_DATA_SIG);
 657                 int iconstInsn = ICONST_0 + ord;
 658                 assert(iconstInsn <= ICONST_5);
 659                 mv.visitInsn(iconstInsn);
 660                 mv.visitMethodInsn(INVOKEVIRTUAL, SPECIES_DATA, "extendWith", BMHSPECIES_DATA_EWI_SIG);
 661                 mv.visitFieldInsn(GETFIELD, SPECIES_DATA, "constructor", "[" + MH_SIG);
 662                 mv.visitInsn(ICONST_0);
 663                 mv.visitInsn(AALOAD);
 664                 // load mt, lf
 665                 mv.visitVarInsn(ALOAD, 1);
 666                 mv.visitVarInsn(ALOAD, 2);
 667                 // put fields on the stack
 668                 emitPushFields(types, className, mv);
 669                 // put narg on stack
 670                 mv.visitVarInsn(typeLoadOp(btChar), 3);
 671                 // finally, invoke the constructor and return
 672                 mv.visitMethodInsn(INVOKEVIRTUAL, MH, "invokeBasic", makeSignature(types + btChar, false), false);
 673                 mv.visitInsn(ARETURN);
 674                 mv.visitMaxs(0, 0);
 675                 mv.visitEnd();
 676             }
 677 
 678             // emit class initializer
 679             mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "<clinit>", VOID_SIG, null, null);
 680             mv.visitCode();




 623             }
 624 
 625             // finally, invoke the constructor and return
 626             mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", makeSignature(types, true));
 627             mv.visitInsn(ARETURN);
 628             mv.visitMaxs(0, 0);
 629             mv.visitEnd();
 630 
 631             // emit copyWith()
 632             mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "copyWith", makeSignature("", false), null, null);
 633             mv.visitCode();
 634             // make instance
 635             mv.visitTypeInsn(NEW, className);
 636             mv.visitInsn(DUP);
 637             // load mt, lf
 638             mv.visitVarInsn(ALOAD, 1);
 639             mv.visitVarInsn(ALOAD, 2);
 640             // put fields on the stack
 641             emitPushFields(types, className, mv);
 642             // finally, invoke the constructor and return
 643             mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", makeSignature(types, true), false);
 644             mv.visitInsn(ARETURN);
 645             mv.visitMaxs(0, 0);
 646             mv.visitEnd();
 647 
 648             // for each type, emit copyWithExtendT()
 649             for (BasicType type : BasicType.ARG_TYPES) {
 650                 int ord = type.ordinal();
 651                 char btChar = type.basicTypeChar();
 652                 mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL, "copyWithExtend" + btChar, makeSignature(String.valueOf(btChar), false), null, E_THROWABLE);
 653                 mv.visitCode();
 654                 // return SPECIES_DATA.extendWith(t).constructor[0].invokeBasic(mt, lf, argL0, ..., narg)
 655                 // obtain constructor
 656                 mv.visitFieldInsn(GETSTATIC, className, "SPECIES_DATA", SPECIES_DATA_SIG);
 657                 int iconstInsn = ICONST_0 + ord;
 658                 assert(iconstInsn <= ICONST_5);
 659                 mv.visitInsn(iconstInsn);
 660                 mv.visitMethodInsn(INVOKEVIRTUAL, SPECIES_DATA, "extendWith", BMHSPECIES_DATA_EWI_SIG, false);
 661                 mv.visitFieldInsn(GETFIELD, SPECIES_DATA, "constructor", "[" + MH_SIG);
 662                 mv.visitInsn(ICONST_0);
 663                 mv.visitInsn(AALOAD);
 664                 // load mt, lf
 665                 mv.visitVarInsn(ALOAD, 1);
 666                 mv.visitVarInsn(ALOAD, 2);
 667                 // put fields on the stack
 668                 emitPushFields(types, className, mv);
 669                 // put narg on stack
 670                 mv.visitVarInsn(typeLoadOp(btChar), 3);
 671                 // finally, invoke the constructor and return
 672                 mv.visitMethodInsn(INVOKEVIRTUAL, MH, "invokeBasic", makeSignature(types + btChar, false), false);
 673                 mv.visitInsn(ARETURN);
 674                 mv.visitMaxs(0, 0);
 675                 mv.visitEnd();
 676             }
 677 
 678             // emit class initializer
 679             mv = cw.visitMethod(ACC_PUBLIC | ACC_STATIC, "<clinit>", VOID_SIG, null, null);
 680             mv.visitCode();


src/share/classes/java/lang/invoke/BoundMethodHandle.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File