boolean when) {
boolean when) throws JCode.OffsetTooBigException {
    protected void genEqPrim(Context ctx,                             Primitive prim,                             Tree[] args,                             JCode.Label target,                             boolean when) {        JType maxType = getMaxType(args);        assert maxType.isReferenceType(): args[0]+" - "+args[1]+" : "+maxType;        // Generate code for all arguments        for (int i = 0; i < args.length; ++i) genLoad(ctx, args[i], maxType);        if (prim == Primitive.ID) {            if (when) ctx.code.emitIF_ACMPEQ(target);            else ctx.code.emitIF_ACMPNE(target);        } else {            // Comparison between two references. We inline the code            // for the predefined (and final) "=="/"!=" operators,            // which check for null values and then forward the call            // to "equals". "==" could be defined as follows, if            // "null" was an object:            //   final def ==(other: Any): boolean =            //     if (this == null) other == null else this.equals(other)            assert prim == Primitive.EQ || prim == Primitive.NE;            if (eqEqTempVar == null || eqEqTempVar.getOwner() != ctx.method)                eqEqTempVar =                    ctx.method.addNewLocalVariable(JObjectType.JAVA_LANG_OBJECT,                                                   "eqEqTemp$");            ctx.code.emitSTORE(eqEqTempVar);            ctx.code.emitDUP();            JCode.Label ifNonNullLabel = ctx.code.newLabel();            ctx.code.emitIFNONNULL(ifNonNullLabel);            ctx.code.emitPOP();            ctx.code.emitLOAD(eqEqTempVar);            if (when ^ (prim != Primitive.EQ))                ctx.code.emitIFNULL(target);            else                ctx.code.emitIFNONNULL(target);            JCode.Label afterLabel = ctx.code.newLabel();            ctx.code.emitGOTO(afterLabel);            ifNonNullLabel.anchorToNext();            ctx.code.emitLOAD(eqEqTempVar);            JMethodType equalsType =                new JMethodType(JType.BOOLEAN,                                new JType[] { JObjectType.JAVA_LANG_OBJECT });            ctx.code.emitINVOKEVIRTUAL(JAVA_LANG_OBJECT, "equals", equalsType);            if (when ^ (prim != Primitive.EQ))                ctx.code.emitIFNE(target);            else                ctx.code.emitIFEQ(target);            afterLabel.anchorToNext();        }    }