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.sig
ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

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