\end{code}
\begin{code}
-type LocalVersionsMap = FiniteMap FAST_STRING Version
+type UsagesMap = FiniteMap Module (Version, VersionsMap)
+ -- module => its version, then to all its entities
+ -- and their versions; "instance" is a magic entity
+ -- representing all the instances def'd in that module
+type VersionsMap = FiniteMap FAST_STRING Version
+ -- Versions for things def'd in this module
type ExportsMap = FiniteMap FAST_STRING (RdrName, ExportFlag)
type FixitiesMap = FiniteMap FAST_STRING RdrNameFixityDecl
type LocalTyDefsMap = FiniteMap FAST_STRING RdrIfaceDecl -- for TyCon/Class
Module -- Module name
Version -- Module version number
(Maybe Version) -- Source version number
- LocalVersionsMap -- Local version numbers
+ UsagesMap -- Used when compiling this module
+ VersionsMap -- Version numbers of things from this module
ExportsMap -- Exported names
(Bag Module) -- Special instance modules
FixitiesMap -- fixities of local things
-----------------------------------------------------------------
data RdrIfaceDecl
- = TypeSig RdrName SrcLoc RdrNameTyDecl
- | NewTypeSig RdrName RdrName SrcLoc RdrNameTyDecl
- | DataSig RdrName [RdrName] SrcLoc RdrNameTyDecl
- | ClassSig RdrName [RdrName] SrcLoc RdrNameClassDecl
- | ValSig RdrName SrcLoc RdrNamePolyType
+ = TypeSig RdrName SrcLoc RdrNameTyDecl
+ | NewTypeSig RdrName RdrName SrcLoc RdrNameTyDecl
+ | DataSig RdrName [RdrName] [RdrName] SrcLoc RdrNameTyDecl
+ | ClassSig RdrName [RdrName] SrcLoc RdrNameClassDecl
+ | ValSig RdrName SrcLoc RdrNamePolyType
data RdrIfaceInst
= InstSig RdrName RdrName SrcLoc RdrNameInstDecl
-----------------------------------------------------------------
data IfaceToken
= ITinterface -- keywords
+ | ITusages
| ITversions
| ITexports
| ITinstance_modules
mk_data ctxt (qtycon, tyvars) names_and_constrs
= let
(qconnames, constrs) = unzip names_and_constrs
- tycon = de_qual qtycon
- connames = map de_qual qconnames
- qtyvars = map Unqual tyvars
+ qfieldnames = [] -- ToDo ...
+ tycon = de_qual qtycon
+ connames = map de_qual qconnames
+ fieldnames = map de_qual qfieldnames
+ qtyvars = map Unqual tyvars
- decl = DataSig qtycon qconnames mkIfaceSrcLoc (
+ decl = DataSig qtycon qconnames qfieldnames mkIfaceSrcLoc (
TyData ctxt qtycon qtyvars constrs Nothing noDataPragmas mkIfaceSrcLoc)
in
- (unitFM tycon decl, listToFM [(c,decl) | c <- connames])
+ (unitFM tycon decl, listToFM [(c,decl) | c <- connames]
+ `plusFM`
+ listToFM [(f,decl) | f <- fieldnames])
mk_new :: RdrNameContext
-> (RdrName, [FAST_STRING])
keywordsFM = listToFM [
("interface", ITinterface)
+ ,("__usages__", ITusages)
,("__versions__", ITversions)
,("__exports__", ITexports)
,("__instance_modules__",ITinstance_modules)