Le.hs revision 628310b42327ad76ce471caf0dde6563d6fa6307
98fa6135beb09a6612ea256eb34ac5b2805d3ea5Ewaryst Schulz
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz{- HetCATS/HasCASL/Le.hs
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner $Id$
25449dd4a796d3244e754bde21a5e9c401dc135eEwaryst Schulz Authors: Christian Maeder
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz Year: 2002/2003
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz abstract syntax after/during static analysis
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz-}
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulzmodule HasCASL.Le where
1b353d403dbdb365ae93a568f32b3ebf5698cab5Ewaryst Schulz
1b353d403dbdb365ae93a568f32b3ebf5698cab5Ewaryst Schulzimport Common.Id
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulzimport HasCASL.As
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulzimport Common.Lib.Map
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulzimport Data.List
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulzimport Control.Monad.State
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulzimport Common.Result
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz-----------------------------------------------------------------------------
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz-- classInfo
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz-----------------------------------------------------------------------------
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulzdata ClassInfo = ClassInfo { superClasses :: [ClassId]
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz , classKind :: Kind
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz , classDefn :: Maybe Class
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz } deriving (Show, Eq)
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz
348346590dc302381df4daf372d6dc601b860eaeEwaryst SchulznewClassInfo :: ClassInfo
cae4916b0844b837a4dd7e29730c56a3e26ef94dEwaryst SchulznewClassInfo = ClassInfo [] star Nothing
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz-----------------------------------------------------------------------------
c73c3d0df595b7feab36cf441a1a31cd1a2c7c1dEwaryst Schulz
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulztype ClassMap = Map ClassId ClassInfo
e77f7260babdf86b287a632f9676c601bd0db077Ewaryst Schulz
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz-----------------------------------------------------------------------------
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz-- typeInfo
62ff5e56ab685e81ebde4712eb1bf677322bfba9Ewaryst Schulz-----------------------------------------------------------------------------
62ff5e56ab685e81ebde4712eb1bf677322bfba9Ewaryst Schulz
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulzdata GenKind = Free | Generated | Loose deriving (Show, Eq)
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz
c208973c890b8f993297720fd0247bc7481d4304Christian Maederdata TypeDefn = NoTypeDefn
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz | Supertype TypeId Type Formula
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz | DatatypeDefn GenKind -- ...
5f2c34b8971f9ca7e63364b69e167851d001168eEwaryst Schulz | AliasTypeDefn TypeScheme
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz | TypeVarDefn deriving (Show, Eq)
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz
df0d1a7e7dfff3be40c24b25318a6a07c748be20Ewaryst Schulzdata TypeInfo = TypeInfo { typeKind :: Kind
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz , otherTypeKinds :: [Kind]
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz , superTypes :: [Type]
e77f7260babdf86b287a632f9676c601bd0db077Ewaryst Schulz , typeDefn :: TypeDefn
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz } deriving (Show, Eq)
938677803842b384a91fef21f58f86b8e3188b43Ewaryst Schulz
5ca1fe655d7d4e35e59a082b5955b306643329d0Ewaryst Schulz-----------------------------------------------------------------------------
df0d1a7e7dfff3be40c24b25318a6a07c748be20Ewaryst Schulz
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulztype TypeMap = Map TypeId TypeInfo
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz
348346590dc302381df4daf372d6dc601b860eaeEwaryst Schulz-----------------------------------------------------------------------------
49c8d0af1a96cab75795d49b078b9163b666473fEwaryst Schulz-- assumptions
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz-----------------------------------------------------------------------------
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulzdata OpInfo = OpInfo { opType :: TypeScheme
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder , opAttrs :: [OpAttr]
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz , opDefn :: OpDefn
938677803842b384a91fef21f58f86b8e3188b43Ewaryst Schulz } deriving (Show, Eq)
938677803842b384a91fef21f58f86b8e3188b43Ewaryst Schulz
f887ef77051188d95ceb8c37f39af91fc1195137Ewaryst Schulzdata OpDefn = NoOpDefn
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz | ConstructData TypeId -- target type
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz | SelectData UninstOpId TypeId -- constructor of source type
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz | Definition Term
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz | VarDefn deriving (Show, Eq)
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulztype Assumps = Map Id [OpInfo]
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz-----------------------------------------------------------------------------
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz-- local env
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz-----------------------------------------------------------------------------
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulzdata Env = Env { classMap :: ClassMap
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz , typeMap :: TypeMap
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz , assumps :: Assumps
8b6641f92fd899798421ef2b3d3e335da7425030Ewaryst Schulz , envDiags :: [Diagnosis]
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz } deriving Show
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst SchulzinitialEnv :: Env
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst SchulzinitialEnv = Env empty empty empty []
aae33d0d1a0f8174a7a704e2fdbb29482e0bf587Ewaryst Schulz
aae33d0d1a0f8174a7a704e2fdbb29482e0bf587Ewaryst SchulzappendDiags :: [Diagnosis] -> State Env ()
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst SchulzappendDiags ds =
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz if null ds then return () else
f887ef77051188d95ceb8c37f39af91fc1195137Ewaryst Schulz do e <- get
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz put $ e {envDiags = ds ++ envDiags e}
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst SchulzaddDiag :: Diagnosis -> State Env ()
d1fddc394ac2af87a6210e7a3504bb565d088e7aEwaryst SchulzaddDiag d = appendDiags [d]
5ca1fe655d7d4e35e59a082b5955b306643329d0Ewaryst Schulz
938677803842b384a91fef21f58f86b8e3188b43Ewaryst Schulzindent :: Int -> ShowS -> ShowS
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulzindent i s = showString $ concat $
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz intersperse ('\n' : replicate i ' ') (lines $ s "")
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz-- ---------------------------------------------------------------------
d1fddc394ac2af87a6210e7a3504bb565d088e7aEwaryst Schulz
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroedergetClassMap :: State Env ClassMap
5ca1fe655d7d4e35e59a082b5955b306643329d0Ewaryst SchulzgetClassMap = gets classMap
5ca1fe655d7d4e35e59a082b5955b306643329d0Ewaryst Schulz
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst SchulzputClassMap :: ClassMap -> State Env ()
d1fddc394ac2af87a6210e7a3504bb565d088e7aEwaryst SchulzputClassMap ce = do { e <- get; put e { classMap = ce } }
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst SchulzgetTypeMap :: State Env TypeMap
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst SchulzgetTypeMap = gets typeMap
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst SchulzputTypeMap :: TypeMap -> State Env ()
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst SchulzputTypeMap tk = do { e <- get; put e { typeMap = tk } }
0850c3e5fb6285405ebaeb5aa433985203ac892dEwaryst Schulz
bdf2e01977470bedcb4425e2dadabc9e9f6ba149Ewaryst SchulzgetAssumps :: State Env Assumps
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst SchulzgetAssumps = gets assumps
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst Schulz
699f8456142e7c89bd15acf3aa8790fd02f4420dEwaryst SchulzputAssumps :: Assumps -> State Env ()
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst SchulzputAssumps as = do { e <- get; put e { assumps = as } }
f58e5059e02c7e903059f3ec37bcb3b482afd63fEwaryst Schulz