Example #1
0
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);
}
Example #4
0
 bool covers(int bci) const                     { return beg_bci() <= bci && bci < end_bci(); }