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 1844, Sat Apr 14 12:11:31 2012 UTC revision 1845, Sun Apr 15 13:41:40 2012 UTC
# Line 6  Line 6 
6    
7  structure GenInputs : sig  structure GenInputs : sig
8    
9      (* input variable descriptor: type, name, description, has default *)
10      type input_desc = (TreeIL.Ty.ty * string * string * bool)      type input_desc = (TreeIL.Ty.ty * string * string * bool)
11    
12      val gatherInputs : TreeIL.block -> input_desc list      val gatherInputs : TreeIL.block -> input_desc list
# Line 44  Line 45 
45              List.mapPartial gather body              List.mapPartial gather body
46            end            end
47    
48  (* old input code from tree-to-c.sml    (* generate code to register command-line options for setting the input variables *)
                   | IL.S_Input(lhs, name, desc, optDflt) => let  
                       val lhs = VarToC.lvalueVar (env, lhs)  
                       val (initCode, hasDflt) = (case optDflt  
                              of SOME e => ([CL.mkAssign(lhs, trExp(env, e))], true)  
                               | NONE => ([], false)  
                             (* end case *))  
                       val code = [CL.mkCall(N.input(V.ty lhs), [  
                               CL.mkVar "opts",  
                               CL.mkStr name,  
                               CL.mkStr desc,  
                               addrOf lhs,  
                               CL.mkBool hasDflt])]  
                       in  
                         initCode  
                       end  
 *)  
   
49      fun genRegisterInputs (tgt, inputs) = let      fun genRegisterInputs (tgt, inputs) = let
50          (* the world pointer type *)          (* the world pointer type *)
51            val worldPtrTy = CL.T_Ptr(CL.T_Named(N.worldTy tgt))            val worldPtrTy = CL.T_Ptr(CL.T_Named(N.worldTy tgt))
52            (* the global state pointer type *)
53              val globPtrTy = CL.T_Ptr(CL.T_Named(N.globalTy tgt))
54            (* some common variables *)
55              val globV = CL.mkVar "glob"
56              val optsV = CL.mkVar "opts"
57            (* register a given input *)
58              fun registerInput (ty, name, desc, hasDflt) = CL.mkCall(N.input ty, [
59                      optsV, CL.mkStr name, CL.mkStr desc,
60                      CL.mkUnOp(CL.%&, CL.mkIndirect(globV, name)),
61                      CL.mkBool hasDflt
62                    ])
63            in            in
64              CL.D_Func(              CL.D_Func(
65                [], CL.voidTy, N.registerOpts,                ["static"], CL.voidTy, N.registerOpts,
66                [CL.PARAM([], worldPtrTy, "wrld"), CL.PARAM([], CL.T_Ptr(CL.T_Named N.optionsTy), "opts")],                [CL.PARAM([], worldPtrTy, "wrld"), CL.PARAM([], CL.T_Ptr(CL.T_Named N.optionsTy), "opts")],
67  (* FIXME: fill in the code! *)                CL.mkBlock(
68                CL.mkBlock[])                  CL.mkDeclInit(globPtrTy, "glob", CL.mkIndirect(CL.mkVar "wrld", "globals")) ::
69                    List.map registerInput inputs))
70            end            end
71    
72    (* for each input variable we generate two or three top-level declaraions *)    (* for each input variable we generate two or three top-level declaraions *)

Legend:
Removed from v.1844  
changed lines
  Added in v.1845

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