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

SCM Repository

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

Diff of /branches/vis15/src/compiler/cxx-util/gen-inputs-util.sml

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

revision 3924, Fri Jun 3 17:30:27 2016 UTC revision 3931, Sun Jun 5 14:13:21 2016 UTC
# Line 69  Line 69 
69                    | ty => (trType(env, ty), GVar.qname var)                    | ty => (trType(env, ty), GVar.qname var)
70                  (* end case *))                  (* end case *))
71            in            in
72              [CL.D_StructDef(NONE, List.map mkField inputs, SOME "cmd_line_inputs")]              [CL.D_StructDef(NONE, List.map mkField inputs, SOME RN.inputsTyName)]
73            end            end
74    
75    (* generate code to initialize the default input values *)    (* generate code to initialize the default input values *)
76      fun genInitDefaults (env, constInit) =      fun genInitDefaults (env, constInit) =
77            CL.D_Func(            CL.D_Func(
78              ["static"], CL.voidTy, "init_defaults",              ["static"], CL.voidTy, "init_defaults",
79              [CL.PARAM([], globalPtrTy, Env.global env)],              [CL.PARAM([], RN.inputsPtrTy, "inp")],
80              ToC.trBlock (env, constInit))              ToC.trBlock (Env.insert(env, PseudoVars.global, "inp"), constInit))
81    
82    (* generate code to register command-line options for setting the input variables *)    (* generate code to register command-line options for setting the input variables *)
83      fun genRegisterInputs (env, inputs) = let      fun genRegisterInputs (env, inputs) = let
84          (* pointer to the globals *)          (* pointer to the inputs *)
85            val globalsV = Env.global env            val inputsV = "inp"
86            val globalsE = CL.mkVar globalsV            val inputsE = CL.mkVar inputsV
87          (* the options pointer type *)          (* the options pointer type *)
88            val optionsPtrTy = CL.T_Ptr (Env.optionsTy env)            val optionsPtrTy = CL.T_Ptr (Env.optionsTy env)
89          (* some common variables *)          (* some common variables *)
           val inpV = CL.mkVar "inp"  
90            val optsV = CL.mkVar "opts"            val optsV = CL.mkVar "opts"
91          (* register a given input *)          (* register a given input *)
92            fun registerInput (Inp.INP{var, name, ty, desc, init}) =            fun registerInput (Inp.INP{var, name, ty, desc, init}) = let
93                  CL.mkCallExp(                  val args = [case init of Inp.NoDefault => CL.mkBool false | _ => CL.mkBool true]
94                    CL.mkIndirect(optsV, "add"),                  val args = let
95                    [ CL.mkStr name,                        fun arrayArg n = CL.mkInt(IntLit.fromInt n) ::
96                      CL.mkStr(Option.getOpt(desc, "")),                              CL.mkIndirect(inputsE, GVar.qname var) :: args
97                      if Ty.isCArrayTy ty                        in
98                        then CL.mkIndirect(globalsE, GVar.qname var)                          case ty
99                        else CL.mkAddrOf(CL.mkIndirect(globalsE, GVar.qname var)),                           of Ty.TensorTy(shape as _::_) => arrayArg (List.foldl Int.* 1 shape)
100                      case init of Inp.NoDefault => CL.mkBool false | _ => CL.mkBool true                            | Ty.SeqTy(_, SOME n) => arrayArg n
101                    ])                            | _ => CL.mkAddrOf(CL.mkIndirect(inputsE, GVar.qname var)) :: args
102                            (* end case *)
103                          end
104                    val args = (case desc
105                            of NONE => CL.mkVar "nullptr" :: args
106                             | SOME s => CL.mkStr s :: args
107                           (* end case *))
108                    val args = CL.mkStr name :: args
109                    in
110                      CL.mkExpStm (CL.mkIndirectDispatch (optsV, "add", args))
111                    end
112            in            in
113              CL.D_Func(              CL.D_Func(
114                ["static"], CL.voidTy, "register_inputs",                ["static"], CL.voidTy, "register_inputs",
115                [CL.PARAM([], globalPtrTy, globalsV), CL.PARAM([], RN.optionsPtrTy env, "opts")],                [CL.PARAM([], RN.inputsPtrTy, inputsV), CL.PARAM([], RN.optionsPtrTy env, "opts")],
116                CL.mkBlock(List.map registerInput inputs))                CL.mkBlock(List.map registerInput inputs))
117            end            end
118    

Legend:
Removed from v.3924  
changed lines
  Added in v.3931

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