if (willReturn) { exit = code.DefineLabel(); code.Emit(OpCodes.Br, exit); }
exit = code.DefineLabel(); code.Emit(OpCodes.Br, exit);
    private Item genIf(Tree condp, Tree thenp, Tree elsep, MSILType toType) {	Item iThen = null;	if (elsep == Tree.Empty && toType == MSILType.VOID) {	    boolean tmpLastExpr = lastExpr; lastExpr = false;	    Item condi = gen(condp, msilType(condp.type));	    Item.CondItem cond = mkCond(condi);	    lastExpr = tmpLastExpr;	    if (cond.success == null) {		Chain success = new Chain(code.DefineLabel(), null);		branch(cond.test, success);		iThen = genLoad(thenp, toType);		resolve(success);		resolve(cond.failure);	    } else {		Chain fail = (cond.failure != null) ? 		    cond.failure : new Chain(code.DefineLabel(), null);		branch(cond.test, fail);		resolve(cond.success);		iThen = genLoad(thenp, toType);		resolve(fail);	    }	} else {	    boolean tmpLastExpr = lastExpr; lastExpr = false;	    Item condi = gen(condp, msilType(condp.type));	    Item.CondItem cond = mkCond(condi);	    lastExpr = tmpLastExpr;	    Chain fail = cond.failure != null ?		cond.failure : new Chain(code.DefineLabel(), null);	    branch(cond.test, fail);	    resolve(cond.success);	    Item thenItem = gen(thenp, toType);	    iThen = load(coerce(thenItem, toType));	    Label exit = null;	    /*if (lastExpr) {		code.Emit(OpCodes.Ret);		} else */	    if (willReturn) {		exit = code.DefineLabel();		code.Emit(OpCodes.Br, exit);	    }	    resolve(fail);	    Item iElse = load(gen(elsep, toType));	    resolve(exit);	}	return iThen;    } //genIf