示例#1
0
        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));
        }
示例#2
0
        private void BindForMemberTermImpl(
            ResMemberBind memberBind,
            MidEmitEnv env)
        {
            var objVal = EmitVal(memberBind.Obj, env);

            env.Insert(
                memberBind.MemberSpec.Container.ThisParameter,
                (SourceRange r) => objVal);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }