Beispiel #1
0
// Return true if the interpreter can prove that the given bytecode has
// not yet been executed (in Java semantics, not in actual operation).
bool AbstractInterpreter::is_not_reached(methodHandle method, int bci) {
  address bcp = method->bcp_from(bci);
  Bytecodes::Code code = Bytecodes::code_at(bcp, method());

  if (!Bytecode_at(bcp)->must_rewrite(code)) {
    // might have been reached
    return false;
  }

  // the bytecode might not be rewritten if the method is an accessor, etc.
  address ientry = method->interpreter_entry();
  if (ientry != entry_for_kind(AbstractInterpreter::zerolocals) &&
      ientry != entry_for_kind(AbstractInterpreter::zerolocals_synchronized))
    return false;  // interpreter does not run this method!

  // otherwise, we can be sure this bytecode has never been executed
  return true;
}
Beispiel #2
0
 Bytecode* next_bytecode() const { return Bytecode_at(_pc); }
 static Bytecode* bytecode(JavaThread *thread)      { return Bytecode_at(bcp(thread)); }
Beispiel #4
0
 Bytecode* bytecode() const { return Bytecode_at(_bc_start); }
 Bytecodes::Code bc() const { return Bytecode_at(method()->code() + bci())->java_code(); }