public CatTypeVarList GetAllVars() { CatTypeVarList ret = new CatTypeVarList(); GetAllVars(ret); return(ret); }
static CatTypeVector RenameVars(CatTypeVector vec, CatTypeVarList vars) { CatTypeVector ret = new CatTypeVector(); foreach (CatKind k in vec.GetKinds()) { if (k.IsKindVar() && vars.ContainsKey(k.ToString())) { ret.Add(vars[k.ToString()]); } else if (k is CatFxnType) { ret.Add(RenameVars(ret, vars)); } else if (k is CatTypeVector) { throw new Exception("unexpected type vector in function during renaming"); } else { ret.Add(k); } } return(ret); }
private void GetAllVars(CatTypeVarList vars) { foreach (CatKind k in GetChildKinds()) { if (k is CatFxnType) { (k as CatFxnType).GetAllVars(vars); } else if (k.IsKindVar()) { vars.Add(k); } } }
public static CatFxnType RenameFreeVars(CatFxnType left, CatFxnType right, CatFxnType ft) { CatTypeVarList vars = ft.GetAllVars(); foreach (string s in vars.Keys) { CatKind k = vars[s]; if (IsFreeVar(k, left, right, ft)) { if (k is CatTypeVar) { vars[s] = CatTypeVar.CreateUnique(); } else { vars[s] = CatStackVar.CreateUnique(); } } } return(RenameVars(ft, vars)); }
public CatTypeVarList(CatTypeVarList list) : base(list) { }
static CatFxnType RenameVars(CatFxnType ft, CatTypeVarList vars) { return(new CatFxnType(RenameVars(ft.GetCons(), vars), RenameVars(ft.GetProd(), vars), ft.HasSideEffects())); }
public CatVarRenamer() { mNames = new CatTypeVarList(); }