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

SCM Repository

[diderot] Diff of /branches/charisee/src/compiler/tree-il/getTypes.sml
ViewVC logotype

Diff of /branches/charisee/src/compiler/tree-il/getTypes.sml

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

revision 2664, Sun Jun 1 16:18:37 2014 UTC revision 2665, Tue Jun 3 02:37:46 2014 UTC
# Line 10  Line 10 
10      structure OprSet=ILF.OprSet      structure OprSet=ILF.OprSet
11    
12    
13      fun vecTy n= SOME(Ty.TensorTy[n])      fun vecTy n= Ty.TensorTy[n]
14      val testing=0      val testing=0
15    
16    
17    (* GetTypes TreeIL operator. *)    (* GetTypes TreeIL operator. *)
18      val default=(NONE,[])      val default=([],[])
19    
20        (*rator-> (types, cfns )*)
21      fun TypeofOp rator = (case rator      fun TypeofOp rator = (case rator
22          of  Op.IndexTensor(a,RTy,b,c)=>(SOME RTy,[])          of  Op.IndexTensor(a,RTy,b,c)=>([RTy],[])
23          (* Op.IndexTensor(a,RTy,b,c)=> (SOME RTy, [ILF.OP(Op.IndexTensor(a,RTy,b,c)))]*)          (* Op.IndexTensor(a,RTy,b,c)=> ([RTy], [ILF.OP(Op.IndexTensor(a,RTy,b,c)))]*)
24          | Op.addVec d               => (vecTy d,[ILF.OP(Op.addVec d)])          | Op.addVec d               => ([vecTy d],[ILF.OP(Op.addVec d)])
25          | Op.subVec d               => (vecTy d,[ILF.OP(Op.subVec d)])          | Op.subVec d               => ([vecTy d],[ILF.OP(Op.subVec d)])
26          | Op.prodVec d              => (vecTy d,[ILF.OP(Op.prodVec d)])          | Op.prodVec d              => ([vecTy d],[ILF.OP(Op.prodVec d)])
27          | Op.prodScaV d             => (vecTy d,[ILF.CONS(Ty.TensorTy[d]),ILF.OP(Op.prodScaV d)])          | Op.prodScaV d             => ([vecTy d],[ILF.CONS(Ty.TensorTy[d]),ILF.OP(Op.prodScaV d)])
28          | Op.sumVec d               => (NONE,   [ILF.OP(Op.sumVec d)])          | Op.sumVec d               => ([Ty.unionTy d],   [ILF.OP(Op.sumVec d)])
29          | _ => default          | _ => default
30          (* end case *))          (* end case *))
31    
# Line 42  Line 43 
43      (*Get types of Exp*)      (*Get types of Exp*)
44      fun typeOfExp(t,exp)=let      fun typeOfExp(t,exp)=let
45          val (ty1,opr1)=t          val (ty1,opr1)=t
46          fun add((NONE,cfn),rest)=let          fun add(([],[]),rest)= List.foldr (fn(e1,e2) => typeOfExp(e2,e1)) t rest
47              val opr2=List.foldr (fn(e1,e2) =>OprSet.add(e2,e1)) opr1 cfn          | add((typ,cfn),rest)= let
             val t2=(ty1,opr2)  
             in  
                 List.foldr (fn(e1,e2) => typeOfExp(e2,e1)) t2 rest  
             end  
48    
         | add((SOME typ,cfn),rest)= let  
             val ty2=TySet.add(ty1,typ)  
49              val opr2=List.foldr (fn(e1,e2) =>OprSet.add(e2,e1)) opr1 cfn              val opr2=List.foldr (fn(e1,e2) =>OprSet.add(e2,e1)) opr1 cfn
50                val ty2=List.foldr (fn(e1,e2) =>TySet.add(e2,e1)) ty1 typ
51              val t2=(ty2,opr2)              val t2=(ty2,opr2)
52    
53              in              in
# Line 62  Line 58 
58              | IL.E_Var(var)             => t              | IL.E_Var(var)             => t
59              | IL.E_Lit _                => t              | IL.E_Lit _                => t
60              | IL.E_Apply (_, exps)      => add(default,exps)              | IL.E_Apply (_, exps)      => add(default,exps)
61              | IL.E_Cons (ty , exps)     => add((SOME ty,mkFnC exp),exps)              | IL.E_Cons (ty , exps)     => add(([ty],mkFnC exp),exps)
62              | IL.E_LoadVec(ty,_,exps,_) => add((vecTy ty,mkFnC exp),[exps])              | IL.E_LoadVec(ty,_,exps,_) => add(([vecTy ty],mkFnC exp),[exps])
63              | IL.E_mkVec(_,ty,_,exps)   => add((vecTy ty,mkFnC exp), exps)              | IL.E_mkVec(_,ty,_,exps)   => add(([vecTy ty,Ty.unionTy ty],mkFnC exp), exps)
64    
65              | IL.E_Op(Op, exps)         => add(TypeofOp Op, exps)              | IL.E_Op(Op, exps)         => add(TypeofOp Op, exps)
66              (*end case*))              (*end case*))

Legend:
Removed from v.2664  
changed lines
  Added in v.2665

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