src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/ci/ciEnv.cpp	Wed Oct 28 20:02:15 2009
--- new/src/share/vm/ci/ciEnv.cpp	Wed Oct 28 20:02:15 2009

*** 418,433 **** --- 418,432 ---- // ------------------------------------------------------------------ // ciEnv::get_klass_by_index_impl // // Implementation of get_klass_by_index. ! ciKlass* ciEnv::get_klass_by_index_impl(ciInstanceKlass* accessor, ! ciKlass* ciEnv::get_klass_by_index_impl(constantPoolHandle cpool, int index, ! bool& is_accessible) { assert(accessor->get_instanceKlass()->is_linked(), "must be linked before accessing constant pool"); ! bool& is_accessible, + ciInstanceKlass* accessor) { EXCEPTION_CONTEXT; constantPoolHandle cpool(THREAD, accessor->get_instanceKlass()->constants()); KlassHandle klass (THREAD, constantPoolOopDesc::klass_at_if_loaded(cpool, index)); symbolHandle klass_name; if (klass.is_null()) { // The klass has not been inserted into the constant pool. // Try to look it up by name.
*** 485,510 **** --- 484,508 ---- // ------------------------------------------------------------------ // ciEnv::get_klass_by_index // // Get a klass from the constant pool. ! ciKlass* ciEnv::get_klass_by_index(ciInstanceKlass* accessor, ! ciKlass* ciEnv::get_klass_by_index(constantPoolHandle cpool, int index, ! bool& is_accessible) { GUARDED_VM_ENTRY(return get_klass_by_index_impl(accessor, index, is_accessible);) ! bool& is_accessible, + ciInstanceKlass* accessor) { + GUARDED_VM_ENTRY(return get_klass_by_index_impl(cpool, index, is_accessible, accessor);) } // ------------------------------------------------------------------ // ciEnv::get_constant_by_index_impl // // Implementation of get_constant_by_index(). ! ciConstant ciEnv::get_constant_by_index_impl(ciInstanceKlass* accessor, ! int index) { ! ciConstant ciEnv::get_constant_by_index_impl(constantPoolHandle cpool, ! int index, + ciInstanceKlass* accessor) { EXCEPTION_CONTEXT; instanceKlass* ik_accessor = accessor->get_instanceKlass(); assert(ik_accessor->is_linked(), "must be linked before accessing constant pool"); constantPoolOop cpool = ik_accessor->constants(); constantTag tag = cpool->tag_at(index); if (tag.is_int()) { return ciConstant(T_INT, (jint)cpool->int_at(index)); } else if (tag.is_long()) { return ciConstant((jlong)cpool->long_at(index));
*** 528,546 **** --- 526,549 ---- assert (constant->is_instance(), "must be an instance, or not? "); return ciConstant(T_OBJECT, constant); } else if (tag.is_klass() || tag.is_unresolved_klass()) { // 4881222: allow ldc to take a class type bool ignore; ! ciKlass* klass = get_klass_by_index_impl(accessor, index, ignore); ! ciKlass* klass = get_klass_by_index_impl(cpool, index, ignore, accessor); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; record_out_of_memory_failure(); return ciConstant(); } assert (klass->is_instance_klass() || klass->is_array_klass(), "must be an instance or array klass "); return ciConstant(T_OBJECT, klass); + } else if (tag.is_object()) { + oop obj = cpool->object_at(index); + assert(obj->is_instance(), "must be an instance"); + ciObject* ciobj = get_object(obj); + return ciConstant(T_OBJECT, ciobj); } else { ShouldNotReachHere(); return ciConstant(); } }
*** 573,585 **** --- 576,589 ---- // ciEnv::get_constant_by_index // // Pull a constant out of the constant pool. How appropriate. // // Implementation note: this query is currently in no way cached. ! ciConstant ciEnv::get_constant_by_index(ciInstanceKlass* accessor, ! int index) { GUARDED_VM_ENTRY(return get_constant_by_index_impl(accessor, index); ) ! ciConstant ciEnv::get_constant_by_index(constantPoolHandle cpool, ! int index, + ciInstanceKlass* accessor) { + GUARDED_VM_ENTRY(return get_constant_by_index_impl(cpool, index, accessor);) } // ------------------------------------------------------------------ // ciEnv::is_unresolved_string //
*** 677,695 **** --- 681,696 ---- } // ------------------------------------------------------------------ // ciEnv::get_method_by_index_impl ! ciMethod* ciEnv::get_method_by_index_impl(ciInstanceKlass* accessor, int index, Bytecodes::Code bc) { // Get the method's declared holder. assert(accessor->get_instanceKlass()->is_linked(), "must be linked before accessing constant pool"); constantPoolHandle cpool = accessor->get_instanceKlass()->constants(); ! ciMethod* ciEnv::get_method_by_index_impl(constantPoolHandle cpool, + int index, Bytecodes::Code bc, + ciInstanceKlass* accessor) { int holder_index = cpool->klass_ref_index_at(index); bool holder_is_accessible; ! ciKlass* holder = get_klass_by_index_impl(accessor, holder_index, holder_is_accessible); ! ciKlass* holder = get_klass_by_index_impl(cpool, holder_index, holder_is_accessible, accessor); ciInstanceKlass* declared_holder = get_instance_klass_for_declared_method_holder(holder); // Get the method's name and signature. symbolOop name_sym = cpool->name_ref_at(index); symbolOop sig_sym = cpool->signature_ref_at(index);
*** 713,727 **** --- 714,726 ---- } // ------------------------------------------------------------------ // ciEnv::get_fake_invokedynamic_method_impl ! ciMethod* ciEnv::get_fake_invokedynamic_method_impl(ciInstanceKlass* accessor, ! ciMethod* ciEnv::get_fake_invokedynamic_method_impl(constantPoolHandle cpool, int index, Bytecodes::Code bc) { assert(bc == Bytecodes::_invokedynamic, "must be invokedynamic"); assert(accessor->get_instanceKlass()->is_linked(), "must be linked before accessing constant pool"); constantPoolHandle cpool = accessor->get_instanceKlass()->constants(); // Get the CallSite from the constant pool cache. ConstantPoolCacheEntry* cpc_entry = cpool->cache()->secondary_entry_at(index); assert(cpc_entry != NULL && cpc_entry->is_secondary_entry(), "sanity"); Handle call_site = cpc_entry->f1();
*** 764,779 **** --- 763,779 ---- } // ------------------------------------------------------------------ // ciEnv::get_method_by_index ! ciMethod* ciEnv::get_method_by_index(ciInstanceKlass* accessor, ! int index, Bytecodes::Code bc) { ! ciMethod* ciEnv::get_method_by_index(constantPoolHandle cpool, ! int index, Bytecodes::Code bc, + ciInstanceKlass* accessor) { if (bc == Bytecodes::_invokedynamic) { ! GUARDED_VM_ENTRY(return get_fake_invokedynamic_method_impl(accessor, index, bc);) ! GUARDED_VM_ENTRY(return get_fake_invokedynamic_method_impl(cpool, index, bc);) } else { ! GUARDED_VM_ENTRY(return get_method_by_index_impl(accessor, index, bc);) ! GUARDED_VM_ENTRY(return get_method_by_index_impl(cpool, index, bc, accessor);) } } // ------------------------------------------------------------------

src/share/vm/ci/ciEnv.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File