Exemple #1
0
        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));
        }
Exemple #2
0
        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));
        }
Exemple #3
0
        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));
        }