Bytecodes::Code RawBytecodeStream::raw_next_special(Bytecodes::Code code) { assert(!is_last_bytecode(), "should have been checked"); // set next bytecode position address bcp = RawBytecodeStream::bcp(); address end = method()->code_base() + end_bci(); int l = Bytecodes::raw_special_length_at(bcp, end); if (l <= 0 || (_bci + l) > _end_bci) { code = Bytecodes::_illegal; } else { _next_bci += l; assert(_bci < _next_bci, "length must be > 0"); // set attributes _is_wide = false; // check for special (uncommon) cases if (code == Bytecodes::_wide) { if (bcp + 1 >= end) { code = Bytecodes::_illegal; } else { code = (Bytecodes::Code)bcp[1]; _is_wide = true; } } } _raw_code = code; return code; }
CondNode::CondNode(methodOop method, MethodInterval* parent, int begin_bci, int next_bci, int dest_offset) : InlineSendNode(method, parent, begin_bci, next_bci + dest_offset) { _expr_code = MethodIterator::factory->new_MethodInterval(method, this, next_bci, end_bci()); }
ExternalCallNode::ExternalCallNode(methodOop method, MethodInterval* parent, int begin_bci, int next_bci, int end_offset) : MethodInterval(method, parent, begin_bci, next_bci + end_offset) { assert(end_offset > 0, "wrong offset"); _failure_code = MethodIterator::factory->new_MethodInterval(method, this, next_bci, end_bci(), true); }
bool covers(int bci) const { return beg_bci() <= bci && bci < end_bci(); }