// 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; }
Bytecode* next_bytecode() const { return Bytecode_at(_pc); }
static Bytecode* bytecode(JavaThread *thread) { return Bytecode_at(bcp(thread)); }
Bytecode* bytecode() const { return Bytecode_at(_bc_start); }
Bytecodes::Code bc() const { return Bytecode_at(method()->code() + bci())->java_code(); }