src/share/vm/interpreter/bytecode.cpp

changeset 3969
1d7922586cf6
parent 2497
3582bf76420e
child 4037
da91efe96a93
     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

mercurial