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

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/c-target/gen-output.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/c-target/gen-output.sml

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

revision 2707, Sat Sep 20 15:11:18 2014 UTC revision 2708, Sat Sep 20 18:46:49 2014 UTC
# Line 61  Line 61 
61            end            end
62    
63      val nrrdPtrTy = CL.T_Ptr(CL.T_Named "Nrrd")      val nrrdPtrTy = CL.T_Ptr(CL.T_Named "Nrrd")
     val filePtrTy = CL.T_Ptr(CL.T_Named "FILE")  
64      val sizeTy = CL.T_Named "size_t"      val sizeTy = CL.T_Named "size_t"
65      fun wrldPtr tgt = CL.T_Ptr(CL.T_Named(N.worldTy tgt))      fun wrldPtr tgt = CL.T_Ptr(CL.T_Named(N.worldTy tgt))
66      fun mkInt i = CL.mkInt(IntInf.fromInt i)      fun mkInt i = CL.mkInt(IntInf.fromInt i)
# Line 395  Line 394 
394              ([CL.PARAM([], nrrdPtrTy, "nData")], CL.mkBlock stms)              ([CL.PARAM([], nrrdPtrTy, "nData")], CL.mkBlock stms)
395            end            end
396    
   (* generate the nrrd-file output and print functions used by standalone executables *)  
     fun genOutput (tgt : Properties.props, outputs) = let  
           fun isDyn ty = (case ty of Ty.DynSeqTy _ => true | _ => false)  
 (* FIXME: use biffMsgAddF and return error status *)  
           fun error (fmt, msg) = CL.mkBlock[  
                   CL.mkCall("fprintf", [CL.mkVar "stderr", CL.mkStr fmt, msg]),  
                   CL.mkCall("exit", [CL.mkInt 1])  
                 ]  
           val outDecls = if List.exists (isDyn o #1) outputs  
                 then [CL.mkDecl(nrrdPtrTy, "nLengths", NONE), CL.mkDecl(nrrdPtrTy, "nData", NONE)]  
                 else [CL.mkDecl(nrrdPtrTy, "nData", NONE)]  
           val prDecls = outDecls @ [CL.mkDecl(filePtrTy, "outS", NONE)]  
           fun nrrdNew v = CL.mkAssign(v, CL.mkApply("nrrdNew", []))  
           fun nrrdNuke v = CL.mkCall("nrrdNuke", [v])  
           fun writeNrrd (ty, name) =  
                 if isDyn ty  
                   then [  
                       nrrdNew (nLengthsV),  
                       nrrdNew (nDataV),  
                       CL.mkIfThenElse(  
                         CL.mkApply(N.outputGet(tgt, name), [wrldV, nLengthsV, nDataV]),  
                       (* then *)  
                           error ("Error getting nrrd data:\n%s\n",  
                             CL.mkApply("biffMsgStrGet", [CL.mkIndirect(wrldV, "errors")])),  
                       (* else *)  
                         CL.mkIfThen(  
                           CL.mkBinOp(  
                             CL.mkApply("nrrdSave", [  
                                 CL.mkStr(OS.Path.joinBaseExt{base=name^"-len", ext=SOME "nrrd"}),  
                                 nLengthsV, CL.mkVar "NULL"  
                               ]),  
                             CL.#||,  
                             CL.mkApply("nrrdSave", [  
                                 CL.mkStr(OS.Path.joinBaseExt{base=name^"-data", ext=SOME "nrrd"}),  
                                 nDataV, CL.mkVar "NULL"  
                               ])),  
                         (* then *)  
                           error ("Error saving nrrd:\n%s\n", CL.mkApply("biffGetDone", [NRRD]))  
                         (* endif *))  
                       (* endif *)),  
                       nrrdNuke nLengthsV,  
                       nrrdNuke nDataV  
                     ]  
                   else [  
                       nrrdNew (nDataV),  
                       CL.mkIfThenElse(  
                         CL.mkApply(N.outputGet(tgt, name), [wrldV, nDataV]),  
                       (* then *)  
                           error ("Error getting nrrd data:\n%s\n",  
                             CL.mkApply("biffMsgStrGet", [CL.mkIndirect(wrldV, "errors")])),  
                       (* else *)  
                         CL.mkIfThen(  
                           CL.mkApply("nrrdSave", [  
                               CL.mkStr(OS.Path.joinBaseExt{base=name, ext=SOME "nrrd"}),  
                               nDataV, CL.mkVar "NULL"  
                             ]),  
                         (* then *)  
                           error ("Error saving nrrd:\n%s\n", CL.mkApply("biffGetDone", [NRRD]))  
                         (* endif *))  
                       (* endif *)),  
                       nrrdNuke nDataV  
                     ]  
           fun printNrrd (ty, name) = [] (* FIXME *)  
           in [  
             CL.D_Func(["static"], CL.voidTy, "WriteOutput", [CL.PARAM([], wrldPtr tgt, "wrld")],  
               CL.mkBlock(outDecls @ List.foldr (fn (output, l) => writeNrrd output @ l) [] outputs)),  
             CL.D_Func(["static"], CL.voidTy, "PrintOutput", [CL.PARAM([], wrldPtr tgt, "wrld")],  
               CL.mkBlock(prDecls @ List.foldr (fn (output, l) => printNrrd output @ l) [] outputs))  
           ] end  
   
397      fun gen (tgt : Properties.props, nAxes) = let      fun gen (tgt : Properties.props, nAxes) = let
398            fun getFn snapshot (ty, name) = let            fun getFn snapshot (ty, name) = let
399                  val funcName = if snapshot                  val funcName = if snapshot
# Line 482  Line 411 
411                  val getFns = List.map (getFn false) outputs                  val getFns = List.map (getFn false) outputs
412                  in                  in
413                    if (#exec tgt)                    if (#exec tgt)
414                      then getFns @ genOutput(tgt, outputs)                      then getFns @ OutputUtil.genOutput(tgt, outputs)
415                    else if (#snapshot tgt)                    else if (#snapshot tgt)
416                      then List.map (getFn true) outputs @ getFns                      then List.map (getFn true) outputs @ getFns
417                      else getFns                      else getFns

Legend:
Removed from v.2707  
changed lines
  Added in v.2708

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