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

SCM Repository

[diderot] Annotation of /branches/pure-cfg/src/compiler/tree-il/tree-il.sml
ViewVC logotype

Annotation of /branches/pure-cfg/src/compiler/tree-il/tree-il.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3349 - (view) (download)

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

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