Top


定義場所(file name)

hotspot/src/share/vm/interpreter/linkResolver.cpp

名前(function name)

void LinkResolver::resolve_invokevirtual(CallInfo& result, Handle recv,
                                          constantPoolHandle pool, int index,
                                          TRAPS) {

本体部(body)

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      KlassHandle  resolved_klass;
      Symbol* method_name = NULL;
      Symbol* method_signature = NULL;
      KlassHandle  current_klass;

  {- -------------------------------------------
  (1) LinkResolver::resolve_pool() を呼んで, 
      処理対象のメソッドを含んでいるクラス, 及びメソッドのその他の情報を取得する
      (resolved_klass 局所変数, 及び method_name, method_signature, current_klass 局所変数にセットされる).
      ---------------------------------------- -}

      resolve_pool(resolved_klass, method_name,  method_signature, current_klass, pool, index, CHECK);

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      KlassHandle recvrKlass (THREAD, recv.is_null() ? (klassOop)NULL : recv->klass());

  {- -------------------------------------------
  (1) LinkResolver::resolve_virtual_call() を呼んで, 
      対象メソッドを表す CallInfo 情報を取得する 
      (result 引数にセットされて返される).
      ---------------------------------------- -}

      resolve_virtual_call(result, recv, recvrKlass, resolved_klass, method_name, method_signature, current_klass, true, true, CHECK);
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.