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

1 : monnier 16 (* 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 :     = SIG of {name : S.symbol option,
27 :     closed : bool,
28 :     fctflag : bool,
29 :     stamp : ST.stamp,
30 :     symbols : S.symbol list,
31 :     elements : (S.symbol * spec) list,
32 :     boundeps : (EP.entPath * LT.tkind) list option ref,
33 :     lambdaty : (LT.lty * DI.depth) option ref,
34 :     typsharing: sharespec list,
35 :     strsharing: sharespec list}
36 :     | ERRORsig
37 :    
38 :     (*
39 :     * 1. tycspec should only be GENtyc, with FORMAL or DATATYPE tyckinds, or DEFtyc.
40 :     * 2. the stamp and the path for the GENtyc or DEFtyc should be meaningless
41 :     * (but the stamps are in fact used for relativization of withtype bodies and
42 :     * the datacon domains of datatype repl specs)
43 :     * 3. if VALspec and CONspec are using typspec instead of T.ty, then
44 :     * the whole thing can be further cleaned up.
45 :     *)
46 :     and spec
47 :     = TYCspec of {entVar : EP.entVar, spec : T.tycon, scope: int}
48 :     | STRspec of {entVar : EP.entVar, sign : Signature,
49 :     def : (strDef * int) option, slot : int}
50 :     | FCTspec of {entVar : EP.entVar, sign : fctSig, slot : int}
51 :     | VALspec of {spec : T.ty, slot : int}
52 :     | CONspec of {spec : V.datacon, slot : int option}
53 :    
54 :     (*
55 :     * and specEnv
56 :     * = NILsenv
57 :     * | BINDsenv of spec E.env * specEnv
58 :     * | INCLsenv of int * spec E.env * specEnv
59 :     *)
60 :    
61 :     and fctSig
62 :     = FSIG of {kind : S.symbol option,
63 :     paramsig : Signature,
64 :     paramvar : EP.entVar,
65 :     paramsym : S.symbol option,
66 :     bodysig : Signature}
67 :     | ERRORfsig
68 :    
69 :     and extDef
70 :     = TYCdef of SP.path * T.tycon * bool (* relative *)
71 :     | STRdef of SP.path * strDef
72 :    
73 :     and strDef
74 :     = CONSTstrDef of Structure (* constant *)
75 :     | VARstrDef of Signature * EP.entPath (* relative *)
76 :    
77 :     (* ------------------------- structures and functors ---------------------- *)
78 :    
79 :     and Structure
80 :     = STR of {sign : Signature, rlzn : strEntity,
81 :     access: A.access, info : II.inl_info}
82 :     | STRSIG of {sign: Signature, entPath : EP.entPath}
83 :     | ERRORstr
84 :    
85 :     and Functor
86 :     = FCT of {sign : fctSig, rlzn : fctEntity,
87 :     access: A.access, info : II.inl_info}
88 :     | ERRORfct
89 :    
90 :     (* ----------------------- entity-related definitions -------------------- *)
91 :    
92 :     and entity (* elements of a entityEnv *)
93 :     = TYCent of tycEntity
94 :     | STRent of strEntity
95 :     | FCTent of fctEntity
96 :     | ERRORent
97 :     (* no entities for val, con, exn, but this may change *)
98 :    
99 :     and fctClosure (* realization for functors *)
100 :     = CLOSURE of {param : EP.entVar, body : strExp, env : entityEnv}
101 :    
102 :     and stampExp
103 :     = CONST of ST.stamp (* an existing stamp *)
104 :     | GETSTAMP of strExp
105 :     | NEW (* generate a new stamp *)
106 :    
107 :     and tycExp (* expression evaluating to a TYCentity *)
108 :     = VARtyc of EP.entPath (* selection from cur-EE *)
109 :     | CONSTtyc of Types.tycon (* actual tycon *)
110 :     | FORMtyc of Types.tycon (* formal tycon *)
111 :    
112 :     and strExp
113 :     = VARstr of EP.entPath (* selection from current entityEnv *)
114 :     | CONSTstr of strEntity
115 :     | STRUCTURE of {stamp : stampExp, entDec : entityDec}
116 :     | APPLY of fctExp * strExp
117 :     (* the arg strExp contains coercions to match the fct param sig *)
118 :     | LETstr of entityDec * strExp
119 :     | ABSstr of Signature * strExp (* shortcut for abstraction matching *)
120 :     | FORMstr of fctSig (* formal functor body structure *)
121 :     | CONSTRAINstr of {boundvar : EP.entVar, raw : strExp, coercion: strExp}
122 :     (* similar to LETstr(M.STRdec(boundvar, strExp), coercion),
123 :     * but with special treatment of rpath propagation to support
124 :     * accurate type names in functor results where the functor has
125 :     * a result signature constraint. *)
126 :    
127 :     and fctExp
128 :     = VARfct of EP.entPath (* selection from current entityEnv *)
129 :     | CONSTfct of fctEntity
130 :     | LAMBDA of {param : EP.entVar, body : strExp}
131 :     | LAMBDA_TP of {param : EP.entVar, body : strExp, sign : fctSig}
132 :     | LETfct of entityDec * fctExp
133 :    
134 :     and entityExp
135 :     = TYCexp of tycExp
136 :     | STRexp of strExp
137 :     | FCTexp of fctExp
138 :     | DUMMYexp
139 :     | ERRORexp
140 :    
141 :     and entityDec
142 :     = TYCdec of EP.entVar * tycExp
143 :     | STRdec of EP.entVar * strExp * S.symbol
144 :     | FCTdec of EP.entVar * fctExp
145 :     | SEQdec of entityDec list
146 :     | LOCALdec of entityDec * entityDec
147 :     | ERRORdec
148 :     | EMPTYdec
149 :    
150 :     and entityEnv
151 :     = MARKeenv of ST.stamp * entityEnv
152 :     | BINDeenv of entity EP.EvDict.dict * entityEnv
153 :     | NILeenv
154 :     | ERReenv
155 :    
156 :     withtype strEntity = {stamp : ST.stamp,
157 :     entities : entityEnv,
158 :     lambdaty : (LT.lty * DI.depth) option ref,
159 :     rpath : IP.path}
160 :    
161 :     and fctEntity = {stamp : ST.stamp,
162 :     closure : fctClosure,
163 :     lambdaty : (LT.lty * DI.depth) option ref,
164 :     tycpath : T.tycpath option,
165 :     rpath : IP.path}
166 :    
167 :     (* the stamp and arith inside T.tycon are critical *)
168 :     and tycEntity = T.tycon
169 :    
170 :     and elements = (S.symbol * spec) list
171 :    
172 :     (*
173 :     and constraint
174 :     = {my_path : SP.path, its_ancestor : instrep, its_path : SP.path}
175 :     *)
176 :    
177 :     val bogusStrStamp = ST.special "bogusStr"
178 :     val bogusFctStamp = ST.special "bogusFct"
179 :     val bogusSigStamp = ST.special "bogusSig"
180 :     val bogusRpath = IP.IPATH[S.strSymbol "Bogus"]
181 :    
182 :     val bogusStrEntity : strEntity =
183 :     {stamp = bogusStrStamp, entities = ERReenv,
184 :     lambdaty = ref NONE, rpath = bogusRpath}
185 :    
186 :     val bogusSig : Signature =
187 :     SIG {name=NONE, closed=true, fctflag=false,
188 :     stamp=bogusSigStamp, symbols=[],
189 :     elements=[], boundeps=ref NONE, lambdaty=ref NONE,
190 :     typsharing=[], strsharing=[]}
191 :    
192 :     val bogusFctEntity : fctEntity =
193 :     {stamp = bogusFctStamp,
194 :     closure = CLOSURE{param=EP.bogusEntVar,
195 :     body= CONSTstr bogusStrEntity,
196 :     env=NILeenv},
197 :     tycpath=NONE, lambdaty = ref NONE, rpath = bogusRpath}
198 :    
199 :     end (* local *)
200 :     end (* structure Modules *)
201 :    
202 :     (*
203 :     * $Log: modules.sml,v $
204 :     * Revision 1.9 1997/09/30 02:31:20 dbm
205 :     * New constructor ERReenv for entityEnv. Used for error recovery.
206 :     *
207 :     * Revision 1.8 1997/09/17 21:31:59 dbm
208 :     * New symbol parameter for STRdec (modules/tests/12.sml).
209 :     *
210 :     * Revision 1.7 1997/08/22 18:35:02 george
211 :     * Add the fctflag field to the signature datatype -- zsh
212 :     *
213 :     * Revision 1.6 1997/07/15 16:11:09 dbm
214 :     * Representation changes associated with the rewrite of instantiate.sml.
215 :     *
216 :     * Revision 1.5 1997/05/20 12:23:33 dbm
217 :     * SML '97 sharing, where structure.
218 :     *
219 :     * Revision 1.4 1997/04/02 04:09:07 dbm
220 :     * Added CONSTRAINstr constructor to type strExp. Fix for bug 12.
221 :     *
222 :     * Revision 1.3 1997/03/17 18:51:17 dbm
223 :     * Changes in datatype representation to support datatype replication.
224 :     *
225 :     * Revision 1.2 1997/01/21 13:25:31 george
226 :     * Modify the entityExp definition to correctly implement the
227 :     * datatype generativity in functor body. -- from zsh
228 :     *
229 :     *)

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