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(); }
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); }