private MidExp EmitLocalExp( IResExp resExp, MidEmitEnv env, MidElementDecl element = null) { var localEnv = new MidLocalEmitEnv(env, _identifiers, element, _exps); var midExp = EmitExpRaw(resExp, localEnv); return(localEnv.Wrap(midExp)); }
private MidExp EmitExpImpl(ResLabelExp exp, MidEmitEnv env) { var midType = EmitTypeExp(exp.Type, env); var localEnv = new MidLocalEmitEnv(env, _identifiers, null, _exps); var midLabel = new MidLabel(); localEnv.Insert(exp.Label, midLabel); var midBody = EmitLocalExp(exp.Body, localEnv); midBody = localEnv.Wrap(midBody); return(new MidLabelExp( exp.Range, midLabel, midBody, midType)); }
private MidExp EmitExpImpl( ResForExp resFor, MidEmitEnv env) { // \todo: Set up the variable... :( var resVar = resFor.Var; var midVar = new MidVar( resVar.Name, EmitTypeExp(resVar.Type, env)); var seq = EmitVal(resFor.Sequence, env); var bodyEnv = new MidLocalEmitEnv(env, _identifiers, null, _exps); bodyEnv.Insert(resVar, (SourceRange r) => new MidVarRef(r, midVar)); var body = bodyEnv.Wrap(EmitVal(resFor.Body, bodyEnv)); return(new MidForExp( resFor.Range, midVar, seq, body)); }