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

SCM Repository

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

Diff of /branches/pure-cfg/src/compiler/simplify/eval.sml

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

revision 677, Wed Mar 23 17:00:07 2011 UTC revision 678, Wed Mar 23 17:20:50 2011 UTC
# Line 193  Line 193 
193              eval (args, [])              eval (args, [])
194            end            end
195    
196      fun evalStatics (statics, blk) = let      fun getInput (ty, name, optDefault) = (case ty
           fun evalBlock (env, S.Block stms) = let  
                 exception Done of value VMap.map  
                 fun evalStm (stm, env) = (case stm  
                        of S.S_Assign(x, S.E_Input(ty, name, optDefault)) =>  
                             if VSet.member(statics, x)  
                               then let  
                                 val optDefault = Option.map (evalVar env) optDefault  
                                 val input = (case ty  
197                                         of Ty.T_Bool =>                                         of Ty.T_Bool =>
198                                              Inputs.getInput(name, (Option.map BV) o Bool.fromString, optDefault)                                              Inputs.getInput(name, (Option.map BV) o Bool.fromString, optDefault)
199                                          | Ty.T_Int =>                                          | Ty.T_Int =>
# Line 209  Line 201 
201                                          | Ty.T_String => Inputs.getInput(name, fn s => SOME(SV s), optDefault)                                          | Ty.T_String => Inputs.getInput(name, fn s => SOME(SV s), optDefault)
202                                          | Ty.T_Tensor(Ty.Shape[]) =>                                          | Ty.T_Tensor(Ty.Shape[]) =>
203                                              Inputs.getInput(name, (Option.map RV) o Real.fromString, optDefault)                                              Inputs.getInput(name, (Option.map RV) o Real.fromString, optDefault)
204                | Ty.T_Tensor(Ty.Shape[Ty.DimConst d]) => let
205                    fun fromString s = let
206                        (* first split into fields by "," *)
207                          val flds = String.fields (fn #"," => true | _ => false) s
208                        (* then tokenize by white space and flatten *)
209                          val toks = List.concat(List.map (String.tokens Char.isSpace) flds)
210                        (* then convert to reals *)
211                          val vals = List.map (valOf o Real.fromString) toks
212                          in
213                            if (List.length vals = d)
214                              then SOME(TV([d], vals))
215                              else NONE
216                          end
217                          handle _ => NONE
218                    in
219                      Inputs.getInput(name, fromString, optDefault)
220                    end
221                                          | Ty.T_Tensor shp => raise Fail "TODO: general tensor inputs"                                          | Ty.T_Tensor shp => raise Fail "TODO: general tensor inputs"
222                                          | _ => raise Fail(concat[                                          | _ => raise Fail(concat[
223                                                "input ", name, " has invalid type ", TypeUtil.toString ty                                                "input ", name, " has invalid type ", TypeUtil.toString ty
224                                              ])                                              ])
225                                        (* end case *))                                        (* end case *))
226    
227        fun evalStatics (statics, blk) = let
228              fun evalBlock (env, S.Block stms) = let
229                    exception Done of value VMap.map
230                    fun evalStm (stm, env) = (case stm
231                           of S.S_Assign(x, S.E_Input(ty, name, optDefault)) =>
232                                if VSet.member(statics, x)
233                                  then let
234                                    val optDefault = Option.map (evalVar env) optDefault
235                                    val input = getInput (ty, name, optDefault)
236                                  in                                  in
237                                    case input                                    case input
238                                     of SOME v => VMap.insert(env, x, v)                                     of SOME v => VMap.insert(env, x, v)

Legend:
Removed from v.677  
changed lines
  Added in v.678

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