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 3893, Sat May 21 21:33:08 2016 UTC
# Line 9  Line 9 
9   * All rights reserved.   * All rights reserved.
10   *)   *)
11    
12    (* operators to record:
13            RClamp
14            RLerp
15            VClamp
16            VMapClamp
17            VLerp
18            VScale
19            VSum
20            EigenVecs2x2
21            EigenVecs3x3
22            EigenVals2x2
23            EigenVals3x3
24     *)
25  structure CollectInfo : sig  structure CollectInfo : sig
26    
27      type t      type t
28    
29      val collect : TreeIR.program -> t      val collect : TreeIR.program -> t
30    
31      val mapOverTypes : (TreeTypes.t * bool -> 'a) -> t -> 'a list      val foldOverTypes : (TreeTypes.t * bool * 'a -> 'a) -> 'a -> t -> 'a
32    
33    end = struct    end = struct
34    
# Line 29  Line 42 
42      fun addType (Info{tys, ...}) = let      fun addType (Info{tys, ...}) = let
43            val find = TreeTypes.Tbl.find tys            val find = TreeTypes.Tbl.find tys
44            val ins = TreeTypes.Tbl.insert tys            val ins = TreeTypes.Tbl.insert tys
45            fun addTy (ty, inPrint) = (case ty            fun addTy (ty, inPrint) =  let
46                    fun insert ty = (case find ty
47                           of NONE => ins (ty, inPrint)
48                            | SOME b => if inPrint andalso (not b) then ins (ty, true) else ()
49                          (* end case *))
50                    fun add ty = (case ty
51                   of TreeTypes.BoolTy => ()                   of TreeTypes.BoolTy => ()
52                    | TreeTypes.IntTy => ()                    | TreeTypes.IntTy => ()
53                    | TreeTypes.StringTy => ()                    | TreeTypes.StringTy => ()
54                    | TreeTypes.VecTy(1, 1) => ()                    | TreeTypes.VecTy(1, 1) => ()
55                    | TreeTypes.StrandTy _ => ()                    | TreeTypes.StrandTy _ => ()
56                    | _ => (case find ty                          | TreeTypes.TupleTy tys => (insert ty; List.app add tys)
57                         of NONE => ins (ty, inPrint)                          | TreeTypes.SeqTy(ty', _) => (insert ty; add ty')
58                          | SOME b => if inPrint andalso (not b) then ins (ty, true) else ()                          | _ => insert ty
                       (* end case *))  
59                  (* end case *))                  (* end case *))
60            in            in
61                      add ty
62                    end
63              in
64              addTy              addTy
65            end            end
66    
# Line 62  Line 82 
82                    | IR.E_Op(rator, args) => (                    | IR.E_Op(rator, args) => (
83                        (* TODO: check rator *)                        (* TODO: check rator *)
84                        List.app doExp args)                        List.app doExp args)
85                    | IR.E_Vec(_, es) => List.app doExp es                    | IR.E_Vec(_, _, es) => List.app doExp es
86                    | IR.E_Cons(es, ty) => (addType(ty, false); List.app doExp es)                    | IR.E_Cons(es, ty) => (addType(ty, false); List.app doExp es)
87                    | IR.E_Seq(es, ty) => (addType(ty, false); List.app doExp es)                    | IR.E_Seq(es, ty) => (addType(ty, false); List.app doExp es)
88                    | IR.E_Pack(_, es) => List.app doExp es                    | IR.E_Pack(_, es) => List.app doExp es
# Line 105  Line 125 
125              info              info
126            end            end
127    
128      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  
129    
130    end    end

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

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