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

SCM Repository

[diderot] Diff of /branches/lamont/src/compiler/c-util/gen-library-interface.sml
ViewVC logotype

Diff of /branches/lamont/src/compiler/c-util/gen-library-interface.sml

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

revision 2297, Fri Mar 15 22:05:31 2013 UTC revision 2298, Fri Mar 15 22:18:22 2013 UTC
# Line 17  Line 17 
17  structure GenLibraryInterface : sig  structure GenLibraryInterface : sig
18    
19      val gen : {      val gen : {
20              tgt : TargetUtil.target_desc,       (* target information *)              props : Properties.props,           (* target information *)
21              rt : string option,                 (* fragment with extra runtime system hooks *)              rt : string option,                 (* fragment with extra runtime system hooks *)
22              inputs : (TreeIL.Ty.ty * string * string option * TreeIL.exp option) list,              inputs : (TreeIL.Ty.ty * string * string option * TreeIL.exp option) list,
23              outputs : (TreeIL.Ty.ty * string) list              outputs : (TreeIL.Ty.ty * string) list
# Line 43  Line 43 
43              String.concat["_", CharVector.map tr base, "_H_"]              String.concat["_", CharVector.map tr base, "_H_"]
44            end            end
45    
46      fun gen {tgt, rt, inputs, outputs} = let      fun gen {props, rt, inputs, outputs} = let
47            val filename = OS.Path.joinDirFile{            val filename = OS.Path.joinDirFile{
48                    dir = #outDir tgt,                    dir = #outDir props,
49                    file = OS.Path.joinBaseExt{base = #outBase tgt, ext = SOME "h"}                    file = OS.Path.joinBaseExt{base = #outBase props, ext = SOME "h"}
50                  }                  }
51          (* the world pointer type *)          (* the world pointer type *)
52            val worldPtrTy = CL.T_Ptr(CL.T_Named(N.worldTy tgt))            val worldPtrTy = CL.T_Ptr(CL.T_Named(N.worldTy props))
53          (* create decls for an input variable *)          (* create decls for an input variable *)
54            fun mkInputDecls (ty, name, desc, optDflt) = let            fun mkInputDecls (ty, name, desc, optDflt) = let
55                  val wrldParam = CL.PARAM([], worldPtrTy, "wrld")                  val wrldParam = CL.PARAM([], worldPtrTy, "wrld")
# Line 58  Line 58 
58                         of NONE => []                         of NONE => []
59                          | SOME desc => [                          | SOME desc => [
60                                CL.D_Var(["extern"], CL.T_Ptr(CL.T_Named "const char"),                                CL.D_Var(["extern"], CL.T_Ptr(CL.T_Named "const char"),
61                                  N.inputDesc(tgt, name), NONE)                                  N.inputDesc(props, name), NONE)
62                              ]                              ]
63                        (* end case *))                        (* end case *))
64                  val getDcl = if Option.isSome optDflt                  val getDcl = if Option.isSome optDflt
65                          then let                          then let
66                            val name = N.inputGet(tgt, name)                            val name = N.inputGet(props, name)
67                          (* convert the input type to a by-reference C type *)                          (* convert the input type to a by-reference C type *)
68                            val outTy = (case ty                            val outTy = (case ty
69                                   of Ty.BoolTy => CL.T_Ptr(trType ty)                                   of Ty.BoolTy => CL.T_Ptr(trType ty)
# Line 87  Line 87 
87                      (* prototypes for setting an image or dynamic sequence from a nrrd *)                      (* prototypes for setting an image or dynamic sequence from a nrrd *)
88                        fun loadPrototypes () = [                        fun loadPrototypes () = [
89                                CL.D_Proto(                                CL.D_Proto(
90                                  [], CL.boolTy, N.inputSetByName(tgt, name),                                  [], CL.boolTy, N.inputSetByName(props, name),
91                                  [wrldParam, CL.PARAM(["const"], CL.charPtr, "s")]),                                  [wrldParam, CL.PARAM(["const"], CL.charPtr, "s")]),
92                                CL.D_Proto(                                CL.D_Proto(
93                                  [], CL.boolTy, N.inputSet(tgt, name),                                  [], CL.boolTy, N.inputSet(props, name),
94                                  [wrldParam, CL.PARAM([], nrrdPtrTy, "data")])                                  [wrldParam, CL.PARAM([], nrrdPtrTy, "data")])
95                              ]                              ]
96                        in                        in
# Line 99  Line 99 
99                            | Ty.DynSeqTy _ => loadPrototypes()                            | Ty.DynSeqTy _ => loadPrototypes()
100                            | _ => [                            | _ => [
101                                  CL.D_Proto(                                  CL.D_Proto(
102                                    [], CL.boolTy, N.inputSet(tgt, name),                                    [], CL.boolTy, N.inputSet(props, name),
103                                    [wrldParam, CL.PARAM([], trType ty, "v")])                                    [wrldParam, CL.PARAM([], trType ty, "v")])
104                                ]                                ]
105                          (* end case *)                          (* end case *)
# Line 110  Line 110 
110          (* create a decl for an output variable *)          (* create a decl for an output variable *)
111            fun mkGetDecl snapshot (Ty.DynSeqTy _, name) = [            fun mkGetDecl snapshot (Ty.DynSeqTy _, name) = [
112                    CL.D_Proto(                    CL.D_Proto(
113                      [], CL.boolTy, (if snapshot then N.snapshotGet else N.outputGet)(tgt, name),                      [], CL.boolTy, (if snapshot then N.snapshotGet else N.outputGet)(props, name),
114                      [CL.PARAM([], worldPtrTy, "wrld"), CL.PARAM([], nrrdPtrTy, "lengths"), CL.PARAM([], nrrdPtrTy, "data")])                      [CL.PARAM([], worldPtrTy, "wrld"), CL.PARAM([], nrrdPtrTy, "lengths"), CL.PARAM([], nrrdPtrTy, "data")])
115                  ]                  ]
116              | mkGetDecl snapshot (_, name) = [              | mkGetDecl snapshot (_, name) = [
117                    CL.D_Proto(                    CL.D_Proto(
118                      [], CL.boolTy, (if snapshot then N.snapshotGet else N.outputGet)(tgt, name),                      [], CL.boolTy, (if snapshot then N.snapshotGet else N.outputGet)(props, name),
119                      [CL.PARAM([], worldPtrTy, "wrld"), CL.PARAM([], nrrdPtrTy, "data")])                      [CL.PARAM([], worldPtrTy, "wrld"), CL.PARAM([], nrrdPtrTy, "data")])
120                  ]                  ]
121            val placeholders = [            val placeholders = [
122                    ("DIDEROT_FLOAT_PRECISION", TargetUtil.floatPrecisionDef tgt),                    ("DIDEROT_FLOAT_PRECISION", Properties.floatPrecisionDef props),
123                    ("DIDEROT_INT_PRECISION", TargetUtil.intPrecisionDef tgt),                    ("DIDEROT_INT_PRECISION", Properties.intPrecisionDef props),
124                    ("DIDEROT_TARGET", TargetUtil.targetDef tgt),                    ("DIDEROT_TARGET", Properties.targetDef props),
125                    ("HDRFILE", filename),                    ("HDRFILE", filename),
126                    ("HDR_DEFINE", mkSymbol(#outBase tgt)),                    ("HDR_DEFINE", mkSymbol(#outBase props)),
127                    ("PREFIX", #namespace tgt),                    ("PREFIX", #namespace props),
128                    ("SRCFILE", #srcFile tgt)                    ("SRCFILE", #srcFile props)
129                  ]                  ]
130            val outStrm = TextIO.openOut filename            val outStrm = TextIO.openOut filename
131            val outS = PrC.new outStrm            val outS = PrC.new outStrm
132            fun prFrag frag = PrC.output (outS, CL.verbatim [frag] placeholders)            fun prFrag frag = PrC.output (outS, CL.verbatimDcl [frag] placeholders)
133            val prDecls = List.app (fn dcl => PrC.output(outS, dcl))            val prDecls = List.app (fn dcl => PrC.output(outS, dcl))
134            in            in
135              prFrag LibInterfaceHeadFrag.text;              prFrag LibInterfaceHeadFrag.text;
# Line 139  Line 139 
139              case rt of SOME rt => prFrag rt | _ => ();              case rt of SOME rt => prFrag rt | _ => ();
140              prFrag LibInterfaceBodyFrag.text;              prFrag LibInterfaceBodyFrag.text;
141              PrC.output (outS, CL.D_Verbatim ["\n/**** Getters for output values ****/\n"]);              PrC.output (outS, CL.D_Verbatim ["\n/**** Getters for output values ****/\n"]);
142              if (#snapshot tgt)              if (#snapshot props)
143                then List.app (fn output => prDecls (mkGetDecl true output)) outputs                then List.app (fn output => prDecls (mkGetDecl true output)) outputs
144                else ();                else ();
145              List.app (fn output => prDecls (mkGetDecl false output)) outputs;              List.app (fn output => prDecls (mkGetDecl false output)) outputs;

Legend:
Removed from v.2297  
changed lines
  Added in v.2298

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