public void Check(TEnv env, FEnv fEnv)
        {
            if (formArgs.Count > 0)
            {
                foreach (Pair <String, Type> argPair in this.formArgs)
                {
                    env.DeclareLocal(argPair.Fst, argPair.Snd);
                }
            }

            Type t = body.Check(env, fEnv);

            if (formArgs.Count > 0)
            {
                foreach (Pair <String, Type> argPair in this.formArgs)
                {
                    if (this.formArgs.Count > 0)
                    {
                        env.PopEnv();
                    }
                }
            }
            if (t != returnType)
            {
                throw new TypeException("Body of " + fName + " returns " + t + ", " + returnType + " expected");
            }
        }
        public override Type Check(TEnv env, FEnv fEnv)
        {
            Type t1 = e1.Check(env, fEnv);

            env.DeclareLocal(this.name, t1);
            Type t2 = e2.Check(env, fEnv);

            env.PopEnv();
            return(t2);
        }
示例#3
0
        public void Check(TEnv env, FEnv fEnv)
        {
            foreach (var formArg in formArgs)
            {
                env.DeclareLocal(formArg.Fst, formArg.Snd);
            }
            Type t = body.Check(env, fEnv);

            foreach (var formArg in formArgs)
            {
                env.PopEnv();
            }
            if (t != returnType)
            {
                throw new TypeException("Body of " + fName + " returns " + t + ", " + returnType + " expected");
            }
        }
示例#4
0
        public override Type Check(TEnv env, FEnv fEnv)
        {
            Type t1 = e1.Check(env, fEnv);

            env.DeclareLocal(varName, t1);

            Type t2 = e2.Check(env, fEnv);

            env.PopEnv();

            if (t2 == Type.intType)
            {
                return(Type.intType);
            }
            else
            {
                throw new TypeException("Expressions must return int.");
            }
        }