src/share/classes/com/sun/tools/javac/jvm/Items.java

changeset 820
2d5aff89aaa3
parent 816
7c537f4298fb
child 1336
26d93df3905a
equal deleted inserted replaced
819:a466f00c5cd2 820:2d5aff89aaa3
137 */ 137 */
138 Item makeStaticItem(Symbol member) { 138 Item makeStaticItem(Symbol member) {
139 return new StaticItem(member); 139 return new StaticItem(member);
140 } 140 }
141 141
142 /** Make an item representing a dynamically invoked method.
143 * @param member The represented symbol.
144 */
145 Item makeDynamicItem(Symbol member) {
146 return new DynamicItem(member);
147 }
148
149 /** Make an item representing an instance variable or method. 142 /** Make an item representing an instance variable or method.
150 * @param member The represented symbol. 143 * @param member The represented symbol.
151 * @param nonvirtual Is the reference not virtual? (true for constructors 144 * @param nonvirtual Is the reference not virtual? (true for constructors
152 * and private members). 145 * and private members).
153 */ 146 */
461 454
462 public String toString() { 455 public String toString() {
463 return "static(" + member + ")"; 456 return "static(" + member + ")";
464 } 457 }
465 } 458 }
466
467 /** An item representing a dynamic call site.
468 */
469 class DynamicItem extends StaticItem {
470 DynamicItem(Symbol member) {
471 super(member);
472 Assert.check(member.owner == syms.invokeDynamicType.tsym);
473 }
474
475 Item load() {
476 Assert.error();
477 return null;
478 }
479
480 void store() {
481 Assert.error();
482 }
483
484 Item invoke() {
485 // assert target.hasNativeInvokeDynamic();
486 MethodType mtype = (MethodType)member.erasure(types);
487 int rescode = Code.typecode(mtype.restype);
488 ClassFile.NameAndType descr = new ClassFile.NameAndType(member.name, mtype);
489 code.emitInvokedynamic(pool.put(descr), mtype);
490 return stackItem[rescode];
491 }
492
493 public String toString() {
494 return "dynamic(" + member + ")";
495 }
496 }
497
498 459
499 /** An item representing an instance variable or method. 460 /** An item representing an instance variable or method.
500 */ 461 */
501 class MemberItem extends Item { 462 class MemberItem extends Item {
502 463

mercurial