src/share/vm/ci/ciMethod.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
7092712 Cdiff src/share/vm/ci/ciMethod.cpp
src/share/vm/ci/ciMethod.cpp
Print this page
*** 147,170 ****
// ciMethod::ciMethod
//
// Unloaded method.
ciMethod::ciMethod(ciInstanceKlass* holder,
ciSymbol* name,
! ciSymbol* signature) : ciObject(ciMethodKlass::make()) {
! // These fields are always filled in.
! _name = name;
! _holder = holder;
! _signature = new (CURRENT_ENV->arena()) ciSignature(_holder, constantPoolHandle(), signature);
! _intrinsic_id = vmIntrinsics::_none;
! _liveness = NULL;
! _can_be_statically_bound = false;
! _method_blocks = NULL;
! _method_data = NULL;
#if defined(COMPILER2) || defined(SHARK)
! _flow = NULL;
! _bcea = NULL;
#endif // COMPILER2 || SHARK
}
// ------------------------------------------------------------------
// ciMethod::load_code
--- 147,176 ----
// ciMethod::ciMethod
//
// Unloaded method.
ciMethod::ciMethod(ciInstanceKlass* holder,
ciSymbol* name,
! ciSymbol* signature,
! ciInstanceKlass* accessor) :
! ciObject(ciMethodKlass::make()),
! _name( name),
! _holder( holder),
! _intrinsic_id( vmIntrinsics::_none),
! _liveness( NULL),
! _can_be_statically_bound(false),
! _method_blocks( NULL),
! _method_data( NULL)
#if defined(COMPILER2) || defined(SHARK)
! ,
! _flow( NULL),
! _bcea( NULL)
#endif // COMPILER2 || SHARK
+ {
+ // Usually holder and accessor are the same type but in some cases
+ // the holder has the wrong class loader (e.g. invokedynamic call
+ // sites) so we pass the accessor.
+ _signature = new (CURRENT_ENV->arena()) ciSignature(accessor, constantPoolHandle(), signature);
}
// ------------------------------------------------------------------
// ciMethod::load_code
src/share/vm/ci/ciMethod.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File