Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/codegen/collect-info.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/codegen/collect-info.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3866, Mon May 16 16:48:13 2016 UTC revision 3868, Mon May 16 23:04:12 2016 UTC
# Line 15  Line 15 
15    
16      val collect : TreeIR.program -> t      val collect : TreeIR.program -> t
17    
18      val mapOverTypes : (TreeTypes.t * bool -> 'a) -> t -> 'a list      val foldOverTypes : (TreeTypes.t * bool * 'a -> 'a) -> 'a -> t -> 'a
19    
20    end = struct    end = struct
21    
# Line 29  Line 29 
29      fun addType (Info{tys, ...}) = let      fun addType (Info{tys, ...}) = let
30            val find = TreeTypes.Tbl.find tys            val find = TreeTypes.Tbl.find tys
31            val ins = TreeTypes.Tbl.insert tys            val ins = TreeTypes.Tbl.insert tys
32            fun addTy (ty, inPrint) = (case ty            fun addTy (ty, inPrint) =  let
33                    fun insert ty = (case find ty
34                           of NONE => ins (ty, inPrint)
35                            | SOME b => if inPrint andalso (not b) then ins (ty, true) else ()
36                          (* end case *))
37                    fun add ty = (case ty
38                   of TreeTypes.BoolTy => ()                   of TreeTypes.BoolTy => ()
39                    | TreeTypes.IntTy => ()                    | TreeTypes.IntTy => ()
40                    | TreeTypes.StringTy => ()                    | TreeTypes.StringTy => ()
41                    | TreeTypes.VecTy(1, 1) => ()                    | TreeTypes.VecTy(1, 1) => ()
42                    | TreeTypes.StrandTy _ => ()                    | TreeTypes.StrandTy _ => ()
43                    | _ => (case find ty                          | TreeTypes.TupleTy tys => (insert ty; List.app add tys)
44                         of NONE => ins (ty, inPrint)                          | TreeTypes.SeqTy(ty', _) => (insert ty; add ty')
45                          | SOME b => if inPrint andalso (not b) then ins (ty, true) else ()                          | _ => insert ty
                       (* end case *))  
46                  (* end case *))                  (* end case *))
47            in            in
48                      add ty
49                    end
50              in
51              addTy              addTy
52            end            end
53    
# Line 105  Line 112 
112              info              info
113            end            end
114    
115      fun mapOverTypes f (Info{tys}) =      fun foldOverTypes f init (Info{tys}) = TreeTypes.Tbl.foldi f init tys
           TreeTypes.Tbl.foldi (fn (ty, isPrinted, acc) => f(ty, isPrinted) :: acc) [] tys  
116    
117    end    end

Legend:
Removed from v.3866  
changed lines
  Added in v.3868

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0