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 3624 - (view) (download)

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

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