< prev index next >

src/java.base/share/classes/jdk/internal/org/objectweb/asm/Frame.java

Print this page
rev 52850 : imported patch method-var-handles


 756      */
 757     static int type(final ClassWriter cw, final String desc) {
 758         String t;
 759         int index = desc.charAt(0) == '(' ? desc.indexOf(')') + 1 : 0;
 760         switch (desc.charAt(index)) {
 761         case 'V':
 762             return 0;
 763         case 'Z':
 764         case 'C':
 765         case 'B':
 766         case 'S':
 767         case 'I':
 768             return INTEGER;
 769         case 'F':
 770             return FLOAT;
 771         case 'J':
 772             return LONG;
 773         case 'D':
 774             return DOUBLE;
 775         case 'L':

 776             // stores the internal name, not the descriptor!
 777             t = desc.substring(index + 1, desc.length() - 1);
 778             return OBJECT | cw.addType(t);
 779             // case '[':
 780         default:
 781             // extracts the dimensions and the element type
 782             int data;
 783             int dims = index + 1;
 784             while (desc.charAt(dims) == '[') {
 785                 ++dims;
 786             }
 787             switch (desc.charAt(dims)) {
 788             case 'Z':
 789                 data = BOOLEAN;
 790                 break;
 791             case 'C':
 792                 data = CHAR;
 793                 break;
 794             case 'B':
 795                 data = BYTE;
 796                 break;
 797             case 'S':
 798                 data = SHORT;
 799                 break;
 800             case 'I':
 801                 data = INTEGER;
 802                 break;
 803             case 'F':
 804                 data = FLOAT;
 805                 break;
 806             case 'J':
 807                 data = LONG;
 808                 break;
 809             case 'D':
 810                 data = DOUBLE;
 811                 break;
 812             // case 'L':

 813             default:
 814                 // stores the internal name, not the descriptor
 815                 t = desc.substring(dims + 1, desc.length() - 1);
 816                 data = OBJECT | cw.addType(t);
 817             }
 818             return (dims - index) << 28 | data;
 819         }
 820     }
 821 
 822     /**
 823      * Pops a type from the output frame stack and returns its value.
 824      *
 825      * @return the type that has been popped from the output frame stack.
 826      */
 827     private int pop() {
 828         if (outputStackTop > 0) {
 829             return outputStack[--outputStackTop];
 830         } else {
 831             // if the output frame stack is empty, pops from the input stack
 832             return STACK | -(--owner.inputStackTop);




 756      */
 757     static int type(final ClassWriter cw, final String desc) {
 758         String t;
 759         int index = desc.charAt(0) == '(' ? desc.indexOf(')') + 1 : 0;
 760         switch (desc.charAt(index)) {
 761         case 'V':
 762             return 0;
 763         case 'Z':
 764         case 'C':
 765         case 'B':
 766         case 'S':
 767         case 'I':
 768             return INTEGER;
 769         case 'F':
 770             return FLOAT;
 771         case 'J':
 772             return LONG;
 773         case 'D':
 774             return DOUBLE;
 775         case 'L':
 776         case 'Q':
 777             // stores the internal name, not the descriptor!
 778             t = desc.substring(index + 1, desc.length() - 1);
 779             return OBJECT | cw.addType(t);
 780             // case '[':
 781         default:
 782             // extracts the dimensions and the element type
 783             int data;
 784             int dims = index + 1;
 785             while (desc.charAt(dims) == '[') {
 786                 ++dims;
 787             }
 788             switch (desc.charAt(dims)) {
 789             case 'Z':
 790                 data = BOOLEAN;
 791                 break;
 792             case 'C':
 793                 data = CHAR;
 794                 break;
 795             case 'B':
 796                 data = BYTE;
 797                 break;
 798             case 'S':
 799                 data = SHORT;
 800                 break;
 801             case 'I':
 802                 data = INTEGER;
 803                 break;
 804             case 'F':
 805                 data = FLOAT;
 806                 break;
 807             case 'J':
 808                 data = LONG;
 809                 break;
 810             case 'D':
 811                 data = DOUBLE;
 812                 break;
 813             // case 'L':
 814             // case 'Q':
 815             default:
 816                 // stores the internal name, not the descriptor
 817                 t = desc.substring(dims + 1, desc.length() - 1);
 818                 data = OBJECT | cw.addType(t);
 819             }
 820             return (dims - index) << 28 | data;
 821         }
 822     }
 823 
 824     /**
 825      * Pops a type from the output frame stack and returns its value.
 826      *
 827      * @return the type that has been popped from the output frame stack.
 828      */
 829     private int pop() {
 830         if (outputStackTop > 0) {
 831             return outputStack[--outputStackTop];
 832         } else {
 833             // if the output frame stack is empty, pops from the input stack
 834             return STACK | -(--owner.inputStackTop);


< prev index next >