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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/low-to-tree/low-to-tree.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/low-to-tree/low-to-tree.sml

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

revision 3948, Sat Jun 11 14:34:55 2016 UTC revision 3952, Sat Jun 11 17:20:27 2016 UTC
# Line 710  Line 710 
710    
711      fun trCFG info cfg = ScopeVars.assignScopes ([], trCFGWithEnv (Env.new info, cfg))      fun trCFG info cfg = ScopeVars.assignScopes ([], trCFGWithEnv (Env.new info, cfg))
712    
713        fun mkMethod body = let
714              fun chkBlock (T.Block{body, ...}, uG, nW) =
715                    chkStms (body, uG, nW)
716              and chkStms ([], uG, nW) = (uG, nW)
717                | chkStms (stm::stms, uG, nW) = let
718                    fun next (true, true) = (true, true)
719                      | next (uG, nW) = chkStms (stms, uG, nW)
720                    in
721                      case stm
722                       of T.S_Assign(_, _, e) => next (chkExp (e, uG, nW))
723                        | T.S_MAssign(_, e) => next (chkExp (e, uG, nW))
724                        | T.S_GAssign(_, e) => next (chkExp (e, true, nW))
725                        | T.S_IfThen(e, blk) => let
726                            val (uG, nW) = chkExp (e, uG, nW)
727                            in
728                              chkBlock (blk, uG, nW)
729                            end
730                        | T.S_IfThenElse(e, blk1, blk2) => let
731                            val (uG, nW) = chkExp (e, uG, nW)
732                            val (uG, nW) = chkBlock (blk1, uG, nW)
733                            in
734                              chkBlock (blk2, uG, nW)
735                            end
736                        | T.S_For(_, e1, e2, blk) => let
737                            val (uG, nW) = chkExp (e1, uG, nW)
738                            val (uG, nW) = chkExp (e2, uG, nW)
739                            in
740                              chkBlock (blk, uG, nW)
741                            end
742                        | T.S_Foreach(_, e, blk) => let
743                            val (uG, nW) = chkExp (e, uG, nW)
744                            in
745                              chkBlock (blk, uG, nW)
746                            end
747                        | T.S_LoadNrrd _ => raise Fail "unexpected LoadNrrd"
748                        | T.S_Input _ => raise Fail "unexpected Input"
749                        | T.S_InputNrrd _ => raise Fail "unexpected InputNrrd"
750                        | T.S_New(_, es) => next (chkExps (es, uG, true))
751                        | T.S_Save(_, e) => next (chkExp (e, uG, nW))
752                        | T.S_Print(_, es) => next (chkExps (es, uG, true))
753                        | _ => next (uG, nW)
754                      (* end case *)
755                    end
756              and chkExps ([], uG, nW) = (uG, nW)
757                | chkExps (_, true, true) = (true, true)
758                | chkExps (e::es, uG, nW) = let
759                    val (uG, nW) = chkExp (e, uG, nW)
760                    in
761                      chkExps (es, uG, nW)
762                    end
763              and chkExp (T.E_Global _, uG, nW) = (true, nW)
764                | chkExp (T.E_State(SOME e, _), uG, nW) =
765                    chkExp (e, uG, nW)
766                | chkExp (T.E_Op(TOp.SphereQuery _, es), uG, nW) = chkExps (es, uG, true)
767                | chkExp (T.E_Op(_, es), uG, nW) = chkExps (es, uG, nW)
768                | chkExp (T.E_Vec(_, _, es), uG, nW) = chkExps (es, uG, nW)
769                | chkExp (T.E_Cons(es, _), uG, nW) = chkExps (es, uG, nW)
770                | chkExp (T.E_Seq(es, _), uG, nW) = chkExps (es, uG, nW)
771                | chkExp (T.E_Pack(_, es), uG, nW) = chkExps (es, uG, nW)
772                | chkExp (T.E_VLoad(_, e, _), uG, nW) = chkExp (e, uG, nW)
773                | chkExp (_, uG, nW) = (uG, nW)
774              val (usesGlobals, needsWorld) = chkBlock (body, false, false)
775              in
776                T.Method{usesGlobals = usesGlobals, needsWorld = needsWorld, body = body}
777              end
778    
779      fun trStrand info strand = let      fun trStrand info strand = let
780            val trCFG = trCFG info            val trMethod = mkMethod o trCFG info
781            val IR.Strand{name, params, state, stateInit, initM, updateM, stabilizeM} = strand            val IR.Strand{name, params, state, stateInit, initM, updateM, stabilizeM} = strand
782            val params' = List.map U.newParamVar params            val params' = List.map U.newParamVar params
783            val state' = List.map getStateVar state            val state' = List.map getStateVar state
# Line 721  Line 787 
787                    ListPair.appEq                    ListPair.appEq
788                      (fn (x, x') => Env.bindSimple (env, x, T.E_Var x'))                      (fn (x, x') => Env.bindSimple (env, x, T.E_Var x'))
789                        (params, params');                        (params, params');
790                    ScopeVars.assignScopes (params', trCFGWithEnv (env, stateInit))                    mkMethod (ScopeVars.assignScopes (params', trCFGWithEnv (env, stateInit)))
791                  end                  end
792            in            in
793              T.Strand{              T.Strand{
# Line 729  Line 795 
795                  params = params',                  params = params',
796                  state = state',                  state = state',
797                  stateInit = stateInit',                  stateInit = stateInit',
798                  initM = Option.map trCFG initM,                  initM = Option.map trMethod initM,
799                  updateM = trCFG updateM,                  updateM = trMethod updateM,
800                  stabilizeM = Option.map trCFG stabilizeM                  stabilizeM = Option.map trMethod stabilizeM
801                }                }
802            end            end
803    

Legend:
Removed from v.3948  
changed lines
  Added in v.3952

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