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

SCM Repository

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

Diff of /branches/vis12/src/compiler/tree-il/low-to-tree-fn.sml

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

revision 2342, Sat Apr 6 12:36:33 2013 UTC revision 2343, Sat Apr 6 13:16:09 2013 UTC
# Line 271  Line 271 
271        | trInitialization (InP.Seq vs) = raise Fail "trInitialization: Seq"        | trInitialization (InP.Seq vs) = raise Fail "trInitialization: Seq"
272        | trInitialization _ = raise Fail "trInitialization: impossible"        | trInitialization _ = raise Fail "trInitialization: impossible"
273    
274    (* translate a LowIL assignment to a list of zero or more target statements *)    (* translate a LowIL assignment to a list of zero or more target statements in reverse
275       * order.
276       *)
277      fun doAssign (env, (lhs, rhs)) = let      fun doAssign (env, (lhs, rhs)) = let
278            fun doLHS () = (case peekGlobal(env, lhs)            fun doLHS () = (case peekGlobal(env, lhs)
279                   of SOME lhs' => (env, lhs')                   of SOME lhs' => (env, lhs')
# Line 288  Line 290 
290                  in                  in
291                    (env, [T.S_Assign([t], exp)])                    (env, [T.S_Assign([t], exp)])
292                  end                  end
293            (* force an argument to be stored in something that will be mapped to an l-value *)
294              fun bindVar (env, x) = (case useVar env x
295                     of x' as T.E_State _ => (env, x', [])
296                      | x' as T.E_Var _ => (env, x', [])
297                      | e => let
298                          val x' = newLocal x
299                          in
300                            (addLocal(env, x'), T.E_Var x', [T.S_Assign([x'], e)])
301                          end
302                    (* end case *))
303            in            in
304              case rhs              case rhs
305               of IL.STATE x => bindSimple (env, lhs, T.E_State(getStateVar x))               of IL.STATE x => bindSimple (env, lhs, T.E_State(getStateVar x))
306                | IL.VAR x => bindSimple (env, lhs, useVar env x)                | IL.VAR x => bindSimple (env, lhs, useVar env x)
307                | IL.LIT lit => bindSimple (env, lhs, T.E_Lit lit)                | IL.LIT lit => bindSimple (env, lhs, T.E_Lit lit)
308                  | IL.OP(Op.Prepend ty, [item, seq]) => let
309                      val (env, t) = doLHS()
310                      val (env, item', stms) = bindVar (env, item)
311                      val exp = T.E_Op(Op.Prepend ty, [item', useVar env seq])
312                      in
313                        (env, T.S_Assign([t], exp) :: stms)
314                      end
315                  | IL.OP(Op.Append ty, [seq, item]) => let
316                      val (env, t) = doLHS()
317                      val (env, item', stms) = bindVar (env, item)
318                      val exp = T.E_Op(Op.Append ty, [useVar env seq, item'])
319                      in
320                        (env, T.S_Assign([t], exp) :: stms)
321                      end
322                | IL.OP(Op.LoadSeq(ty, nrrd), []) => let                | IL.OP(Op.LoadSeq(ty, nrrd), []) => let
323                    val (env, t) = doLHS()                    val (env, t) = doLHS()
324                    in                    in

Legend:
Removed from v.2342  
changed lines
  Added in v.2343

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