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 3887, Fri May 20 15:43:47 2016 UTC revision 3889, Sat May 21 14:32:02 2016 UTC
# Line 25  Line 25 
25      structure VSet = Var.Set      structure VSet = Var.Set
26    
27      datatype token      datatype token
28        = NL | S of string | A of Atom.atom | V of IR.var        = NL | S of string | I of int | A of Atom.atom | V of IR.var
29        | TY of Ty.t | TYS of Ty.t list        | TY of Ty.t | TYS of Ty.t list
30    
31      fun error errBuf toks = let      fun error errBuf toks = let
32            fun tok2str NL = "\n  ** "            fun tok2str NL = "\n  ** "
33              | tok2str (S s) = s              | tok2str (S s) = s
34                | tok2str (I i) = Int.toString i
35              | tok2str (A s) = Atom.toString s              | tok2str (A s) = Atom.toString s
36              | tok2str (V x) = Var.toString x              | tok2str (V x) = Var.toString x
37              | tok2str (TY ty) = Ty.toString ty              | tok2str (TY ty) = Ty.toString ty
# Line 178  Line 179 
179                  fun vecTy (d, pw) = let                  fun vecTy (d, pw) = let
180                        fun invalid () = (                        fun invalid () = (
181                              errFn [                              errFn [
182                                  S "invalid width ", S(Int.toString d), S " for ", S(Op.toString rator)                                  S "invalid width ", I d, S " for ", S(Op.toString rator)
183                                ];                                ];
184                              Ty.VecTy(d, pw))                              Ty.VecTy(d, pw))
185                        in                        in
# Line 222  Line 223 
223                                          ];                                          ];
224                                      resTy                                      resTy
225                                    end                                    end
226                                | IR.E_Vec(_, es) => let                                | IR.E_Vec(w, pw, es) => let
227                                    fun chkArg (i, e) = (case chk e                                    fun chkArg (i, e) = (case chk e
228                                           of Ty.VecTy(1, 1) => () (* ok *)                                           of Ty.VecTy(1, 1) => () (* ok *)
229                                            | ty => errFn [                                            | ty => errFn [
230                                                  S "component ", S(Int.toString i),                                                  S "component ", I i,
231                                                  S " of vector does has type ", TY ty, S(cxt())                                                  S " of vector does has type ", TY ty, S(cxt())
232                                                ])                                                ])
233                                  (* check the result vector type *)                                    val ty = Ty.VecTy(w, pw)
                                   val ty = (case layout(List.length es)  
 (* FIXME: check layout width against E_Vec width *)  
                                          of {wid, padded, pieces=[w]} => Ty.VecTy(wid, w)  
                                           | {wid, ...} => (  
                                               errFn [  
                                                   S "invalid width ", S(Int.toString wid),  
                                                   S " for E_Vec", S(cxt())  
                                                 ];  
                                               Ty.VecTy(List.length es, wid))  
                                         (* end case *))  
234                                    in                                    in
235                                      List.appi chkArg es;                                      List.appi chkArg es;
236                                        if (length es <> w)
237                                          then errFn [
238                                              S "expected ", I w,
239                                              S " arguments to E_Vec, but found ", I(length es)
240                                            ]
241                                          else ();
242                                      ty                                      ty
243                                    end                                    end
244                                | IR.E_Cons([], ty) => (                                | IR.E_Cons([], ty) => (
# Line 253  Line 250 
250                                      if (length es <> nelems)                                      if (length es <> nelems)
251                                        then errFn [                                        then errFn [
252                                            S "cons has incorrect number of elements", S(cxt()),                                            S "cons has incorrect number of elements", S(cxt()),
253                                            NL, S "  expected: ", S(Int.toString nelems),                                            NL, S "  expected: ", I nelems,
254                                            NL, S "  found:    ", S(Int.toString(length es))                                            NL, S "  found:    ", I(length es)
255                                          ]                                          ]
256                                        else ();                                        else ();
257                                      chkElems ("cons", Ty.realTy, es);                                      chkElems ("cons", Ty.realTy, es);
# Line 274  Line 271 
271                                    if (length es <> n)                                    if (length es <> n)
272                                      then errFn [                                      then errFn [
273                                          S "sequence has incorrect number of elements", S(cxt()),                                          S "sequence has incorrect number of elements", S(cxt()),
274                                          NL, S "  expected: ", S(Int.toString n),                                          NL, S "  expected: ", I n,
275                                          NL, S "  found:    ", S(Int.toString(length es))                                          NL, S "  found:    ", I(length es)
276                                        ]                                        ]
277                                      else ();                                      else ();
278                                    chkElems ("sequence", ty, es);                                    chkElems ("sequence", ty, es);
# Line 287  Line 284 
284                                    fun chkOne (i, ty, ty') = if Ty.same(ty, ty')                                    fun chkOne (i, ty, ty') = if Ty.same(ty, ty')
285                                          then ()                                          then ()
286                                          else errFn[                                          else errFn[
287                                              S "mismatch in component ", S(Int.toString i),                                              S "mismatch in component ", I i,
288                                              S " of PACK", S(cxt()),                                              S " of PACK", S(cxt()),
289                                              NL, S "  expected: ", TY ty',                                              NL, S "  expected: ", TY ty',
290                                              NL, S "  found:    ", TY ty                                              NL, S "  found:    ", TY ty
# Line 451  Line 448 
448                                    if Ty.same(ty, ty')                                    if Ty.same(ty, ty')
449                                      then ()                                      then ()
450                                      else errFn[                                      else errFn[
451                                          S "type mismatch in argument ", S(Int.toString i),                                          S "type mismatch in argument ", I i,
452                                          S " of print",                                          S " of print",
453                                          NL, S "expected:  ", TY ty,                                          NL, S "expected:  ", TY ty,
454                                          NL, S "but found: ", TY ty'                                          NL, S "but found: ", TY ty'

Legend:
Removed from v.3887  
changed lines
  Added in v.3889

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