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

SCM Repository

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

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

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

revision 3936, Mon Jun 6 10:34:23 2016 UTC revision 3937, Mon Jun 6 13:16:10 2016 UTC
# Line 25  Line 25 
25     *)     *)
26      val typeOfCons : ty * ty list -> bool      val typeOfCons : ty * ty list -> bool
27    
28      (* return true if the type is of the specified form *)
29        val isBoolTy : ty -> bool
30        val isStrandTy : ty -> bool
31    
32    end    end
33    
34  functor CheckIRFn (  functor CheckIRFn (
# Line 147  Line 151 
151                 of IR.GLOBAL x => checkTys(V.ty y, IR.GlobalVar.ty x)                 of IR.GLOBAL x => checkTys(V.ty y, IR.GlobalVar.ty x)
152                  | IR.STATE(NONE, sv) => checkTys(V.ty y, IR.StateVar.ty sv)                  | IR.STATE(NONE, sv) => checkTys(V.ty y, IR.StateVar.ty sv)
153                  | IR.STATE(SOME x, sv) => (                  | IR.STATE(SOME x, sv) => (
154  (* FIXME: need to check that x has strand type *)                      if not(OpTy.isStrandTy(V.ty x))
155                          then errFn [
156                              S "expected strand type for ", V x, S ", but found ", TY(V.ty x)
157                            ]
158                          else ();
159                      checkVar x; checkTys(V.ty y, IR.StateVar.ty sv))                      checkVar x; checkTys(V.ty y, IR.StateVar.ty sv))
160                  | IR.VAR x => (                  | IR.VAR x => (
161                      checkVar x;                      checkVar x;
# Line 306  Line 314 
314                              List.app                              List.app
315                                (checkPhi (nd, VSet.union(Avail.inValue nd, bvs), !mask))                                (checkPhi (nd, VSet.union(Avail.inValue nd, bvs), !mask))
316                                  (!phis)                                  (!phis)
317                          | IR.COND{cond, ...} =>                          | IR.COND{cond, ...} => (
318                                if not(OpTy.isBoolTy(V.ty(!cond)))
319                                  then errFn [
320                                      S "expected bool type for ", V(!cond), S ", but found ",
321                                      TY(V.ty(!cond))
322                                    ]
323                                  else ();
324                              if VSet.member(Avail.inValue nd, !cond)                              if VSet.member(Avail.inValue nd, !cond)
325                              orelse VSet.member(bvs, !cond)                              orelse VSet.member(bvs, !cond)
326                                then ()                                then ()
327                                else errFn [S "unbound variable ", V(!cond), S " in conditional"]                                else errFn [S "unbound variable ", V(!cond), S " in conditional"])
328                          | IR.FOREACH{phis, mask, var, src, bodyExit, ...} => (                          | IR.FOREACH{phis, mask, var, src, bodyExit, ...} => (
329                              if VSet.member(Avail.inValue nd, !src)                              if VSet.member(Avail.inValue nd, !src)
330                              orelse VSet.member(bvs, !src)                              orelse VSet.member(bvs, !src)

Legend:
Removed from v.3936  
changed lines
  Added in v.3937

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