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/modules.sml
ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 587 - (view) (download)

1 : monnier 249 (* Copyright 1996 by AT&T Bell Laboratories *)
2 :     (* modules.sml *)
3 :    
4 :     structure Modules : MODULES =
5 :     struct
6 :    
7 :     local structure S = Symbol
8 :     structure SP = SymPath
9 :     structure IP = InvPath
10 :     structure DI = DebIndex
11 :     structure EP = EntPath
12 :     structure ST = Stamps
13 :     structure LT = PLambdaType
14 :     structure T = Types
15 :     structure A = Access
16 :     structure II = InlInfo
17 :     structure E = Env
18 :     structure V = VarCon
19 :     in
20 :    
21 :     (* -------------------- signature-related definitions -------------------- *)
22 :    
23 :     type sharespec = SP.path list (* only internal sharing *)
24 :    
25 :     datatype Signature
26 : blume 587 = SIG of sigrec
27 : monnier 249 | ERRORsig
28 :    
29 :     (*
30 :     * 1. tycspec should only be GENtyc, with FORMAL or DATATYPE tyckinds, or DEFtyc.
31 :     * 2. the stamp and the path for the GENtyc or DEFtyc should be meaningless
32 :     * (but the stamps are in fact used for relativization of withtype bodies and
33 :     * the datacon domains of datatype repl specs)
34 :     * 3. if VALspec and CONspec are using typspec instead of T.ty, then
35 :     * the whole thing can be further cleaned up.
36 :     *)
37 :     and spec
38 :     = TYCspec of {entVar : EP.entVar, spec : T.tycon, repl: bool, scope: int}
39 :     | STRspec of {entVar : EP.entVar, sign : Signature,
40 :     def : (strDef * int) option, slot : int}
41 :     | FCTspec of {entVar : EP.entVar, sign : fctSig, slot : int}
42 :     | VALspec of {spec : T.ty, slot : int}
43 :     | CONspec of {spec : V.datacon, slot : int option}
44 :    
45 :     (*
46 :     * and specEnv
47 :     * = NILsenv
48 :     * | BINDsenv of spec E.env * specEnv
49 :     * | INCLsenv of int * spec E.env * specEnv
50 :     *)
51 :    
52 :     and fctSig
53 :     = FSIG of {kind : S.symbol option,
54 : blume 587 paramsig : Signature,
55 :     paramvar : EP.entVar,
56 :     paramsym : S.symbol option,
57 :     bodysig : Signature}
58 : monnier 249 | ERRORfsig
59 :    
60 :     and extDef
61 :     = TYCdef of
62 :     {path : SymPath.path,
63 : blume 587 tyc : T.tycon,
64 : monnier 249 relative : bool} (* does tyc contain entity paths *)
65 :     | STRdef of SP.path * strDef
66 :    
67 :     and strDef
68 :     = CONSTstrDef of Structure (* constant *)
69 :     | VARstrDef of Signature * EP.entPath (* relative *)
70 :    
71 :     (* ------------------------- structures and functors ---------------------- *)
72 :    
73 :     and Structure
74 : blume 587 = STR of strrec
75 : monnier 249 | STRSIG of {sign: Signature, entPath : EP.entPath}
76 :     | ERRORstr
77 :    
78 :     and Functor
79 : blume 587 = FCT of fctrec
80 : monnier 249 | ERRORfct
81 :    
82 :     (* ----------------------- entity-related definitions -------------------- *)
83 :    
84 :     and entity (* elements of a entityEnv *)
85 :     = TYCent of tycEntity
86 :     | STRent of strEntity
87 :     | FCTent of fctEntity
88 :     | ERRORent
89 :     (* no entities for val, con, exn, but this may change *)
90 :    
91 :     and fctClosure (* realization for functors *)
92 :     = CLOSURE of {param : EP.entVar, body : strExp, env : entityEnv}
93 :    
94 :     and stampExp
95 : blume 587 = (* CONST of ST.stamp (* an existing stamp *)
96 :     | *) GETSTAMP of strExp
97 : monnier 249 | NEW (* generate a new stamp *)
98 :    
99 :     and tycExp (* expression evaluating to a TYCentity *)
100 :     = VARtyc of EP.entPath (* selection from cur-EE *)
101 : blume 587 | CONSTtyc of T.tycon (* actual tycon *)
102 :     | FORMtyc of T.tycon (* formal tycon *)
103 : monnier 249
104 :     and strExp
105 :     = VARstr of EP.entPath (* selection from current entityEnv *)
106 :     | CONSTstr of strEntity
107 :     | STRUCTURE of {stamp : stampExp, entDec : entityDec}
108 :     | APPLY of fctExp * strExp
109 :     (* the arg strExp contains coercions to match the fct param sig *)
110 :     | LETstr of entityDec * strExp
111 :     | ABSstr of Signature * strExp (* shortcut for abstraction matching *)
112 :     | FORMstr of fctSig (* formal functor body structure *)
113 :     | CONSTRAINstr of {boundvar : EP.entVar, raw : strExp, coercion: strExp}
114 :     (* similar to LETstr(M.STRdec(boundvar, strExp), coercion),
115 :     * but with special treatment of rpath propagation to support
116 :     * accurate type names in functor results where the functor has
117 :     * a result signature constraint. *)
118 :    
119 :     and fctExp
120 :     = VARfct of EP.entPath (* selection from current entityEnv *)
121 :     | CONSTfct of fctEntity
122 :     | LAMBDA of {param : EP.entVar, body : strExp}
123 :     | LAMBDA_TP of {param : EP.entVar, body : strExp, sign : fctSig}
124 :     | LETfct of entityDec * fctExp
125 :    
126 :     and entityExp
127 :     = TYCexp of tycExp
128 :     | STRexp of strExp
129 :     | FCTexp of fctExp
130 :     | DUMMYexp
131 :     | ERRORexp
132 :    
133 :     and entityDec
134 :     = TYCdec of EP.entVar * tycExp
135 :     | STRdec of EP.entVar * strExp * S.symbol
136 :     | FCTdec of EP.entVar * fctExp
137 :     | SEQdec of entityDec list
138 :     | LOCALdec of entityDec * entityDec
139 :     | ERRORdec
140 :     | EMPTYdec
141 :    
142 :     and entityEnv
143 : blume 587 = MARKeenv of envrec
144 : monnier 411 | BINDeenv of entity EP.EvDict.map * entityEnv
145 : monnier 249 | NILeenv
146 :     | ERReenv
147 :    
148 : blume 587 and modtree =
149 :     TYCNODE of Types.gtrec
150 :     | SIGNODE of sigrec
151 :     | STRNODE of strrec
152 :     | FCTNODE of fctrec
153 :     | ENVNODE of envrec
154 :     | BRANCH of modtree list
155 : monnier 249
156 : blume 587 withtype stubinfo =
157 :     {owner : PersStamps.persstamp,
158 :     lib : bool,
159 :     tree : modtree}
160 : monnier 249
161 : blume 587 and sigrec =
162 :     {stamp : ST.stamp,
163 :     name : S.symbol option,
164 :     closed : bool,
165 :     fctflag : bool,
166 :     symbols : S.symbol list,
167 :     elements : (S.symbol * spec) list,
168 :     boundeps : (EP.entPath * LT.tkind) list option ref,
169 :     lambdaty : (LT.lty * DI.depth) option ref,
170 :     typsharing : sharespec list,
171 :     strsharing : sharespec list,
172 :     stub : stubinfo option}
173 :    
174 :     and envrec =
175 :     {stamp : ST.stamp,
176 :     env : entityEnv,
177 :     stub : stubinfo option}
178 :    
179 :     and strEntity =
180 :     {stamp : ST.stamp,
181 :     entities : entityEnv,
182 :     lambdaty : (LT.lty * DI.depth) option ref,
183 :     rpath : IP.path,
184 :     stub : stubinfo option}
185 :    
186 :     and strrec =
187 :     {sign : Signature,
188 :     rlzn : strEntity,
189 :     access : A.access,
190 :     info : II.inl_info}
191 :    
192 :     and fctEntity =
193 :     {stamp : ST.stamp,
194 :     closure : fctClosure,
195 :     lambdaty : (LT.lty * DI.depth) option ref,
196 :     tycpath : T.tycpath option,
197 :     rpath : IP.path,
198 :     stub : stubinfo option}
199 :    
200 :     and fctrec =
201 :     {sign : fctSig,
202 :     rlzn : fctEntity,
203 :     access : A.access,
204 :     info : II.inl_info}
205 :    
206 : monnier 249 (* the stamp and arith inside T.tycon are critical *)
207 :     and tycEntity = T.tycon
208 :    
209 :     and elements = (S.symbol * spec) list
210 :    
211 :     (*
212 :     and constraint
213 :     = {my_path : SP.path, its_ancestor : instrep, its_path : SP.path}
214 :     *)
215 :    
216 :     val bogusStrStamp = ST.special "bogusStr"
217 :     val bogusFctStamp = ST.special "bogusFct"
218 :     val bogusSigStamp = ST.special "bogusSig"
219 :     val bogusRpath = IP.IPATH[S.strSymbol "Bogus"]
220 :    
221 :     val bogusStrEntity : strEntity =
222 : blume 587 { stamp = bogusStrStamp,
223 :     entities = ERReenv, lambdaty = ref NONE, rpath = bogusRpath,
224 :     stub = NONE}
225 : monnier 249
226 :     val bogusSig : Signature =
227 : blume 587 SIG {stamp = bogusSigStamp,
228 :     name=NONE, closed=true, fctflag=false,
229 :     symbols=[],
230 :     elements=[], boundeps=ref NONE, lambdaty=ref NONE,
231 :     typsharing=[], strsharing=[],
232 :     stub = NONE}
233 : monnier 249
234 :     val bogusFctEntity : fctEntity =
235 : blume 587 {stamp = bogusFctStamp,
236 :     closure = CLOSURE{param=EP.bogusEntVar,
237 :     body= CONSTstr bogusStrEntity,
238 :     env=NILeenv},
239 :     tycpath=NONE, lambdaty = ref NONE, rpath = bogusRpath,
240 :     stub = NONE}
241 : monnier 249
242 :     end (* local *)
243 :     end (* structure Modules *)

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