A question about method frame::oops_interpreted_do

View: New views
1 Messages — Rating Filter:   Alert me  

A question about method frame::oops_interpreted_do

by Colin(Du Li) :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I have two question about method frame::oops_interpreted_do in ../hotspot/src/share/vm/runtime/frame.cpp
1. when will this method be executed? what's its function?
2. It has following codes:
    ......
if (m->is_native()) {
#ifdef CC_INTERP
    f->do_oop((oop*)&istate->_oop_temp);
#else
    f->do_oop((oop*)( fp() + interpreter_frame_oop_temp_offset ));
#endif /* CC_INTERP */
  }

  int max_locals = m->is_native() ? m->size_of_parameters() : m->max_locals();

  symbolHandle signature;
  bool is_static = false;

  // Process a callee's arguments if we are at a call site
  // (i.e., if we are at an invoke bytecode)
  // This is used sometimes for calling into the VM, not for another
  // interpreted or compiled frame.
  if (!m->is_native()) {
    Bytecode_invoke *call = Bytecode_invoke_at_check(m, bci);
    if (call != NULL) {
      signature = symbolHandle(thread, call->signature());
      is_static = call->is_invokestatic();
      if (map->include_argument_oops() &&
          interpreter_frame_expression_stack_size() > 0) {
        ResourceMark rm(thread);  // is this right ???
        oops_interpreted_arguments_do(signature, is_static, f);
      }
    }
  }
       .......

 my question is when the method is declared as native, which the arguments don't need to be iterated as non-native method (by oops_interpreted_arguments_do).

Thanks a lot!

Colin