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

src/share/vm/ci/ciEnv.cpp

Print this page
rev 1082 : imported patch indy.compiler.patch
rev 1083 : [mq]: indy.compiler.inline.patch

*** 441,456 **** // ------------------------------------------------------------------ // ciEnv::get_klass_by_index_impl // // Implementation of get_klass_by_index. ! ciKlass* ciEnv::get_klass_by_index_impl(ciInstanceKlass* accessor, int index, ! bool& is_accessible) { ! assert(accessor->get_instanceKlass()->is_linked(), "must be linked before accessing constant pool"); 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. --- 441,455 ---- // ------------------------------------------------------------------ // ciEnv::get_klass_by_index_impl // // Implementation of get_klass_by_index. ! ciKlass* ciEnv::get_klass_by_index_impl(constantPoolHandle cpool, int index, ! bool& is_accessible, ! ciInstanceKlass* accessor) { EXCEPTION_CONTEXT; 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.
*** 508,533 **** // ------------------------------------------------------------------ // ciEnv::get_klass_by_index // // Get a klass from the constant pool. ! ciKlass* ciEnv::get_klass_by_index(ciInstanceKlass* accessor, int index, ! bool& is_accessible) { ! GUARDED_VM_ENTRY(return get_klass_by_index_impl(accessor, index, is_accessible);) } // ------------------------------------------------------------------ // ciEnv::get_constant_by_index_impl // // Implementation of get_constant_by_index(). ! ciConstant ciEnv::get_constant_by_index_impl(ciInstanceKlass* accessor, ! int index) { 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)); --- 507,531 ---- // ------------------------------------------------------------------ // ciEnv::get_klass_by_index // // Get a klass from the constant pool. ! ciKlass* ciEnv::get_klass_by_index(constantPoolHandle cpool, int index, ! 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(constantPoolHandle cpool, ! int index, ! ciInstanceKlass* accessor) { EXCEPTION_CONTEXT; 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));
*** 551,569 **** 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); 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 { ShouldNotReachHere(); return ciConstant(); } } --- 549,572 ---- 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(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(); } }
*** 596,608 **** // 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); ) } // ------------------------------------------------------------------ // ciEnv::is_unresolved_string // --- 599,612 ---- // 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(constantPoolHandle cpool, ! int index, ! ciInstanceKlass* accessor) { ! GUARDED_VM_ENTRY(return get_constant_by_index_impl(cpool, index, accessor);) } // ------------------------------------------------------------------ // ciEnv::is_unresolved_string //
*** 700,718 **** } // ------------------------------------------------------------------ // 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(); 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); 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); --- 704,719 ---- } // ------------------------------------------------------------------ // ciEnv::get_method_by_index_impl ! 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(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);
*** 736,750 **** } // ------------------------------------------------------------------ // ciEnv::get_fake_invokedynamic_method_impl ! ciMethod* ciEnv::get_fake_invokedynamic_method_impl(ciInstanceKlass* accessor, 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(); --- 737,749 ---- } // ------------------------------------------------------------------ // ciEnv::get_fake_invokedynamic_method_impl ! ciMethod* ciEnv::get_fake_invokedynamic_method_impl(constantPoolHandle cpool, int index, Bytecodes::Code bc) { assert(bc == Bytecodes::_invokedynamic, "must be invokedynamic"); // 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();
*** 787,802 **** } // ------------------------------------------------------------------ // ciEnv::get_method_by_index ! ciMethod* ciEnv::get_method_by_index(ciInstanceKlass* accessor, ! int index, Bytecodes::Code bc) { if (bc == Bytecodes::_invokedynamic) { ! GUARDED_VM_ENTRY(return get_fake_invokedynamic_method_impl(accessor, index, bc);) } else { ! GUARDED_VM_ENTRY(return get_method_by_index_impl(accessor, index, bc);) } } // ------------------------------------------------------------------ --- 786,802 ---- } // ------------------------------------------------------------------ // ciEnv::get_method_by_index ! 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(cpool, index, bc);) } else { ! 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