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

SCM Repository

[diderot] Annotation of /trunk/src/compiler/tree-il/tree-il.sml
ViewVC logotype

Annotation of /trunk/src/compiler/tree-il/tree-il.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1640 - (view) (download)

1 : jhr 1115 (* tree-il.sml
2 :     *
3 :     * COPYRIGHT (c) 2011 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *
6 :     * This representation restores the block structure and nested expression syntax
7 :     * of the source language.
8 :     *)
9 :    
10 :     structure TreeIL =
11 :     struct
12 :    
13 :     structure Op = LowOps
14 :     structure Ty = LowILTypes
15 :    
16 :     datatype program = Program of {
17 : jhr 1640 props : StrandUtil.program_prop list,
18 : jhr 1115 globals : var list,
19 : jhr 1301 inputInit : block,
20 : jhr 1115 globalInit : block,
21 :     strands : strand list,
22 :     initially : {
23 :     isArray : bool,
24 :     iterPrefix : block,
25 :     iters : (var * exp * exp) list,
26 :     createPrefix : block,
27 :     strand : Atom.atom,
28 :     args : exp list
29 :     }
30 :     }
31 :    
32 :     and strand = Strand of {
33 :     name : Atom.atom,
34 :     params : var list,
35 : jhr 1640 state : state_var list,
36 : jhr 1115 stateInit : block,
37 :     methods : method list
38 :     }
39 :    
40 : jhr 1640 and state_var = SV of {
41 :     name : string, (* name (should be unique) *)
42 :     id : Stamp.stamp, (* unique ID *)
43 :     ty : Ty.ty, (* type *)
44 : jhr 1115 varying : bool, (* varies over the lifetime of the strand *)
45 : jhr 1640 output : bool (* is the output value of the strand *)
46 : jhr 1115 }
47 :    
48 :     and method = Method of {
49 : jhr 1640 name : StrandUtil.method_name,
50 : jhr 1115 body : block (* method body *)
51 :     }
52 :    
53 :     and block = Block of {
54 :     locals : var list,
55 :     body : stm list
56 :     }
57 :    
58 :     and stm
59 :     = S_Comment of string list
60 : jhr 1640 | S_Assign of var list * exp
61 : jhr 1115 | S_IfThen of exp * block
62 :     | S_IfThenElse of exp * block * block
63 :     (* special Diderot forms *)
64 :     | S_LoadImage of var * int * exp (* load image data *)
65 : jhr 1301 | S_Input of var * string * string * exp option (* get input *)
66 : jhr 1131 | S_New of Atom.atom * exp list (* new strand creation *)
67 : jhr 1640 | S_Save of state_var list * exp (* save strand state *)
68 : jhr 1115 | S_Exit of exp list
69 :     (* return functions for methods *)
70 : jhr 1640 | S_Active
71 :     | S_Stabilize
72 : jhr 1115 | S_Die
73 :    
74 :     and exp
75 : jhr 1640 = E_State of state_var
76 :     | E_Var of var
77 : jhr 1115 | E_Lit of Literal.literal
78 :     | E_Op of Op.rator * exp list
79 :     | E_Apply of ILBasis.name * exp list
80 :     | E_Cons of Ty.ty * exp list
81 :    
82 :     and var = V of {
83 :     name : string, (* name (should be unique) *)
84 :     id : Stamp.stamp, (* unique ID *)
85 :     kind : var_kind,
86 :     ty : Ty.ty (* type *)
87 :     }
88 :    
89 :     and var_kind
90 :     = VK_Global (* global variable *)
91 :     | VK_Local (* includes strand parameters *)
92 :    
93 :     structure Var : sig
94 :    
95 :     val kind : var -> var_kind
96 :     val name : var -> string
97 :     val toString : var -> string
98 :     val ty : var -> Ty.ty
99 :    
100 :     structure Map : ORD_MAP where type Key.ord_key = var
101 :    
102 :     end = struct
103 :     fun kind (V{kind, ...}) = kind
104 :     fun name (V{name, ...}) = name
105 :     fun toString (V{name, id, ...}) = concat[name, "$", Stamp.toString id]
106 :     fun ty (V{ty, ...}) = ty
107 :     local
108 :     structure VarOrd =
109 :     struct
110 :     type ord_key = var
111 :     fun compare (V{id=a, ...}, V{id=b, ...}) = Stamp.compare(a, b)
112 :     end
113 :     in
114 :     structure Map = RedBlackMapFn (VarOrd)
115 :     end (* local *)
116 :     end
117 :    
118 : jhr 1640 structure StateVar : sig
119 :     val name : state_var -> string
120 :     val ty : state_var -> Ty.ty
121 :     val isOutput : state_var -> bool
122 :     val isVarying : state_var -> bool
123 :     val toString : state_var -> string
124 :     end = struct
125 :     fun name (SV{name, ...}) = name
126 :     fun ty (SV{ty, ...}) = ty
127 :     fun isOutput (SV{output, ...}) = output
128 :     fun isVarying (SV{varying, ...}) = varying
129 :     fun toString (SV{name, ...}) = "self." ^ name
130 :     end
131 : jhr 1131
132 :     fun kindToString k = (case k
133 :     of VK_Global => "Global"
134 :     | VK_Local => "Local"
135 :     (* end case *))
136 :    
137 : jhr 1640 fun stateVarToString (SV{name, ...}) = "self." ^ name
138 :    
139 : jhr 1115 end

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