private MidExp EmitExpImpl( ResLetExp resLet, MidEmitEnv env) { var resLetType = resLet.Var.Type; MidVal midVal = null; if (resLetType is ResFreqQualType) { var resFreq = ((ResFreqQualType)resLetType).Freq; var midElem = ((MidElementType)EmitTypeExp(resFreq, env)).Decl; midVal = EmitValToElement(resLet.Value, midElem, env); } if (midVal == null) { midVal = EmitVal(resLet.Value, env); } env.Insert( resLet.Var, (SourceRange r) => midVal); return(EmitExpRaw( resLet.Body, env)); }
private void BindForMemberTermImpl( ResMemberBind memberBind, MidEmitEnv env) { var objVal = EmitVal(memberBind.Obj, env); env.Insert( memberBind.MemberSpec.Container.ThisParameter, (SourceRange r) => objVal); }
private object EmitGenericArgImpl( ResGenericTypeArg arg, IResTypeParamRef param, MidEmitEnv env) { var midType = EmitTypeExp(arg.Type, env); if (param != null) { env.Insert( param.Decl, midType); } return(midType); }
private object EmitGenericArgImpl( ResGenericValueArg arg, IResVarSpec param, MidEmitEnv env) { var midVal = EmitVal(arg.Value, env); if (param != null) { env.Insert( param.Decl, (SourceRange r) => midVal); } return(midVal); }