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

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/codegen/codegen-fn.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/codegen/codegen-fn.sml

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

revision 532, Mon Feb 14 20:26:41 2011 UTC revision 533, Mon Feb 14 22:56:45 2011 UTC
# Line 22  Line 22 
22    (* convert LowIL types to T types *)    (* convert LowIL types to T types *)
23      fun cvtTy ty = (case ty      fun cvtTy ty = (case ty
24             of Ty.BoolTy => T.boolTy             of Ty.BoolTy => T.boolTy
25              | Ty.StringTy => raise Fail "FIXME: StringTy"              | Ty.StringTy => T.stringTy
26              | Ty.IVecTy 1 => T.intTy              | Ty.IVecTy 1 => T.intTy
27              | Ty.IVecTy n => T.ivecTy n         (* FIXME: what about vector splits? *)              | Ty.IVecTy n => T.ivecTy n         (* FIXME: what about vector splits? *)
28              | Ty.VecTy 1 => T.realTy              | Ty.VecTy 1 => T.realTy
29              | Ty.VecTy n => T.vecTy n           (* FIXME: what about vector splits? *)              | Ty.VecTy n => T.vecTy n           (* FIXME: what about vector splits? *)
30              | Ty.AddrTy => raise Fail "FIXME: AddrTy"              | Ty.AddrTy => T.boolTy (* FIXME *)
31              | Ty.ImageTy =>  raise Fail "FIXME: ImageTy"              | Ty.ImageTy => T.boolTy (* FIXME *)
32            (* end case *))            (* end case *))
33    
34      fun lookup (env, x) = (case V.Map.find (env, x)      fun lookup (env, x) = (case V.Map.find (env, x)
# Line 85  Line 85 
85                    | (Op.LoadVoxels(rTy, n), [a]) => T.Expr.intLit 0 (* FIXME *)                    | (Op.LoadVoxels(rTy, n), [a]) => T.Expr.intLit 0 (* FIXME *)
86                    | (Op.PosToImgSpace d, [v, x]) => T.Expr.intLit 0 (* FIXME *)                    | (Op.PosToImgSpace d, [v, x]) => T.Expr.intLit 0 (* FIXME *)
87                    | (Op.GradToWorldSpace d, [v, x]) => T.Expr.intLit 0 (* FIXME *)                    | (Op.GradToWorldSpace d, [v, x]) => T.Expr.intLit 0 (* FIXME *)
88                    | (Op.LoadImage info, [a]) => T.Expr.intLit 0 (* FIXME *)                    | (Op.LoadImage info, [a]) => raise Fail "impossible"
89                    | (Op.Inside d, [v, x]) => T.Expr.intLit 0 (* FIXME *)                    | (Op.Inside d, [v, x]) => raise Fail "impossible"
90                    | (Op.Input(ty, name), []) => T.Expr.intLit 0 (* FIXME *)                    | (Op.Input(ty, name), []) => raise Fail "impossible"
91                    | (Op.InputWithDefault(ty, name), [a]) => T.Expr.intLit 0 (* FIXME *)                    | (Op.InputWithDefault(ty, name), [a]) => T.Expr.intLit 0 (* FIXME *)
92                    | _ => raise Fail(concat[                    | _ => raise Fail(concat[
93                          "incorrect number of arguments for ", Op.toString rator                          "incorrect number of arguments for ", Op.toString rator
94                        ])                        ])
95                  (* end case *))                  (* end case *))
             | IL.E_Cons args => T.Expr.intLit 0 (* FIXME *)  
96            (* end case *))            (* end case *))
97    
98      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps      and trExps (env, exps) = List.map (fn exp => trExp(env, exp)) exps
99    
100      fun trStmt (env, stm) = (case stm      fun trStmt (env, stm) = (case stm
101             of IL.S_Comment text => T.Stmt.comment text             of IL.S_Comment text => [T.Stmt.comment text]
102  (* FIXME: special case for when x is a strand-state variable *)  (* FIXME: special case for when x is a strand-state variable *)
103              | IL.S_Assign(x, exp) => (case V.kind x              | IL.S_Assign(x, exp) => (case V.kind x
104                   of IL.VK_Global => T.Stmt.assignState(lookup(env, x), trExp(env, exp))                   of IL.VK_Global => [T.Stmt.assign(lookup(env, x), trExp(env, exp))]
105                    | IL.VK_State strand => raise Fail "FIXME: state var"                    | IL.VK_State strand => raise Fail "FIXME: state var"
106                    | IL.VK_Local => T.Stmt.assign(lookup(env, x), trExp(env, exp))                    | IL.VK_Local => [T.Stmt.assign(lookup(env, x), trExp(env, exp))]
107                  (* end case *))                  (* end case *))
108                | IL.S_Cons(lhs, args) =>
109                    [T.Stmt.cons(lookup(env, lhs), trExps(env, args))]
110                | IL.S_LoadImage(lhs, dim, name) =>
111                    T.Stmt.loadImage (lookup(env, lhs), dim, trExp(env, name))
112                | IL.S_Input(lhs, name, optDflt) =>
113                    T.Stmt.input(lookup(env, lhs), name, Option.map (fn e => trExp(env, e)) optDflt)
114              | IL.S_IfThen(cond, thenBlk) =>              | IL.S_IfThen(cond, thenBlk) =>
115                  T.Stmt.ifthen(trExp(env, cond), trBlock(env, thenBlk))                  [T.Stmt.ifthen(trExp(env, cond), trBlock(env, thenBlk))]
116              | IL.S_IfThenElse(cond, thenBlk, elseBlk) =>              | IL.S_IfThenElse(cond, thenBlk, elseBlk) =>
117                  T.Stmt.ifthenelse(trExp(env, cond),                  [T.Stmt.ifthenelse(trExp(env, cond),
118                    trBlock(env, thenBlk),                    trBlock(env, thenBlk),
119                    trBlock(env, elseBlk))                    trBlock(env, elseBlk))]
120              | IL.S_Die => T.Stmt.die()              | IL.S_Die => [T.Stmt.die()]
121              | IL.S_Stabilize => T.Stmt.stabilize()              | IL.S_Stabilize => [T.Stmt.stabilize()]
122            (* end case *))            (* end case *))
123    
124      and trBlock (env, IL.Block{locals, body}) = (      and trBlock (env, IL.Block{locals, body}) = (
125  (* what about the locals?? *)  (* what about the locals?? *)
126            T.Stmt.block(List.map (fn stm => trStmt(env, stm)) body))            T.Stmt.block(List.foldr (fn (stm, stms) => trStmt(env, stm)@stms) [] body))
127    
128      fun generate (fileStem, srcProg) = let      fun generate (fileStem, srcProg) = let
129            val TreeIL.Program{globals, globalInit, strands} = LowToTree.translate srcProg            val TreeIL.Program{globals, globalInit, strands} = LowToTree.translate srcProg
# Line 130  Line 135 
135                  in                  in
136                    List.foldl gvar V.Map.empty globals                    List.foldl gvar V.Map.empty globals
137                  end                  end
           val globalInit = trBlock (env, globalInit)  
138            in            in
139              (* global initialization *)
140                T.globalInit (prog, trBlock (env, globalInit));
141            (* output the program *)            (* output the program *)
142              T.generate (fileStem, prog)              T.generate (fileStem, prog)
143            end            end

Legend:
Removed from v.532  
changed lines
  Added in v.533

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