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

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/mid-to-low/lowSet.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/mid-to-low/lowSet.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3444 - (view) (download)

1 : cchiw 3190 (* Expands probe ein
2 :     *
3 : cchiw 3444 * COPYRIGHT (c) 2012 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 : cchiw 3190 * All rights reserved.
5 :     *)
6 :    
7 :     structure lowSet = struct
8 :    
9 :     local
10 :    
11 :     structure DstIL =LowIL
12 :     structure DstOp = LowOps
13 :     structure DstV = DstIL.Var
14 :    
15 :     in
16 :    
17 :     fun hash (_,DstIL.OP(op1,_))=DstOp.hash op1
18 : cchiw 3259 | hash(_,DstIL.LIT m)=Literal.hash m
19 : cchiw 3444 | hash (_,DstIL.CONS _ )=0w17
20 : cchiw 3190
21 :     fun cmp(e1,e2)=Word.compare(hash e1, hash e2)
22 :    
23 :     structure OprKey =
24 :     struct
25 :     type ord_key =DstIL.var*LowIL.rhs
26 :     val compare = cmp
27 :     end;
28 :     structure LowSet= RedBlackSetFn(OprKey);
29 :    
30 :     fun allEq([], []) = true
31 :     | allEq(x::xs, y::ys) = DstIL.Var.same(x,y) andalso allEq (xs,ys)
32 :     | allEq _ = false
33 :    
34 :     fun setFind (tbl,DstIL.OP(op0,arg0))= (
35 :     LowSet.find(
36 :     (fn (_,DstIL.OP(op1,arg1))=>(DstOp.same(op0,op1) andalso allEq(arg0,arg1)) | _ => false)
37 :     )) tbl
38 : cchiw 3259 | setFind (tbl,DstIL.LIT n)= (
39 : cchiw 3190 LowSet.find(
40 :     (fn (_,DstIL.LIT m)=> Literal.same(n,m)
41 :     | _ => false))) tbl
42 : cchiw 3444 (* | setFind (tbl,DstIL.CONS(ty0,arg0))= (
43 :     LowSet.find(
44 :     (fn (_,DstIL.CONS(ty1,arg1))=>(LowILTypes.same(ty0,ty1) andalso allEq(arg0,arg1)) | _ => false)
45 :     )) tbl*)
46 : cchiw 3259 | setFind (tbl, e)= NONE
47 : cchiw 3190
48 :     fun rtnVar (tbl,(lhs,rhs))=(case setFind(tbl,rhs)
49 :     of NONE => (LowSet.add(tbl,(lhs,rhs)), NONE)
50 :     | SOME(v1,e1) =>(tbl,SOME v1)
51 :     (*end case*))
52 :    
53 :     fun filter(tbl,(lhs,rhs))=(case rhs
54 :     of DstIL.OP _ => rtnVar(tbl,(lhs,rhs))
55 :     | DstIL.LIT _ => rtnVar(tbl,(lhs,rhs))
56 :     | _ => (tbl, NONE)
57 :     (*end case*))
58 :    
59 :    
60 :     end; (* local *)
61 :    
62 :     end (* local *)

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