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

changeset 267
e2722bd43f3a
parent 117
24a47c3062fe
child 507
dbcba45123cd
equal deleted inserted replaced
263:825f23a4f262 267:e2722bd43f3a
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
142 /** Make an item representing an instance variable or method. 149 /** Make an item representing an instance variable or method.
143 * @param member The represented symbol. 150 * @param member The represented symbol.
144 * @param nonvirtual Is the reference not virtual? (true for constructors 151 * @param nonvirtual Is the reference not virtual? (true for constructors
145 * and private members). 152 * and private members).
146 */ 153 */
454 461
455 public String toString() { 462 public String toString() {
456 return "static(" + member + ")"; 463 return "static(" + member + ")";
457 } 464 }
458 } 465 }
466
467 /** An item representing a dynamic call site.
468 */
469 class DynamicItem extends StaticItem {
470 DynamicItem(Symbol member) {
471 super(member);
472 assert member.owner == syms.invokeDynamicType.tsym;
473 }
474
475 Item load() {
476 assert false;
477 return null;
478 }
479
480 void store() {
481 assert false;
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
459 498
460 /** An item representing an instance variable or method. 499 /** An item representing an instance variable or method.
461 */ 500 */
462 class MemberItem extends Item { 501 class MemberItem extends Item {
463 502

mercurial