hotspot/src/share/vm/prims/jvmtiImpl.cpp
bool VM_GetOrSetLocal::doit_prologue() {
{- -------------------------------------------
(1) VM_GetOrSetLocal::get_java_vframe() を呼んで,
指定されたフレームに対応する javaVFrame を取得する.
(結果が NULL だったら, ここで false をリターン)
---------------------------------------- -}
_jvf = get_java_vframe();
NULL_CHECK(_jvf, false);
{- -------------------------------------------
(1) 以下の場合には false をリターンする. それ以外のケースでは true をリターンする.
* 対象のフレームが native method のフレームであり, かつ以下のどちらかが成り立つ場合: (JVMTI_ERROR_OPAQUE_FRAME)
* 取得対象が receiver ではない
* (取得対象は receiver だが) そのフレームが static メソッドのフレーム
* 指定された型が対象の局所変数スロットの型と合わない場合:
(= VM_GetOrSetLocal::check_slot_type() が false をリターンする場合)
---------------------------------------- -}
if (_jvf->method()->is_native()) {
if (getting_receiver() && !_jvf->method()->is_static()) {
return true;
} else {
_result = JVMTI_ERROR_OPAQUE_FRAME;
return false;
}
}
if (!check_slot_type(_jvf)) {
return false;
}
return true;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.