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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/options/options.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/options/options.sml

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

revision 4115, Thu Jun 30 13:57:56 2016 UTC revision 4116, Thu Jun 30 14:50:25 2016 UTC
# Line 17  Line 17 
17      val parseCmdLine : string list -> {      val parseCmdLine : string list -> {
18              help : bool option,         (* "-h" and "--help" ==> SOME false; "-H" ==> SOME true. *)              help : bool option,         (* "-h" and "--help" ==> SOME false; "-H" ==> SOME true. *)
19              version : bool,             (* "--version" specified? *)              version : bool,             (* "--version" specified? *)
20                about : bool,               (* "--about" specified? *)
21              defs : string list,         (* input-variable definitions *)              defs : string list,         (* input-variable definitions *)
22              target : TargetOptions.t,   (* collected infromation about the target *)              target : TargetOptions.t,   (* collected infromation about the target *)
23              file : string               (* source file *)              file : string               (* source file *)
# Line 37  Line 38 
38    
39    (* option flags that are set by getOpt *)    (* option flags that are set by getOpt *)
40      val helpFlg = ref(NONE : bool option)       (* SOME false -- short help; SOME true -- long help *)      val helpFlg = ref(NONE : bool option)       (* SOME false -- short help; SOME true -- long help *)
41        val aboutFlg = ref false
42      val longHelp = ref false      val longHelp = ref false
43      val versionFlg = ref false      val versionFlg = ref false
44      val debugFlg = ref false      val debugFlg = ref false
# Line 114  Line 116 
116                desc = setFlag (versionFlg, true),                desc = setFlag (versionFlg, true),
117                help = "show the compiler version"                help = "show the compiler version"
118              },              },
119                { short = "", long = ["about"],
120                  desc = setFlag (aboutFlg, true),
121                  help = "information about the Diderot language and compiler"
122                },
123              { short = "", long = ["exec"],              { short = "", long = ["exec"],
124                desc = setFlag (standaloneFlg, true),                desc = setFlag (standaloneFlg, true),
125                help = "generate a standalone executable"                help = "generate a standalone executable"
# Line 181  Line 187 
187                } :: optimizeFlags @ dumpFlags @ checkFlags                } :: optimizeFlags @ dumpFlags @ checkFlags
188            end            end
189    
190      fun parseCmdLine args = let      fun mkTargetDesc (srcFile) : Tgt.t = let
         (* first we filter out any variable definitions *)  
           val (defs, rest) = List.partition CmdLineConstants.isCmdLineConst args  
           val (opts, files) = G.getOpt {  
                   argOrder = G.RequireOrder,  
                   options = optionList @ ctlOptions,  
                   errFn = fn s => raise Usage s  
                 } args  
         (* figure out filename pieces *)  
           val srcFile = if isSome(!helpFlg) orelse !versionFlg  
                 then ""  
                 else (case files  
                    of [] => raise Usage "missing file argument"  
                     | [f] => f  
                     | _ => raise Usage "too many files"  
                   (* end case *))  
191            val (outDir, outBase) = (case !outputOpt            val (outDir, outBase) = (case !outputOpt
192                   of NONE => let                   of NONE => let
193                        val {dir, file} = P.splitDirFile srcFile                        val {dir, file} = P.splitDirFile srcFile
194                        in                        in
195                          case P.splitBaseExt file                          case P.splitBaseExt file
196                           of {base, ext=SOME "diderot"} => (dir, base)                           of {base, ext=SOME "diderot"} => (dir, base)
197                              | {base, ext=SOME "ddro"} => (dir, base)
198                            | _ => (dir, file)                            | _ => (dir, file)
199                          (* end case *)                          (* end case *)
200                        end                        end
# Line 234  Line 226 
226                              end                              end
227                        (* end case *))                        (* end case *))
228                  (* end case *))                  (* end case *))
229          (* figure out target details *)            in {
           val targetDesc : Tgt.t = {  
230                    srcFile = srcFile,                    srcFile = srcFile,
231                    outDir = outDir,                    outDir = outDir,
232                    outBase = outBase,                    outBase = outBase,
# Line 248  Line 239 
239                    scalar = !scalarFlg,                    scalar = !scalarFlg,
240                    debug = !debugFlg,                    debug = !debugFlg,
241                    bsp = !bspFlg                    bsp = !bspFlg
242              } end
243    
244        fun parseCmdLine [] = {
245                help = SOME false,
246                version = false,
247                about = false,
248                defs = [],
249                target = mkTargetDesc "",
250                file = ""
251                  }                  }
252          | parseCmdLine args = let
253            (* first we filter out any variable definitions *)
254              val (defs, rest) = List.partition CmdLineConstants.isCmdLineConst args
255              val (opts, files) = G.getOpt {
256                      argOrder = G.RequireOrder,
257                      options = optionList @ ctlOptions,
258                      errFn = fn s => raise Usage s
259                    } args
260            (* figure out filename pieces *)
261              val srcFile = if isSome(!helpFlg) orelse !versionFlg orelse !aboutFlg
262                    then ""
263                    else (case files
264                       of [] => raise Usage "missing file argument"
265                        | [f] => f
266                        | _ => raise Usage "too many files"
267                      (* end case *))
268            in {            in {
269              help = !helpFlg,              help = !helpFlg,
270              version = !versionFlg,              version = !versionFlg,
271                about = !aboutFlg,
272              defs = defs,              defs = defs,
273              target = targetDesc,              target = mkTargetDesc srcFile,
274              file = srcFile              file = srcFile
275            } end            } end
276    
277      fun usage (cmd, long) = G.usageInfo {      fun usage (cmd, long) = let
278              header = concat[            val hdr = concat[
279                  "usage: ", cmd, " [options] file.diderot\n",                  "usage: ", cmd, " [options] file.diderot\n",
280                  "  Version: ", Version.message, "\n",                  "  Version: ", Version.message, "\n",
281                  "  Options:"                  "  Options:"
282                ],                  ]
283              options = optionList @ ctlOptions            in
284            }              if long
285                  then G.usageInfo {header = hdr, options = optionList @ ctlOptions}
286                  else G.usageInfo {header = hdr, options = optionList}
287              end
288    
289    end    end

Legend:
Removed from v.4115  
changed lines
  Added in v.4116

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