Mercurial > hg > truffle
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 + |