comparison agent/src/share/classes/sun/jvm/hotspot/oops/GenerateOopMap.java @ 1602:136b78722a08

6939203: JSR 292 needs method handle constants Summary: Add new CP types CONSTANT_MethodHandle, CONSTANT_MethodType; extend 'ldc' bytecode. Reviewed-by: twisti, never
author jrose
date Wed, 09 Jun 2010 18:50:45 -0700
parents c18cbe5936b8
children 0a8e0d4345b3
comparison
equal deleted inserted replaced
1585:49fac4acd688 1602:136b78722a08
564 switch(currentBC.code()) { 564 switch(currentBC.code()) {
565 case Bytecodes._invokevirtual: 565 case Bytecodes._invokevirtual:
566 case Bytecodes._invokespecial: 566 case Bytecodes._invokespecial:
567 case Bytecodes._invokestatic: 567 case Bytecodes._invokestatic:
568 case Bytecodes._invokeinterface: 568 case Bytecodes._invokeinterface:
569 case Bytecodes._invokedynamic:
569 // FIXME: print signature of referenced method (need more 570 // FIXME: print signature of referenced method (need more
570 // accessors in ConstantPool and ConstantPoolCache) 571 // accessors in ConstantPool and ConstantPoolCache)
571 int idx = currentBC.getIndexBig(); 572 int idx = currentBC.getIndexBig();
572 tty.print(" idx " + idx); 573 tty.print(" idx " + idx);
573 /* 574 /*
603 switch(currentBC.code()) { 604 switch(currentBC.code()) {
604 case Bytecodes._invokevirtual: 605 case Bytecodes._invokevirtual:
605 case Bytecodes._invokespecial: 606 case Bytecodes._invokespecial:
606 case Bytecodes._invokestatic: 607 case Bytecodes._invokestatic:
607 case Bytecodes._invokeinterface: 608 case Bytecodes._invokeinterface:
609 case Bytecodes._invokedynamic:
608 // FIXME: print signature of referenced method (need more 610 // FIXME: print signature of referenced method (need more
609 // accessors in ConstantPool and ConstantPoolCache) 611 // accessors in ConstantPool and ConstantPoolCache)
610 int idx = currentBC.getIndexBig(); 612 int idx = currentBC.getIndexBig();
611 tty.print(" idx " + idx); 613 tty.print(" idx " + idx);
612 /* 614 /*
1132 switch(itr.code()) { 1134 switch(itr.code()) {
1133 case Bytecodes._invokevirtual: 1135 case Bytecodes._invokevirtual:
1134 case Bytecodes._invokespecial: 1136 case Bytecodes._invokespecial:
1135 case Bytecodes._invokestatic: 1137 case Bytecodes._invokestatic:
1136 case Bytecodes._invokeinterface: 1138 case Bytecodes._invokeinterface:
1139 case Bytecodes._invokedynamic:
1137 _itr_send = itr; 1140 _itr_send = itr;
1138 _report_result_for_send = true; 1141 _report_result_for_send = true;
1139 break; 1142 break;
1140 default: 1143 default:
1141 fillStackmapForOpcodes(itr, vars(), stack(), _stack_top); 1144 fillStackmapForOpcodes(itr, vars(), stack(), _stack_top);
1377 case Bytecodes._putfield: doField(false, false, itr.getIndexBig(), itr.bci()); break; 1380 case Bytecodes._putfield: doField(false, false, itr.getIndexBig(), itr.bci()); break;
1378 1381
1379 case Bytecodes._invokevirtual: 1382 case Bytecodes._invokevirtual:
1380 case Bytecodes._invokespecial: doMethod(false, false, itr.getIndexBig(), itr.bci()); break; 1383 case Bytecodes._invokespecial: doMethod(false, false, itr.getIndexBig(), itr.bci()); break;
1381 case Bytecodes._invokestatic: doMethod(true, false, itr.getIndexBig(), itr.bci()); break; 1384 case Bytecodes._invokestatic: doMethod(true, false, itr.getIndexBig(), itr.bci()); break;
1385 case Bytecodes._invokedynamic: doMethod(false, true, itr.getIndexBig(), itr.bci()); break;
1382 case Bytecodes._invokeinterface: doMethod(false, true, itr.getIndexBig(), itr.bci()); break; 1386 case Bytecodes._invokeinterface: doMethod(false, true, itr.getIndexBig(), itr.bci()); break;
1383 case Bytecodes._newarray: 1387 case Bytecodes._newarray:
1384 case Bytecodes._anewarray: ppNewRef(vCTS, itr.bci()); break; 1388 case Bytecodes._anewarray: ppNewRef(vCTS, itr.bci()); break;
1385 case Bytecodes._checkcast: doCheckcast(); break; 1389 case Bytecodes._checkcast: doCheckcast(); break;
1386 case Bytecodes._arraylength: 1390 case Bytecodes._arraylength:
1723 } 1727 }
1724 1728
1725 void doMethod (boolean is_static, boolean is_interface, int idx, int bci) { 1729 void doMethod (boolean is_static, boolean is_interface, int idx, int bci) {
1726 // Dig up signature for field in constant pool 1730 // Dig up signature for field in constant pool
1727 ConstantPool cp = _method.getConstants(); 1731 ConstantPool cp = _method.getConstants();
1728 int nameAndTypeIdx = cp.getNameAndTypeRefIndexAt(idx); 1732 int nameAndTypeIdx = cp.getTagAt(idx).isNameAndType() ? idx : cp.getNameAndTypeRefIndexAt(idx);
1729 int signatureIdx = cp.getSignatureRefIndexAt(nameAndTypeIdx); 1733 int signatureIdx = cp.getSignatureRefIndexAt(nameAndTypeIdx);
1730 Symbol signature = cp.getSymbolAt(signatureIdx); 1734 Symbol signature = cp.getSymbolAt(signatureIdx);
1731 1735
1732 if (DEBUG) { 1736 if (DEBUG) {
1733 System.err.println("doMethod: signature = " + signature.asString() + ", idx = " + idx + 1737 System.err.println("doMethod: signature = " + signature.asString() + ", idx = " + idx +