hotspot/src/share/vm/runtime/rframe.cpp
RFrame* RFrame::new_RFrame(frame fr, JavaThread* thread, RFrame*const callee) {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
RFrame* rf;
int dist = callee ? callee->distance() : -1;
{- -------------------------------------------
(1) 対象のスタックフレームに応じた RFrame オブジェクトを生成し, 初期化する.
(interpreter frame の場合は InterpretedRFrame, そうでなければ CompiledRFrame)
---------------------------------------- -}
if (fr.is_interpreted_frame()) {
rf = new InterpretedRFrame(fr, thread, callee);
dist++;
} else if (fr.is_compiled_frame()) {
// Even deopted frames look compiled because the deopt
// is invisible until it happens.
rf = new CompiledRFrame(fr, thread, callee);
} else {
assert(false, "Unhandled frame type");
}
rf->set_distance(dist);
rf->init();
{- -------------------------------------------
(1) 結果をリターン
---------------------------------------- -}
return rf;
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.