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

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/c-util/gen-inputs.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/c-util/gen-inputs.sml

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

revision 2048, Sun Oct 21 17:43:32 2012 UTC revision 2049, Sun Oct 21 18:22:07 2012 UTC
# Line 184  Line 184 
184          (* the world pointer type *)          (* the world pointer type *)
185            val worldPtrTy = CL.T_Ptr(CL.T_Named(N.worldTy tgt))            val worldPtrTy = CL.T_Ptr(CL.T_Named(N.worldTy tgt))
186            val wrldParam = CL.PARAM([], worldPtrTy, "wrld")            val wrldParam = CL.PARAM([], worldPtrTy, "wrld")
187          (* the inputs pointer type *)            fun initFlag (_, name, _, _) = CL.mkAssign(defined name, CL.mkBool false)
           val defPtrTy = CL.T_Ptr(CL.T_Named(N.definedInpTy tgt))  
           fun initFlag (_, name, _, optDflt) =  
                 CL.mkAssign(defined name, CL.mkBool(Option.isSome optDflt))  
188            in            in
189              CL.D_Func(              CL.D_Func(
190                ["static"], CL.voidTy, N.initDefined tgt,                ["static"], CL.voidTy, N.initDefined tgt,
# Line 195  Line 192 
192                CL.mkBlock(List.map initFlag inputs))                CL.mkBlock(List.map initFlag inputs))
193            end            end
194    
195        fun genCheckInputs (tgt, inputs) = let
196            (* the world pointer type *)
197              val worldPtrTy = CL.T_Ptr(CL.T_Named(N.worldTy tgt))
198              val wrldParam = CL.PARAM([], worldPtrTy, "wrld")
199            (* the inputs pointer type *)
200              fun check (ty, name, _, optDflt) = let
201                    val dfltStm = (case optDflt
202                           of SOME v => CL.mkBlock[] (* FIXME: set global to default value *)
203                            | NONE => CL.mkBlock[
204                                  World.errorMsgAdd(CL.mkStr(concat["undefined input \"", name, "\"\n"])),
205                                  CL.mkReturn(SOME(CL.mkBool true))
206                                ]
207                          (* end case *))
208                    in
209                      CL.mkIfThen(CL.mkUnOp(CL.%!, defined name), dfltStm)
210                    end
211              in
212                CL.D_Func(
213                  ["static"], CL.boolTy, N.checkDefined tgt,
214                  [wrldParam],
215                  CL.mkBlock(List.map check inputs @ [CL.mkReturn(SOME(CL.mkBool false))]))
216              end
217    
218    (* for each input variable we generate two or three top-level declarations in the    (* for each input variable we generate two or three top-level declarations in the
219     * exported API.     * exported API.
220     *)     *)
# Line 308  Line 328 
328                              ]                              ]
329                        (* end case *))                        (* end case *))
330                  in                  in
331                    genDefineInp (tgt, inputs) :: (descDcl @ getDcl @ setDcl)                    (descDcl @ getDcl @ setDcl)
332                  end                  end
333              val extras = [
334                      genCheckInputs (tgt, inputs),
335                      genDefineInp (tgt, inputs)
336                    ]
337            in            in
338              List.foldr (fn (input, dcls) => mkInputDecls input @ dcls) [] inputs              List.foldr (fn (input, dcls) => mkInputDecls input @ dcls) extras inputs
339            end            end
340    
341    end    end

Legend:
Removed from v.2048  
changed lines
  Added in v.2049

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