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

SCM Repository

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

Diff of /branches/vis15/src/compiler/simplify/inliner.sml

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

revision 3500, Wed Dec 16 15:01:40 2015 UTC revision 3501, Thu Dec 17 20:07:13 2015 UTC
# Line 28  Line 28 
28                        then x                        then x
29                        else raise Fail("unknown variable " ^ V.uniqueNameOf x)                        else raise Fail("unknown variable " ^ V.uniqueNameOf x)
30                  (* end case *))                  (* end case *))
31            fun doBlock (env, isTop, S.Block stms) = let            fun doBlock (env, isTop, S.Block{props, code}) = let
32                  fun f (stm, (env, stms)) = let                  fun f (stm, (env, stms)) = let
33                          val (env, stm) = doStmt (env, isTop, stm)                          val (env, stm) = doStmt (env, isTop, stm)
34                          in                          in
35                            (env, stm::stms)                            (env, stm::stms)
36                          end                          end
37                  val (_, stms) = List.foldl f (env, []) stms                  val (_, stms) = List.foldl f (env, []) code
38                  in                  in
39                    S.Block(List.rev stms)                    S.Block{props = props, code = List.rev stms}
40                  end                  end
41            and doStmt (env, isTop, stm) = (case stm            and doStmt (env, isTop, stm) = (case stm
42                   of S.S_Var(x, optE) => let                   of S.S_Var(x, optE) => let
# Line 80  Line 80 
80            val env = ListPair.foldlEq            val env = ListPair.foldlEq
81                  (fn (x, x', env) => V.Map.insert(env, x, x'))                  (fn (x, x', env) => V.Map.insert(env, x, x'))
82                    V.Map.empty (params, args)                    V.Map.empty (params, args)
83            val blk as S.Block stms = doBlock (env, true, body)            val blk as S.Block{props, code} = doBlock (env, true, body)
84            in            in
85              if !needsLHSPreDecl              if !needsLHSPreDecl
86                then S.Block(S.S_Var(lhs, NONE) :: stms)                then S.Block{props = props, code = S.S_Var(lhs, NONE) :: code}
87                else blk                else blk
88            end            end
89    
90    (* inline expand user-function calls in a block *)    (* inline expand user-function calls in a block *)
91      fun expandBlock funcTbl = let      fun expandBlock funcTbl = let
92            val findFunc = V.Tbl.find funcTbl            val findFunc = V.Tbl.find funcTbl
93            fun expandBlk (S.Block stms) =            fun expandBlk (S.Block{props, code}) =
94                  S.Block(List.foldr expandStm [] stms)                  S.Block{props = props, code = List.foldr expandStm [] stms}
95            and expandStm (stm, stms') = (case stm            and expandStm (stm, stms') = (case stm
96                   of S.S_Assign(x, S.E_Apply(f, xs, _)) => (case findFunc f                   of S.S_Assign(x, S.E_Apply(f, xs, _)) => (case findFunc f
97                         of NONE => stm :: stms'                         of NONE => stm :: stms'
98                          | SOME func => let                          | SOME func => let
99                              val S.Block stms = beta(x, func, xs)                              val S.Block{code, ...} = beta(x, func, xs)
100                              in                              in
101                                stms @ stms'                                code @ stms'
102                              end                              end
103                        (* end case *))                        (* end case *))
104                    | S.S_IfThenElse(x, b1, b2) =>                    | S.S_IfThenElse(x, b1, b2) =>

Legend:
Removed from v.3500  
changed lines
  Added in v.3501

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