1.1 --- a/src/share/vm/interpreter/bytecode.cpp Mon Jul 23 13:04:59 2012 -0700 1.2 +++ b/src/share/vm/interpreter/bytecode.cpp Tue Jul 24 10:51:00 2012 -0700 1.3 @@ -120,19 +120,22 @@ 1.4 1.5 void Bytecode_invoke::verify() const { 1.6 assert(is_valid(), "check invoke"); 1.7 - assert(method()->constants()->cache() != NULL, "do not call this from verifier or rewriter"); 1.8 + assert(cpcache() != NULL, "do not call this from verifier or rewriter"); 1.9 } 1.10 1.11 1.12 -Symbol* Bytecode_member_ref::signature() const { 1.13 - constantPoolOop constants = method()->constants(); 1.14 - return constants->signature_ref_at(index()); 1.15 +Symbol* Bytecode_member_ref::klass() const { 1.16 + return constants()->klass_ref_at_noresolve(index()); 1.17 } 1.18 1.19 1.20 Symbol* Bytecode_member_ref::name() const { 1.21 - constantPoolOop constants = method()->constants(); 1.22 - return constants->name_ref_at(index()); 1.23 + return constants()->name_ref_at(index()); 1.24 +} 1.25 + 1.26 + 1.27 +Symbol* Bytecode_member_ref::signature() const { 1.28 + return constants()->signature_ref_at(index()); 1.29 } 1.30 1.31 1.32 @@ -146,18 +149,19 @@ 1.33 methodHandle Bytecode_invoke::static_target(TRAPS) { 1.34 methodHandle m; 1.35 KlassHandle resolved_klass; 1.36 - constantPoolHandle constants(THREAD, _method->constants()); 1.37 + constantPoolHandle constants(THREAD, this->constants()); 1.38 1.39 - if (java_code() == Bytecodes::_invokedynamic) { 1.40 - LinkResolver::resolve_dynamic_method(m, resolved_klass, constants, index(), CHECK_(methodHandle())); 1.41 - } else if (java_code() != Bytecodes::_invokeinterface) { 1.42 - LinkResolver::resolve_method(m, resolved_klass, constants, index(), CHECK_(methodHandle())); 1.43 - } else { 1.44 - LinkResolver::resolve_interface_method(m, resolved_klass, constants, index(), CHECK_(methodHandle())); 1.45 - } 1.46 + Bytecodes::Code bc = invoke_code(); 1.47 + LinkResolver::resolve_method_statically(m, resolved_klass, bc, constants, index(), CHECK_(methodHandle())); 1.48 return m; 1.49 } 1.50 1.51 +Handle Bytecode_invoke::appendix(TRAPS) { 1.52 + ConstantPoolCacheEntry* cpce = cpcache_entry(); 1.53 + if (cpce->has_appendix()) 1.54 + return Handle(THREAD, cpce->f1_appendix()); 1.55 + return Handle(); // usual case 1.56 +} 1.57 1.58 int Bytecode_member_ref::index() const { 1.59 // Note: Rewriter::rewrite changes the Java_u2 of an invokedynamic to a native_u4, 1.60 @@ -170,12 +174,16 @@ 1.61 } 1.62 1.63 int Bytecode_member_ref::pool_index() const { 1.64 + return cpcache_entry()->constant_pool_index(); 1.65 +} 1.66 + 1.67 +ConstantPoolCacheEntry* Bytecode_member_ref::cpcache_entry() const { 1.68 int index = this->index(); 1.69 DEBUG_ONLY({ 1.70 if (!has_index_u4(code())) 1.71 - index -= constantPoolOopDesc::CPCACHE_INDEX_TAG; 1.72 + index = constantPoolOopDesc::get_cpcache_index(index); 1.73 }); 1.74 - return _method->constants()->cache()->entry_at(index)->constant_pool_index(); 1.75 + return cpcache()->entry_at(index); 1.76 } 1.77 1.78 // Implementation of Bytecode_field