1 /* |
1 /* |
2 * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
108 */ |
108 */ |
109 Item makeStackItem(Type type) { |
109 Item makeStackItem(Type type) { |
110 return stackItem[Code.typecode(type)]; |
110 return stackItem[Code.typecode(type)]; |
111 } |
111 } |
112 |
112 |
|
113 /** Make an item representing a dynamically invoked method. |
|
114 * @param member The represented symbol. |
|
115 */ |
|
116 Item makeDynamicItem(Symbol member) { |
|
117 return new DynamicItem(member); |
|
118 } |
|
119 |
113 /** Make an item representing an indexed expression. |
120 /** Make an item representing an indexed expression. |
114 * @param type The expression's type. |
121 * @param type The expression's type. |
115 */ |
122 */ |
116 Item makeIndexedItem(Type type) { |
123 Item makeIndexedItem(Type type) { |
117 return new IndexedItem(type); |
124 return new IndexedItem(type); |
452 return stackItem[rescode]; |
459 return stackItem[rescode]; |
453 } |
460 } |
454 |
461 |
455 public String toString() { |
462 public String toString() { |
456 return "static(" + member + ")"; |
463 return "static(" + member + ")"; |
|
464 } |
|
465 } |
|
466 |
|
467 /** An item representing a dynamic call site. |
|
468 */ |
|
469 class DynamicItem extends StaticItem { |
|
470 DynamicItem(Symbol member) { |
|
471 super(member); |
|
472 } |
|
473 |
|
474 Item load() { |
|
475 assert false; |
|
476 return null; |
|
477 } |
|
478 |
|
479 void store() { |
|
480 assert false; |
|
481 } |
|
482 |
|
483 Item invoke() { |
|
484 // assert target.hasNativeInvokeDynamic(); |
|
485 MethodType mtype = (MethodType)member.erasure(types); |
|
486 int rescode = Code.typecode(mtype.restype); |
|
487 code.emitInvokedynamic(pool.put(member), mtype); |
|
488 return stackItem[rescode]; |
|
489 } |
|
490 |
|
491 public String toString() { |
|
492 return "dynamic(" + member + ")"; |
457 } |
493 } |
458 } |
494 } |
459 |
495 |
460 /** An item representing an instance variable or method. |
496 /** An item representing an instance variable or method. |
461 */ |
497 */ |