ClassDecl.hs revision 97018cf5fa25b494adffd7e9b4e87320dae6bf47
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederModule : $Header$
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens ElknerCopyright : (c) Christian Maeder and Uni Bremen 2003
f278337cf46af220b2faecf4b47363fbb2c01dbaChristian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu ProdescuMaintainer : maeder@tzi.de
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederStability : experimental
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederPortability : portable
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder analyse class decls
a209694d7694b93e56927c6aacc3f5b9366fdb8fChristian Maederimport qualified Common.Lib.Map as Map
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maederimport qualified Common.Lib.Set as Set
a209694d7694b93e56927c6aacc3f5b9366fdb8fChristian Maeder-- ---------------------------------------------------------------------------
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder-- analyse class decls
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder-- ---------------------------------------------------------------------------
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederanaClassDecls :: ClassDecl -> State Env ClassDecl
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederanaClassDecls (ClassDecl cls k ps) =
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder do ak <- anaKind k
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder mapM_ (addClassDecl ak) cls
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder return $ ClassDecl cls ak ps
f278337cf46af220b2faecf4b47363fbb2c01dbaChristian Maeder-- ---------------------------------------------------------------------------
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder-- store class decls
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder-- ---------------------------------------------------------------------------
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder-- | store a class map
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederputClassMap :: ClassMap -> State Env ()
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederputClassMap ce = do { e <- get; put e { classMap = ce } }
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder-- | store a class
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederaddClassDecl :: Kind -> ClassId
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder -> State Env ()
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder-- check with merge
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian MaederaddClassDecl kind ci =
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder if showId ci "" == "Type" then
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder do addDiags [mkDiag Error
a209694d7694b93e56927c6aacc3f5b9366fdb8fChristian Maeder "illegal universe class declaration" ci]
f278337cf46af220b2faecf4b47363fbb2c01dbaChristian Maeder cMap <- gets classMap
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder Nothing -> do putClassMap $ Map.insert ci
e4257c7b13b1122a1e6ec9e43753f3e565b88449Christian Maeder ClassInfo { classKinds = [kind] } cMap
aa074a906c39b63c7177040378c0073dbac4e3baChristian Maeder Just info -> do
else putClassMap $ Map.insert ci info
{ classKinds = Set.toList $