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

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/driver/main.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/driver/main.sml

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

revision 1201, Thu May 12 17:14:24 2011 UTC revision 1202, Thu May 12 18:49:23 2011 UTC
# Line 8  Line 8 
8    
9      val main : (string * string list) -> OS.Process.status      val main : (string * string list) -> OS.Process.status
10    
     val test : string -> unit  
   
11    end = struct    end = struct
12    
13    (* exception tracing magic *)    (* exception tracing magic *)
# Line 67  Line 65 
65              simple              simple
66            end            end
67    
68    (* FIXME: only one target for now *)      fun doFile (target : TargetUtil.target_desc, filename) = BackTrace.monitor (fn () => let
     val target = {  
             target = TargetUtil.TARGET_C,  
             double = false,  
             parallel = false,  
             debug = false  
           }  
   
     fun doFile filename = BackTrace.monitor (fn () => let  
69            val baseName = (case OS.Path.splitBaseExt filename            val baseName = (case OS.Path.splitBaseExt filename
70                   of {base, ext=SOME "diderot"} => base                   of {base, ext=SOME "diderot"} => base
71                    | _ => (errnl "expected diderot file"; quitWithError filename)                    | _ => (errnl "expected diderot file"; quitWithError filename)
# Line 101  Line 91 
91                (BackEnd.generate target) (baseName, lowIL)                (BackEnd.generate target) (baseName, lowIL)
92            end)            end)
93    
94      fun doOptions args = let      fun usage cmd = TextIO.output(TextIO.stdErr, Options.usage cmd)
           val log = ref false  
           val defs = ref []  
           fun doOpts [file] = {log = !log, defs = !defs, file = file}  
             | doOpts ("-log"::r) = (log := true; doOpts r)  
             | doOpts (opt::r) =  
                 if Inputs.isCmdLineInput opt  
                   then (defs := opt :: !defs; doOpts r)  
                   else (  
                     err(concat["invalid command-line input \"", opt, "\"\n"]);  
                     raise ERROR)  
           in  
             doOpts args  
           end  
95    
96      fun main (name: string, args: string list) = let      fun main (name: string, args: string list) = let
97            val {log, defs, file} = doOptions args            val {help, log, target, defs, file} =
98                    (Options.parseCmdLine args)
99                      handle Options.Usage msg => (
100                        err(concat[msg, "\n"]);
101                        usage name;
102                        OS.Process.exit OS.Process.failure)
103              in
104                if help
105                  then (
106                    usage name;
107                    OS.Process.success)
108                  else let
109            val {base, ...} = OS.Path.splitBaseExt file            val {base, ...} = OS.Path.splitBaseExt file
110            in            in
111              if Inputs.initFromArgs defs              if Inputs.initFromArgs defs
112                then (                then (
113                  Log.init(base ^ ".log");                        if log then Log.init(base ^ ".log") else ();
114                  PhaseTimer.withTimer Timers.timeCompiler doFile file;                        PhaseTimer.withTimer Timers.timeCompiler doFile (target, file);
115                  Stats.report ();                  Stats.report ();
116                  Log.reportTiming Timers.timeCompiler;                  Log.reportTiming Timers.timeCompiler;
117                  OS.Process.success)                        OS.Process.success
118                  handle exn => (                      ) handle exn => (
119                    err (concat [                    err (concat [
120                        "uncaught exception ", General.exnName exn, " [", General.exnMessage exn, "]\n"]);                        "uncaught exception ", General.exnName exn, " [", General.exnMessage exn, "]\n"]);
121                        List.app (fn s => err (concat ["  raised at ", s, "\n"]))                        List.app (fn s => err (concat ["  raised at ", s, "\n"]))
# Line 135  Line 123 
123                        OS.Process.failure)                        OS.Process.failure)
124                else (err "invalid command-line inputs\n"; OS.Process.failure)                else (err "invalid command-line inputs\n"; OS.Process.failure)
125            end            end
126              end
127              handle ERROR => OS.Process.failure              handle ERROR => OS.Process.failure
128    
     fun test file = (main ("", [file]); print "** Success!!\n")  
   
129    end    end

Legend:
Removed from v.1201  
changed lines
  Added in v.1202

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