Mercurial > hg > graal-jvmci-8
diff src/share/vm/graal/graalEnv.cpp @ 8945:7ef66078d837
add basic invokedynamic support
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Tue, 09 Apr 2013 17:11:17 +0200 |
parents | b89a97928e72 |
children | 23762f2438b6 |
line wrap: on
line diff
--- a/src/share/vm/graal/graalEnv.cpp Tue Apr 09 11:55:19 2013 +0200 +++ b/src/share/vm/graal/graalEnv.cpp Tue Apr 09 17:11:17 2013 +0200 @@ -319,6 +319,19 @@ methodHandle GraalEnv::get_method_by_index_impl(constantPoolHandle& cpool, int index, Bytecodes::Code bc, instanceKlassHandle& accessor) { + if (bc == Bytecodes::_invokedynamic) { + ConstantPoolCacheEntry* cpce = cpool->invokedynamic_cp_cache_entry_at(index); + bool is_resolved = !cpce->is_f1_null(); + if (is_resolved) { + // Get the invoker Method* from the constant pool. + // (The appendix argument, if any, will be noted in the method's signature.) + Method* adapter = cpce->f1_as_method(); + return methodHandle(adapter); + } + + return NULL; + } + int holder_index = cpool->klass_ref_index_at(index); bool holder_is_accessible; KlassHandle holder = get_klass_by_index_impl(cpool, holder_index, holder_is_accessible, accessor); @@ -369,7 +382,6 @@ int index, Bytecodes::Code bc, instanceKlassHandle& accessor) { ResourceMark rm; - assert(bc != Bytecodes::_invokedynamic, "invokedynamic not yet supported"); return get_method_by_index_impl(cpool, index, bc, accessor); }