コード例 #1
0
        public CatTypeVarList GetAllVars()
        {
            CatTypeVarList ret = new CatTypeVarList();

            GetAllVars(ret);
            return(ret);
        }
コード例 #2
0
ファイル: CatVarRenamer.cs プロジェクト: tangentforks/catlang
        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);
        }
コード例 #3
0
 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);
         }
     }
 }
コード例 #4
0
ファイル: CatVarRenamer.cs プロジェクト: tangentforks/catlang
        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));
        }
コード例 #5
0
 public CatTypeVarList(CatTypeVarList list)
     : base(list)
 {
 }
コード例 #6
0
ファイル: CatVarRenamer.cs プロジェクト: tangentforks/catlang
 static CatFxnType RenameVars(CatFxnType ft, CatTypeVarList vars)
 {
     return(new CatFxnType(RenameVars(ft.GetCons(), vars), RenameVars(ft.GetProd(), vars), ft.HasSideEffects()));
 }
コード例 #7
0
ファイル: CatVarRenamer.cs プロジェクト: tangentforks/catlang
 public CatVarRenamer()
 {
     mNames = new CatTypeVarList();
 }