diff -r 99983a4a593b -r 26d93df3905a src/share/classes/com/sun/tools/javac/jvm/Items.java --- a/src/share/classes/com/sun/tools/javac/jvm/Items.java Tue Sep 25 11:52:37 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/jvm/Items.java Tue Sep 25 11:53:18 2012 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -110,6 +110,13 @@ return stackItem[Code.typecode(type)]; } + /** Make an item representing a dynamically invoked method. + * @param member The represented symbol. + */ + Item makeDynamicItem(Symbol member) { + return new DynamicItem(member); + } + /** Make an item representing an indexed expression. * @param type The expression's type. */ @@ -457,6 +464,35 @@ } } + /** An item representing a dynamic call site. + */ + class DynamicItem extends StaticItem { + DynamicItem(Symbol member) { + super(member); + } + + Item load() { + assert false; + return null; + } + + void store() { + assert false; + } + + Item invoke() { + // assert target.hasNativeInvokeDynamic(); + MethodType mtype = (MethodType)member.erasure(types); + int rescode = Code.typecode(mtype.restype); + code.emitInvokedynamic(pool.put(member), mtype); + return stackItem[rescode]; + } + + public String toString() { + return "dynamic(" + member + ")"; + } + } + /** An item representing an instance variable or method. */ class MemberItem extends Item {