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