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); }
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"); } }
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."); } }