Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/compiler/Semant/modules/entpath.sml
ViewVC logotype

Annotation of /sml/trunk/src/compiler/Semant/modules/entpath.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 114 - (view) (download)

1 : monnier 16 (* Copyright 1996 by AT&T Bell Laboratories *)
2 :     (* entpath.sml *)
3 :    
4 :     signature ENT_PATH =
5 :     sig
6 :    
7 :     type entVar
8 :     type entPath = entVar list
9 :    
10 :     val eqEntVar : entVar * entVar -> bool
11 :     val eqEntPath : entPath * entPath -> bool
12 :    
13 :     val cmpEntVar : entVar * entVar -> order
14 :     val cmpEntPath : entPath * entPath -> order
15 :    
16 :     val nullEntPath : entPath -> bool
17 :     val entVarToString : entVar -> string
18 :     val entPathToString : entPath -> string
19 :    
20 :     val bogusEntVar : entVar
21 :    
22 :     structure EvDict : BINARY_DICT
23 :    
24 :     end (* signature ENT_PATH *)
25 :    
26 :    
27 :     structure EntPath : ENT_PATH =
28 :     struct
29 :    
30 :     local
31 :     structure ST = Stamps
32 :     in
33 :    
34 :     type entVar = ST.stamp
35 :    
36 :     type entPath = entVar list
37 :     (* entPath has entVars in direct order, outer first *)
38 :    
39 :    
40 :     val eqEntVar = ST.eq
41 :    
42 :     fun eqEntPath (ep1,ep2) =
43 :     let fun all(v::l,u::m) = eqEntVar(v,u) andalso all(l,m)
44 :     | all(nil,nil) = true
45 :     | all _ = false
46 :     in all(ep1,ep2)
47 :     end
48 :    
49 :     val cmpEntVar = ST.cmp
50 :    
51 :     fun cmpEntPath (ep1, ep2) =
52 :     let fun f(a::ar, b::br) =
53 :     (case ST.cmp(a,b) of EQUAL => f(ar,br) | z => z)
54 :     | f(a::ar, nil) = GREATER
55 :     | f(nil, b::br) = LESS
56 :     | f(nil,nil) = EQUAL
57 :     in f(ep1,ep2)
58 :     end
59 :    
60 :     structure EvDict = BinaryDict(struct type ord_key = entVar
61 :     val cmpKey = cmpEntVar
62 :     end)
63 :    
64 :     (* ListPair.all didn't cut it because it doesn't require lists of equal length
65 :     length ep1 = length ep2 andalso
66 :     ListPair.all eqEntVar (ep1, ep2)
67 :     *)
68 :    
69 :     fun nullEntPath(ep: entPath) = List.null ep
70 :    
71 :     fun entVarToString (v: entVar) = ST.stampToShortString v
72 :    
73 :     fun entPathToString ([]: entPath) = "[]"
74 :     | entPathToString (x::xs) =
75 :     let val rest = foldr (fn (y,l) => ","::(ST.stampToShortString y)::l) ["]"] xs
76 :     in String.concat("[" :: (ST.stampToShortString x) :: rest)
77 :     end
78 :    
79 :     val bogusEntVar = ST.special "bogusEntVar"
80 :    
81 :     end (* local *)
82 :     end (* structure EntPath *)
83 :    
84 :     (*
85 : monnier 113 * $Log$
86 : monnier 16 *)

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