public TypeEnvironment(TypeEnvironment baseEnv) { this.m_typeEnv = new Dictionary <string, IValType>(); foreach (var pair in baseEnv.m_typeEnv) { this.m_typeEnv.Add(pair.Key, pair.Value); } }
public CompileResult Typecheck(AST ast, Domain globDomain) { this.Bool = globDomain.First <ValueType>("bool"); this.Int32 = globDomain.First <ValueType>("int"); TypeEnvironment tenv = new TypeEnvironment(); foreach (ASTNode node in ast.Root) { var res = this.TypecheckNode(node, tenv, globDomain).Item1; if (!res) { return(res); } } return(new CompileResult(true)); }
private (CompileResult, IValType) TypecheckNode(ASTNode node, TypeEnvironment tenv, Domain domain) => node switch