code.Emit(OpCodes.Ldloc, local);
emitLdloc(local);
    private Item load(Item that) {	switch (that) { 	case VoidItem(): 	    return that;	case StackItem():	    return (StackItem) that;	case LiteralItem(AConstant value):	    return loadLiteral(value, that.type);	case SelfItem():	    emitThis();	    return items.StackItem(that.type);	case ArgItem(int slot):	    emitLdarg(slot);	    return items.StackItem(that.type);	case LocalItem(LocalBuilder local):	    code.Emit(OpCodes.Ldloc, local);	    return items.StackItem(that.type);	case StaticItem(FieldInfo field):	    assert !field.IsLiteral() : field.toString();	    code.Emit(OpCodes.Ldsfld, field);	    return items.StackItem(that.type);	case SelectItem(Item qual, FieldInfo field):	    Item i = load(qual);	    code.Emit(OpCodes.Ldfld, field);	    return items.StackItem(that.type);	case CondItem(Test test, Chain success, Chain failure):	    load(test);	    switch (test) {	    case Or(_):	    case And(_):		Label exit = null;		/*if (lastExpr)		    code.Emit(OpCodes.Ret);		    else */		if (willReturn) {		    exit = code.DefineLabel();		    code.Emit(OpCodes.Br, exit);		}		if (failure != null) {		    resolve(failure);		    load(FALSE_ITEM);		    if (success != null) {			/*if (lastExpr)			    code.Emit(OpCodes.Ret);			    else*/			if (willReturn)			    code.Emit(OpCodes.Br, exit);		    }		}		if (success != null) {		    resolve(success);		    load(TRUE_ITEM);		}		resolve(exit);		break;	    }	    return items.StackItem(MSILType.BOOL);	default:	    throw Debug.abort("load item: " + that);	}    }