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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/simple/simple.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/simple/simple.sml

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

revision 3445, Fri Nov 20 15:47:57 2015 UTC revision 3446, Fri Nov 20 17:18:22 2015 UTC
# Line 15  Line 15 
15    
16      type var = SimpleVar.t      type var = SimpleVar.t
17    
     datatype var_kind = datatype Var.kind  
   
18    (* types with the meta variables resolved *)    (* types with the meta variables resolved *)
19      type ty = SimpleTypes.ty      type ty = SimpleTypes.ty
20    
21    (* resolved meta-variable arguments to basis functions *)    (* resolved meta-variable arguments to basis functions *)
22      datatype meta_arg = datatype SimpleTypes.meta_arg      datatype meta_arg = datatype SimpleTypes.meta_arg
23    
24      datatype var_kind = datatype AST.var_kind      datatype init_from_nrrd
25          = DynSeq of string
26      datatype var = V of {        | Proxy of string * ImageInfo.info                (* input image specified by proxy *)
27          name : string,          (* print name of variable *)        | Image of ImageInfo.info                         (* input image w/o proxy *)
28          id : Stamp.stamp,       (* unique ID *)  
29          kind : var_kind,        (* variable kind *)      datatype input = INP of {           (* global input variable *)
30          ty : ty                 (* type *)          var : var,                      (* the global variable *)
31            desc : string option,           (* the optional descriptor *)
32            init : init_from_nrrd option    (* the optional initialization *)
33        }        }
34    
35      datatype program = Program of {      datatype program = Program of {
36          props : Properties.t list,          props : Properties.t list,
37  (* consts? *)  (* consts? *)
38          inputDefaults : block,          (* initialization of input-defaults *)          inputDefaults : block,          (* initialization of input-defaults *)
39          inputs : (var * SimpleTypes.ty Inputs.input) list,      (* input globals *)          inputs : input list,            (* input globals *)
40          globals : var list,             (* non-input globals *)          globals : var list,             (* non-input globals *)
41          globalInit : block,          globalInit : block,
42          funcs : func list,          funcs : func list,
43          strands : strand list,          strand : strand,
44          create : create                 (* block evaluates any vars used in init *)          create : create,                (* block evaluates any vars used in init *)
45          update : block option          update : block option
46        }        }
47    
# Line 61  Line 61 
61          params : var list,          params : var list,
62          state : var list,          state : var list,
63          stateInit : block,          stateInit : block,
64          methods : method list          init : block option,
65            update : block,
66            stabilize : block option
67        }        }
68    
     and method = Method of StrandUtil.method_name * block  
   
69      and block = Block of stmt list      and block = Block of stmt list
70    
71      and stmt      and stmt
# Line 84  Line 84 
84    
85      and exp      and exp
86        = E_Var of var        = E_Var of var
87        | E_Lit of Literal.literal        | E_Lit of Literal.t
       | E_Tuple of var list  
88        | E_Apply of var * var list * ty                          (* user-defined function *)        | E_Apply of var * var list * ty                          (* user-defined function *)
89        | E_Prim of AST.var * meta_arg list * var list * ty       (* Diderot builtin *)        | E_Prim of AST.var * meta_arg list * var list * ty       (* Diderot builtin *)
90        | E_Cons of var list        | E_Cons of var list * ty
91        | E_Seq of var list * ty                                  (* sequence (ty is result type) *)        | E_Seq of var list * ty                                  (* sequence (ty is result type) *)
92        | E_Slice of var * var option list * ty                   (* tensor slicing (ty is result type) *)        | E_Slice of var * var option list * ty                   (* tensor slicing (ty is result type) *)
93        | E_Coerce of {srcTy : ty, dstTy : ty, x : var}        | E_Coerce of {srcTy : ty, dstTy : ty, x : var}
94        | E_LoadSeq of ty * string        | E_LoadSeq of ty * string
95        | E_LoadImage of ty * string * ImageInfo.info        | E_LoadImage of ty * string * ImageInfo.info
96    
97      fun typeOf (E_Var(V{ty, ...})) = ty      fun typeOf (E_Var x) = SimpleVar.typeOf x
98        | typeOf (E_Lit lit) = (case lit        | typeOf (E_Lit lit) = (case lit
99             of (Literal.Int _) => SimpleTypes.T_Int             of (Literal.Int _) => SimpleTypes.T_Int
100              | (Literal.Float _) => SimpleTypes.T_Tensor[]              | (Literal.Real _) => SimpleTypes.T_Tensor[]
101              | (Literal.String s) => SimpleTypes.T_String              | (Literal.String s) => SimpleTypes.T_String
102              | (Literal.Bool _) => SimpleTypes.T_Bool              | (Literal.Bool _) => SimpleTypes.T_Bool
103            (* end case *))            (* end case *))
       | typeOf (E_Tuple _) = raise Fail "E_Tuple"  
104        | typeOf (E_Apply(_, _, ty)) = ty        | typeOf (E_Apply(_, _, ty)) = ty
105        | typeOf (E_Prim(_, _, _, ty)) = ty        | typeOf (E_Prim(_, _, _, ty)) = ty
106        | typeOf (E_Cons[]) = raise Fail "impossible empty E_Cons"        | typeOf (E_Cons(_, ty)) = ty
       | typeOf (E_Cons(V{ty, ...}::xs)) = let  
           val d = List.length xs + 1  
           in  
             case ty  
              of SimpleTypes.T_Tensor shape => SimpleTypes.T_Tensor(shape @ [d])  
               | _ => raise Fail(concat[  
                     "element of tensor construction is ", SimpleTypes.toString ty,  
                     ", expected tensor"  
                   ])  
             (* end case *)  
           end  
107        | typeOf (E_Seq(_, ty)) = ty        | typeOf (E_Seq(_, ty)) = ty
108        | typeOf (E_Slice(_, _, ty)) = ty        | typeOf (E_Slice(_, _, ty)) = ty
109        | typeOf (E_Coerce{dstTy, ...}) = dstTy        | typeOf (E_Coerce{dstTy, ...}) = dstTy

Legend:
Removed from v.3445  
changed lines
  Added in v.3446

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