Example #1
0
oop ByteCode::create_block_method_prim(oop ignore,
                                       byteVectorOop bv,
                                       objVectorOop lits,
                                       stringOop file,
                                       smiOop line,
                                       stringOop source) {
  Unused(ignore);
  ResourceMark rm;

  if (bv->length() == 0)
    return ErrorCodes::general_prim_error("Error: empty byte code vector");

  smi errorIndex;
  IntBList* stack_deltas;
  const char* errorMsg = methodMap::check_byteCodes_and_literals( errorIndex, 
                                                                  stack_deltas,
                                                                  bv, lits );
  if ( errorMsg ) {
    char buf[BUFSIZ];
    (void) sprintf(buf, "Error: bad byte code at: %d <%s>",
                   errorIndex, errorMsg);
    return ErrorCodes::general_prim_error(buf);
  }
  // clone bv & lits for cheap insurance
  ByteCode b(false, new_string(bv->bytes(), bv->length()),
             lits->clone(), file, line, source);
  oop m = create_blockMethod(NULL, &b, "", stack_deltas);

  return m->as_mirror();
}
Example #2
0
int32 LabelSet::RecordLabelVectorInfo( AbstractByteCode* b, objVectorOop labels,
                                       int32 sd, int32 bci) {
  objVectorOop pcs= labels->clone(); // want same size as labels
  for (int32 i = 0,  n = labels->length();  i < n;  ++i)
    if ( RecordLabelInfo( b, labels->obj_at(i), sd, indexedBranch, bci ) == -1)
      return -1;
  return b->GenLiteral(pcs);
}