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

SCM Repository

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

Diff of /branches/vis15/src/compiler/tree-ir/check-tree.sml

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

revision 3853, Fri May 13 18:14:10 2016 UTC revision 3857, Sat May 14 14:13:04 2016 UTC
# Line 258  Line 258 
258                        end                        end
259                  fun chkStm (stm, bvs) = (case stm                  fun chkStm (stm, bvs) = (case stm
260                         of IR.S_Comment _ => bvs                         of IR.S_Comment _ => bvs
261                          | IR.S_Unpack(xs, e) => let                          | IR.S_Assign(isDef, x, e) => let
                             fun chkVar (x, ty) = if Ty.same(Var.ty x, ty)  
                                   then ()  
                                   else errFn[  
                                       S "type mismatch in assignment to ", S(Var.name x),  
                                       NL, S "lhs: ", TY(Var.ty x),  
                                       NL, S "rhs: ", TY ty  
                                     ]  
                             in  
                               case (xs, chkExp (bvs, e))  
                                of (_, Ty.VecTy{pieces, ...}) => (  
                                     if (List.length xs <> List.length pieces)  
                                       then errFn [  
                                           S "arity mismatch in assigning composite vector",  
                                           NL, S"  lhs arity: ", S(Int.toString(List.length xs)),  
                                           NL, S"  rhs arity: ", S(Int.toString(List.length pieces))  
                                         ]  
                                       else ();  
                                     ListPair.app (fn (x, d) => chkVar(x, Ty.vecTy d)) (xs, pieces))  
                                 | ([x], ty) => chkVar (x, ty)  
                                 | (_::_, ty) => errFn [  
                                       S "assignment of non-composite value to (",  
                                       S(String.concatWithMap "," Var.name xs), S ")"  
                                     ]  
                                 | _ => errFn [S "empty lhs for Unpack"]  
                               (* end case *);  
                               bvs  
                             end  
                         | IR.S_Assign(x, e) => let  
262                              val ty = chkExp (bvs, e)                              val ty = chkExp (bvs, e)
263                              in                              in
264                                if Ty.same(Var.ty x, ty)                                if Ty.same(Var.ty x, ty)

Legend:
Removed from v.3853  
changed lines
  Added in v.3857

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