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 93 - (view) (download) (as text)
Original Path: sml/branches/SMLNJ/src/compiler/Semant/modules/modules.sig

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 :     = TYCspec of {entVar : EntPath.entVar, spec : Types.tycon, scope : int}
24 :     | 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 :     = TYCdef of SymPath.path * Types.tycon * bool (* relative *)
47 :     | STRdef of SymPath.path * strDef
48 :    
49 :     and strDef
50 :     = CONSTstrDef of Structure (* constant *)
51 :     | VARstrDef of Signature * EntPath.entPath (* relative *)
52 :    
53 :    
54 :     (* ------------------------- structures and functors ---------------------- *)
55 :    
56 :     and Structure
57 :     = STR of {sign : Signature, rlzn : strEntity, access : Access.access,
58 :     info : InlInfo.inl_info}
59 :     | STRSIG of {sign: Signature, entPath : EntPath.entPath}
60 :     | ERRORstr
61 :    
62 :     and Functor
63 :     = FCT of {sign : fctSig, rlzn : fctEntity, access: Access.access,
64 :     info : InlInfo.inl_info}
65 :     | ERRORfct
66 :    
67 :     (* ----------------------- entity-related definitions -------------------- *)
68 :    
69 :     and entity (* elements of a entityEnv *)
70 :     = TYCent of tycEntity
71 :     | STRent of strEntity
72 :     | FCTent of fctEntity
73 :     | ERRORent
74 :     (* no entities for val, con, exn, but this may change *)
75 :    
76 :     and fctClosure (* realization for functors *)
77 :     = CLOSURE of {param : EntPath.entVar, body : strExp, env : entityEnv}
78 :    
79 :     and stampExp
80 :     = CONST of Stamps.stamp (* an existing stamp *)
81 :     | GETSTAMP of strExp
82 :     | NEW (* generate a new stamp *)
83 :    
84 :     and tycExp (* expression evaluating to a TYCentity *)
85 :     = VARtyc of EntPath.entPath (* selection from current entityEnv *)
86 :     | CONSTtyc of Types.tycon (* actual tycon *)
87 :     | FORMtyc of Types.tycon (* formal tycon *)
88 :    
89 :     and strExp
90 :     = VARstr of EntPath.entPath
91 :     | CONSTstr of strEntity
92 :     | STRUCTURE of {stamp : stampExp, entDec : entityDec}
93 :     | APPLY of fctExp * strExp
94 :     | LETstr of entityDec * strExp
95 :     | ABSstr of Signature * strExp
96 :     | FORMstr of fctSig
97 :     | CONSTRAINstr of {boundvar : EntPath.entVar, raw : strExp, coercion: strExp}
98 :     (* similar to LETstr(M.STRdec(boundvar, raw), coercion),
99 :     * but with special treatment of rpath propagation to support
100 :     * accurate type names in functor results where the functor has
101 :     * a result signature constraint. *)
102 :    
103 :     and fctExp
104 :     = VARfct of EntPath.entPath
105 :     | CONSTfct of fctEntity
106 :     | LAMBDA of {param : EntPath.entVar, body : strExp}
107 :     | LAMBDA_TP of {param : EntPath.entVar, body : strExp, sign : fctSig}
108 :     | LETfct of entityDec * fctExp
109 :    
110 :     and entityExp
111 :     = TYCexp of tycExp
112 :     | STRexp of strExp
113 :     | FCTexp of fctExp
114 :     | DUMMYexp
115 :     | ERRORexp
116 :    
117 :     and entityDec
118 :     = TYCdec of EntPath.entVar * tycExp
119 :     | STRdec of EntPath.entVar * strExp * Symbol.symbol
120 :     | FCTdec of EntPath.entVar * fctExp
121 :     | SEQdec of entityDec list
122 :     | LOCALdec of entityDec * entityDec
123 :     | ERRORdec
124 :     | EMPTYdec
125 :    
126 :     and entityEnv
127 :     = MARKeenv of Stamps.stamp * entityEnv
128 :     | BINDeenv of entity EntPath.EvDict.dict * entityEnv
129 :     | NILeenv
130 :     | ERReenv
131 :    
132 :     withtype strEntity = {stamp : Stamps.stamp,
133 :     entities : entityEnv,
134 :     lambdaty : (PLambdaType.lty * DebIndex.depth) option ref,
135 :     rpath : InvPath.path}
136 :    
137 :     and fctEntity = {stamp : Stamps.stamp,
138 :     closure : fctClosure,
139 :     lambdaty : (PLambdaType.lty * DebIndex.depth) option ref,
140 :     tycpath : Types.tycpath option,
141 :     rpath : InvPath.path}
142 :    
143 :     (* the stamp and arith inside Types.tycon are critical *)
144 :     and tycEntity = Types.tycon
145 :    
146 :     and elements = (Symbol.symbol * spec) list
147 :    
148 :     (*
149 :     and constraint
150 :     = {my_path : SymPath.path, its_ancestor : instrep, its_path : SymPath.path}
151 :     *)
152 :    
153 :     val bogusStrEntity : strEntity
154 :     val bogusFctEntity : fctEntity
155 :    
156 :     end (* signature MODULES *)
157 :    
158 :    
159 :     (*
160 :     * $Log: modules.sig,v $
161 : monnier 93 * Revision 1.1.1.1 1998/04/08 18:39:28 george
162 :     * Version 110.5
163 : monnier 16 *
164 :     *)

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