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/branches/primop-branch-2/src/compiler/ElabData/modules/modules.sig
ViewVC logotype

Annotation of /sml/branches/primop-branch-2/src/compiler/ElabData/modules/modules.sig

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1957 - (view) (download) (as text)

1 : blume 902 (* modules.sig
2 :     *
3 :     * (C) 2001 Lucent Technologies, Bell Labs
4 :     *)
5 :     signature MODULES =
6 :     sig
7 :    
8 :     type sharespec = SymPath.path list
9 :    
10 :     datatype Signature
11 :     = SIG of sigrec
12 :     | ERRORsig
13 :    
14 :     and spec
15 :     = TYCspec of {entVar : EntPath.entVar,
16 :     spec : Types.tycon, repl: bool, scope : int}
17 :     | STRspec of {entVar : EntPath.entVar, sign : Signature,
18 :     def : (strDef * int) option, slot : int}
19 :     | FCTspec of {entVar : EntPath.entVar, sign : fctSig, slot : int}
20 :     | VALspec of {spec : Types.ty, slot : int}
21 :     | CONspec of {spec : Types.datacon, slot : int option}
22 :    
23 :     (*
24 :     * and specEnv
25 :     * = NILsenv
26 :     * | BINDsenv of spec Env.env * specEnv
27 :     * | INCLsenv of int * spec Env.env * specEnv
28 :     *)
29 :    
30 :     and fctSig
31 :     = FSIG of {kind : Symbol.symbol option,
32 :     paramsig : Signature,
33 :     paramvar : EntPath.entVar,
34 :     paramsym : Symbol.symbol option,
35 :     bodysig : Signature}
36 :     | ERRORfsig
37 :    
38 :     and extDef
39 :     = TYCdef of
40 :     {path : SymPath.path, (* the (inward) path to the spec being defined *)
41 :     tyc : Types.tycon, (* the definition, typically relativized *)
42 :     relative : bool} (* does tyc contain entity paths *)
43 :     | STRdef of SymPath.path * strDef
44 :    
45 :     and strDef
46 :     = CONSTstrDef of Structure (* constant *)
47 :     | VARstrDef of Signature * EntPath.entPath (* relative *)
48 :    
49 :    
50 :     (* ------------------------- structures and functors ---------------------- *)
51 :    
52 :     and Structure
53 :     = STR of strrec
54 :     | STRSIG of {sign: Signature, entPath : EntPath.entPath}
55 :     | ERRORstr
56 :    
57 :     and Functor
58 :     = FCT of fctrec
59 :     | ERRORfct
60 :    
61 :     (* ----------------------- entity-related definitions -------------------- *)
62 :    
63 :     and entity (* elements of a entityEnv *)
64 :     = TYCent of tycEntity
65 :     | STRent of strEntity
66 :     | FCTent of fctEntity
67 :     | ERRORent
68 :     (* no entities for val, con, exn, but this may change *)
69 :    
70 :     and fctClosure (* realization for functors *)
71 :     = CLOSURE of {param : EntPath.entVar, body : strExp, env : entityEnv}
72 :    
73 :     and stampExp
74 :     = (* CONST of Stamps.stamp (* an existing stamp *)
75 :     | *) GETSTAMP of strExp
76 :     | NEW (* generate a new stamp *)
77 :    
78 :     and tycExp (* expression evaluating to a TYCentity *)
79 :     = VARtyc of EntPath.entPath (* selection from current entityEnv *)
80 :     | CONSTtyc of Types.tycon (* actual tycon *)
81 :     | FORMtyc of Types.tycon (* formal tycon *)
82 :    
83 :     and strExp
84 :     = VARstr of EntPath.entPath
85 :     | CONSTstr of strEntity
86 :     | STRUCTURE of {stamp : stampExp, entDec : entityDec}
87 :     | APPLY of fctExp * strExp
88 :     | LETstr of entityDec * strExp
89 :     | ABSstr of Signature * strExp
90 :     | FORMstr of fctSig
91 :     | CONSTRAINstr of {boundvar : EntPath.entVar, raw : strExp, coercion: strExp}
92 :     (* similar to LETstr(M.STRdec(boundvar, raw), coercion),
93 :     * but with special treatment of rpath propagation to support
94 :     * accurate type names in functor results where the functor has
95 :     * a result signature constraint. *)
96 :    
97 :     and fctExp
98 :     = VARfct of EntPath.entPath
99 :     | CONSTfct of fctEntity
100 :     | LAMBDA of {param : EntPath.entVar, body : strExp}
101 :     | LAMBDA_TP of {param : EntPath.entVar, body : strExp, sign : fctSig}
102 :     | LETfct of entityDec * fctExp
103 :    
104 :     and entityExp
105 :     = TYCexp of tycExp
106 :     | STRexp of strExp
107 :     | FCTexp of fctExp
108 :     | DUMMYexp
109 :     | ERRORexp
110 :    
111 :     and entityDec
112 :     = TYCdec of EntPath.entVar * tycExp
113 :     | STRdec of EntPath.entVar * strExp * Symbol.symbol
114 :     | FCTdec of EntPath.entVar * fctExp
115 :     | SEQdec of entityDec list
116 :     | LOCALdec of entityDec * entityDec
117 :     | ERRORdec
118 :     | EMPTYdec
119 :    
120 :     and entityEnv
121 :     = MARKeenv of envrec
122 :     | BINDeenv of entity EntPath.EvDict.map * entityEnv
123 :     | NILeenv
124 :     | ERReenv
125 :    
126 :     and modtree =
127 :     TYCNODE of Types.gtrec
128 :     | SIGNODE of sigrec
129 :     | STRNODE of strrec
130 :     | FCTNODE of fctrec
131 :     | ENVNODE of envrec
132 :     | BRANCH of modtree list
133 :    
134 :     withtype stubinfo =
135 :     {owner : PersStamps.persstamp,
136 :     lib : bool,
137 :     tree : modtree}
138 :    
139 :     and sigrec =
140 :     {stamp : Stamps.stamp,
141 :     name : Symbol.symbol option,
142 :     closed : bool,
143 :     fctflag : bool,
144 :     symbols : Symbol.symbol list,
145 :     elements : (Symbol.symbol * spec) list,
146 :     properties : PropList.holder, (* boundeps, lambdaty *)
147 :     typsharing : sharespec list,
148 :     strsharing : sharespec list,
149 :     stub : stubinfo option}
150 :    
151 :     and envrec =
152 :     {stamp : Stamps.stamp,
153 :     env : entityEnv,
154 :     stub : stubinfo option}
155 :    
156 :     and strEntity =
157 :     {stamp : Stamps.stamp,
158 :     entities : entityEnv,
159 :     properties: PropList.holder, (* lambdaty *)
160 :     rpath : InvPath.path,
161 :     stub : stubinfo option}
162 :    
163 :     and strrec =
164 :     {sign : Signature,
165 :     rlzn : strEntity,
166 :     access : Access.access,
167 : georgekuan 1957 prim : PrimOpId.strPrimElem}
168 : blume 902
169 :     and fctEntity =
170 :     {stamp : Stamps.stamp,
171 :     closure : fctClosure,
172 :     properties: PropList.holder, (* lambdaty *)
173 :     tycpath : Types.tycpath option,
174 :     rpath : InvPath.path,
175 :     stub : stubinfo option}
176 :    
177 :     and fctrec =
178 :     {sign : fctSig,
179 :     rlzn : fctEntity,
180 :     access : Access.access,
181 : georgekuan 1957 prim : PrimOpId.strPrimElem}
182 : blume 902
183 :     (* the stamp and arith inside Types.tycon are critical *)
184 :     and tycEntity = Types.tycon
185 :    
186 :     and elements = (Symbol.symbol * spec) list
187 :    
188 :     (*
189 :     and constraint
190 :     = {my_path : SymPath.path, its_ancestor : instrep, its_path : SymPath.path}
191 :     *)
192 :    
193 :     val bogusStrEntity : strEntity
194 :     val bogusFctEntity : fctEntity
195 :    
196 :     end (* signature MODULES *)

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