1837 case Opcodes.DLOAD:
1838 case Opcodes.ALOAD:
1839 case Opcodes.ISTORE:
1840 case Opcodes.LSTORE:
1841 case Opcodes.FSTORE:
1842 case Opcodes.DSTORE:
1843 case Opcodes.ASTORE:
1844 case Opcodes.RET:
1845 case Opcodes.BIPUSH:
1846 case Opcodes.NEWARRAY:
1847 case Opcodes.LDC:
1848 currentOffset += 2;
1849 break;
1850 case Opcodes.SIPUSH:
1851 case Constants.LDC_W:
1852 case Constants.LDC2_W:
1853 case Opcodes.GETSTATIC:
1854 case Opcodes.PUTSTATIC:
1855 case Opcodes.GETFIELD:
1856 case Opcodes.PUTFIELD:
1857 case Opcodes.INVOKEVIRTUAL:
1858 case Opcodes.INVOKESPECIAL:
1859 case Opcodes.INVOKESTATIC:
1860 case Opcodes.NEW:
1861 case Opcodes.ANEWARRAY:
1862 case Opcodes.CHECKCAST:
1863 case Opcodes.INSTANCEOF:
1864 case Opcodes.IINC:
1865 currentOffset += 3;
1866 break;
1867 case Opcodes.INVOKEINTERFACE:
1868 case Opcodes.INVOKEDYNAMIC:
1869 currentOffset += 5;
1870 break;
1871 case Opcodes.MULTIANEWARRAY:
1872 currentOffset += 4;
1873 break;
1874 default:
1875 throw new IllegalArgumentException();
1876 }
2449 methodVisitor.visitIntInsn(opcode, readShort(currentOffset + 1));
2450 currentOffset += 3;
2451 break;
2452 case Opcodes.LDC:
2453 methodVisitor.visitLdcInsn(readConst(classBuffer[currentOffset + 1] & 0xFF, charBuffer));
2454 currentOffset += 2;
2455 break;
2456 case Constants.LDC_W:
2457 case Constants.LDC2_W:
2458 methodVisitor.visitLdcInsn(readConst(readUnsignedShort(currentOffset + 1), charBuffer));
2459 currentOffset += 3;
2460 break;
2461 case Opcodes.GETSTATIC:
2462 case Opcodes.PUTSTATIC:
2463 case Opcodes.GETFIELD:
2464 case Opcodes.PUTFIELD:
2465 case Opcodes.INVOKEVIRTUAL:
2466 case Opcodes.INVOKESPECIAL:
2467 case Opcodes.INVOKESTATIC:
2468 case Opcodes.INVOKEINTERFACE:
2469 {
2470 int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)];
2471 int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)];
2472 String owner = readClass(cpInfoOffset, charBuffer);
2473 String name = readUTF8(nameAndTypeCpInfoOffset, charBuffer);
2474 String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer);
2475 if (opcode < Opcodes.INVOKEVIRTUAL) {
2476 methodVisitor.visitFieldInsn(opcode, owner, name, descriptor);
2477 } else {
2478 boolean isInterface =
2479 classBuffer[cpInfoOffset - 1] == Symbol.CONSTANT_INTERFACE_METHODREF_TAG;
2480 methodVisitor.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
2481 }
2482 if (opcode == Opcodes.INVOKEINTERFACE) {
2483 currentOffset += 5;
2484 } else {
2485 currentOffset += 3;
2486 }
2487 break;
2488 }
2489 case Opcodes.INVOKEDYNAMIC:
2490 {
2491 int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)];
2492 int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)];
2493 String name = readUTF8(nameAndTypeCpInfoOffset, charBuffer);
2494 String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer);
2495 int bootstrapMethodOffset = bootstrapMethodOffsets[readUnsignedShort(cpInfoOffset)];
2496 Handle handle =
2497 (Handle) readConst(readUnsignedShort(bootstrapMethodOffset), charBuffer);
2498 Object[] bootstrapMethodArguments =
2499 new Object[readUnsignedShort(bootstrapMethodOffset + 2)];
2500 bootstrapMethodOffset += 4;
2501 for (int i = 0; i < bootstrapMethodArguments.length; i++) {
2502 bootstrapMethodArguments[i] =
2503 readConst(readUnsignedShort(bootstrapMethodOffset), charBuffer);
2504 bootstrapMethodOffset += 2;
2505 }
2506 methodVisitor.visitInvokeDynamicInsn(
2507 name, descriptor, handle, bootstrapMethodArguments);
2508 currentOffset += 5;
2509 break;
2510 }
2511 case Opcodes.NEW:
2512 case Opcodes.ANEWARRAY:
2513 case Opcodes.CHECKCAST:
2514 case Opcodes.INSTANCEOF:
2515 methodVisitor.visitTypeInsn(opcode, readClass(currentOffset + 1, charBuffer));
2516 currentOffset += 3;
2517 break;
2518 case Opcodes.IINC:
2519 methodVisitor.visitIincInsn(
2520 classBuffer[currentOffset + 1] & 0xFF, classBuffer[currentOffset + 2]);
2521 currentOffset += 3;
2522 break;
2523 case Opcodes.MULTIANEWARRAY:
2524 methodVisitor.visitMultiANewArrayInsn(
2525 readClass(currentOffset + 1, charBuffer), classBuffer[currentOffset + 3] & 0xFF);
2526 currentOffset += 4;
2527 break;
2528 default:
2529 throw new AssertionError();
2530 }
2531
2532 // Visit the runtime visible instruction annotations, if any.
2533 while (visibleTypeAnnotationOffsets != null
2534 && currentVisibleTypeAnnotationIndex < visibleTypeAnnotationOffsets.length
3246 case 'Z':
3247 case 'C':
3248 case 'B':
3249 case 'S':
3250 case 'I':
3251 locals[numLocal++] = Opcodes.INTEGER;
3252 break;
3253 case 'F':
3254 locals[numLocal++] = Opcodes.FLOAT;
3255 break;
3256 case 'J':
3257 locals[numLocal++] = Opcodes.LONG;
3258 break;
3259 case 'D':
3260 locals[numLocal++] = Opcodes.DOUBLE;
3261 break;
3262 case '[':
3263 while (methodDescriptor.charAt(currentMethodDescritorOffset) == '[') {
3264 ++currentMethodDescritorOffset;
3265 }
3266 if (methodDescriptor.charAt(currentMethodDescritorOffset) == 'L') {
3267 ++currentMethodDescritorOffset;
3268 while (methodDescriptor.charAt(currentMethodDescritorOffset) != ';') {
3269 ++currentMethodDescritorOffset;
3270 }
3271 }
3272 locals[numLocal++] =
3273 methodDescriptor.substring(
3274 currentArgumentDescriptorStartOffset, ++currentMethodDescritorOffset);
3275 break;
3276 case 'L':
3277 while (methodDescriptor.charAt(currentMethodDescritorOffset) != ';') {
3278 ++currentMethodDescritorOffset;
3279 }
3280 locals[numLocal++] =
3281 methodDescriptor.substring(
3282 currentArgumentDescriptorStartOffset + 1, currentMethodDescritorOffset++);
3283 break;
3284 default:
3285 context.currentFrameLocalCount = numLocal;
3286 return;
|
1837 case Opcodes.DLOAD:
1838 case Opcodes.ALOAD:
1839 case Opcodes.ISTORE:
1840 case Opcodes.LSTORE:
1841 case Opcodes.FSTORE:
1842 case Opcodes.DSTORE:
1843 case Opcodes.ASTORE:
1844 case Opcodes.RET:
1845 case Opcodes.BIPUSH:
1846 case Opcodes.NEWARRAY:
1847 case Opcodes.LDC:
1848 currentOffset += 2;
1849 break;
1850 case Opcodes.SIPUSH:
1851 case Constants.LDC_W:
1852 case Constants.LDC2_W:
1853 case Opcodes.GETSTATIC:
1854 case Opcodes.PUTSTATIC:
1855 case Opcodes.GETFIELD:
1856 case Opcodes.PUTFIELD:
1857 case Opcodes.DEFAULT:
1858 case Opcodes.WITHFIELD:
1859 case Opcodes.INVOKEVIRTUAL:
1860 case Opcodes.INVOKESPECIAL:
1861 case Opcodes.INVOKESTATIC:
1862 case Opcodes.NEW:
1863 case Opcodes.ANEWARRAY:
1864 case Opcodes.CHECKCAST:
1865 case Opcodes.INSTANCEOF:
1866 case Opcodes.IINC:
1867 currentOffset += 3;
1868 break;
1869 case Opcodes.INVOKEINTERFACE:
1870 case Opcodes.INVOKEDYNAMIC:
1871 currentOffset += 5;
1872 break;
1873 case Opcodes.MULTIANEWARRAY:
1874 currentOffset += 4;
1875 break;
1876 default:
1877 throw new IllegalArgumentException();
1878 }
2451 methodVisitor.visitIntInsn(opcode, readShort(currentOffset + 1));
2452 currentOffset += 3;
2453 break;
2454 case Opcodes.LDC:
2455 methodVisitor.visitLdcInsn(readConst(classBuffer[currentOffset + 1] & 0xFF, charBuffer));
2456 currentOffset += 2;
2457 break;
2458 case Constants.LDC_W:
2459 case Constants.LDC2_W:
2460 methodVisitor.visitLdcInsn(readConst(readUnsignedShort(currentOffset + 1), charBuffer));
2461 currentOffset += 3;
2462 break;
2463 case Opcodes.GETSTATIC:
2464 case Opcodes.PUTSTATIC:
2465 case Opcodes.GETFIELD:
2466 case Opcodes.PUTFIELD:
2467 case Opcodes.INVOKEVIRTUAL:
2468 case Opcodes.INVOKESPECIAL:
2469 case Opcodes.INVOKESTATIC:
2470 case Opcodes.INVOKEINTERFACE:
2471 case Opcodes.WITHFIELD:
2472 {
2473 int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)];
2474 int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)];
2475 String owner = readClass(cpInfoOffset, charBuffer);
2476 String name = readUTF8(nameAndTypeCpInfoOffset, charBuffer);
2477 String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer);
2478 if (opcode >= Opcodes.INVOKEVIRTUAL && opcode <= Opcodes.INVOKEINTERFACE) {
2479 boolean isInterface =
2480 classBuffer[cpInfoOffset - 1] == Symbol.CONSTANT_INTERFACE_METHODREF_TAG;
2481 methodVisitor.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
2482 } else {
2483 methodVisitor.visitFieldInsn(opcode, owner, name, descriptor);
2484 }
2485 if (opcode == Opcodes.INVOKEINTERFACE) {
2486 currentOffset += 5;
2487 } else {
2488 currentOffset += 3;
2489 }
2490 break;
2491 }
2492 case Opcodes.INVOKEDYNAMIC:
2493 {
2494 int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)];
2495 int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)];
2496 String name = readUTF8(nameAndTypeCpInfoOffset, charBuffer);
2497 String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer);
2498 int bootstrapMethodOffset = bootstrapMethodOffsets[readUnsignedShort(cpInfoOffset)];
2499 Handle handle =
2500 (Handle) readConst(readUnsignedShort(bootstrapMethodOffset), charBuffer);
2501 Object[] bootstrapMethodArguments =
2502 new Object[readUnsignedShort(bootstrapMethodOffset + 2)];
2503 bootstrapMethodOffset += 4;
2504 for (int i = 0; i < bootstrapMethodArguments.length; i++) {
2505 bootstrapMethodArguments[i] =
2506 readConst(readUnsignedShort(bootstrapMethodOffset), charBuffer);
2507 bootstrapMethodOffset += 2;
2508 }
2509 methodVisitor.visitInvokeDynamicInsn(
2510 name, descriptor, handle, bootstrapMethodArguments);
2511 currentOffset += 5;
2512 break;
2513 }
2514 case Opcodes.NEW:
2515 case Opcodes.ANEWARRAY:
2516 case Opcodes.CHECKCAST:
2517 case Opcodes.INSTANCEOF:
2518 case Opcodes.DEFAULT:
2519 methodVisitor.visitTypeInsn(opcode, readClass(currentOffset + 1, charBuffer));
2520 currentOffset += 3;
2521 break;
2522 case Opcodes.IINC:
2523 methodVisitor.visitIincInsn(
2524 classBuffer[currentOffset + 1] & 0xFF, classBuffer[currentOffset + 2]);
2525 currentOffset += 3;
2526 break;
2527 case Opcodes.MULTIANEWARRAY:
2528 methodVisitor.visitMultiANewArrayInsn(
2529 readClass(currentOffset + 1, charBuffer), classBuffer[currentOffset + 3] & 0xFF);
2530 currentOffset += 4;
2531 break;
2532 default:
2533 throw new AssertionError();
2534 }
2535
2536 // Visit the runtime visible instruction annotations, if any.
2537 while (visibleTypeAnnotationOffsets != null
2538 && currentVisibleTypeAnnotationIndex < visibleTypeAnnotationOffsets.length
3250 case 'Z':
3251 case 'C':
3252 case 'B':
3253 case 'S':
3254 case 'I':
3255 locals[numLocal++] = Opcodes.INTEGER;
3256 break;
3257 case 'F':
3258 locals[numLocal++] = Opcodes.FLOAT;
3259 break;
3260 case 'J':
3261 locals[numLocal++] = Opcodes.LONG;
3262 break;
3263 case 'D':
3264 locals[numLocal++] = Opcodes.DOUBLE;
3265 break;
3266 case '[':
3267 while (methodDescriptor.charAt(currentMethodDescritorOffset) == '[') {
3268 ++currentMethodDescritorOffset;
3269 }
3270 char descType = methodDescriptor.charAt(currentMethodDescritorOffset);
3271 if (descType == 'L' || descType == 'Q') {
3272 ++currentMethodDescritorOffset;
3273 while (methodDescriptor.charAt(currentMethodDescritorOffset) != ';') {
3274 ++currentMethodDescritorOffset;
3275 }
3276 }
3277 locals[numLocal++] =
3278 methodDescriptor.substring(
3279 currentArgumentDescriptorStartOffset, ++currentMethodDescritorOffset);
3280 break;
3281 case 'L':
3282 while (methodDescriptor.charAt(currentMethodDescritorOffset) != ';') {
3283 ++currentMethodDescritorOffset;
3284 }
3285 locals[numLocal++] =
3286 methodDescriptor.substring(
3287 currentArgumentDescriptorStartOffset + 1, currentMethodDescritorOffset++);
3288 break;
3289 default:
3290 context.currentFrameLocalCount = numLocal;
3291 return;
|