classRef = newClass; break;
}
buf[pc++] = (byte) origBC;
int coding = bc_initref.getInt();
// Find the nth overloading of <init> in classRef.
MemberEntry ref = pkg.cp.getOverloadingForIndex(CONSTANT_Methodref, classRef, "<init>", coding);
fixupBuf.add(pc, Fixups.U2_FORMAT, ref);
buf[pc+0] = buf[pc+1] = 0;
pc += 2;
assert(Instruction.opLength(origBC) == (pc - curPC));
continue;
}
if (Instruction.isSelfLinkerOp(bc)) {
int idx = (bc - _self_linker_op);
boolean isSuper = (idx >= _self_linker_super_flag);
if (isSuper) idx -= _self_linker_super_flag;
boolean isAload = (idx >= _self_linker_aload_flag);
if (isAload) idx -= _self_linker_aload_flag;
int origBC = _first_linker_op + idx;
boolean isField = Instruction.isFieldOp(origBC);
CPRefBand bc_which;
ClassEntry which_cls = isSuper ? superClass : thisClass;
Index which_ix;
if (isField) {
bc_which = isSuper ? bc_superfield : bc_thisfield;
which_ix = pkg.cp.getMemberIndex(CONSTANT_Fieldref, which_cls);
} else {
bc_which = isSuper ? bc_supermethod : bc_thismethod;
which_ix = pkg.cp.getMemberIndex(CONSTANT_Methodref, which_cls);
}
assert(bc_which == selfOpRefBand(bc));
MemberEntry ref = (MemberEntry) bc_which.getRef(which_ix);
if (isAload) {
buf[pc++] = (byte) _aload_0;
curPC = pc;
// Note: insnMap keeps the _aload_0 separate.
insnMap[numInsns++] = curPC;