content: {- |
  Module      :  ./COL/StatAna.hs
  Description :  Static analysis for COL
  Copyright   :  (c) Christian Maeder, Uni Bremen 2004
  License     :  GPLv2 or higher, see LICENSE.txt
  
  Maintainer  :  till@informatik.uni-bremen.de
  Stability   :  provisional
  Portability :  portable
  
  static analysis of COL parts
  -}
  
  module COL.StatAna where
  
  import COL.AS_COL
  import COL.COLSign
  
  import CASL.StaticAna
  
  import Common.AS_Annotation
  import qualified Data.Set as Set
  import qualified Data.Map as Map
  import Data.Maybe (fromMaybe)
  import Common.Id
  import Common.Result
  
  addConstructor :: Id -> COLSign -> Result COLSign
  addConstructor i m = return
         m { constructors = Set.insert i $ constructors m }
  
  addObserver :: (Id, Maybe Int) -> COLSign -> Result COLSign
  addObserver (i, v) m = return
         m { observers = Map.insert i (fromMaybe 0 v) $ observers m }
  
  ana_COL_SIG_ITEM :: Ana COL_SIG_ITEM () COL_SIG_ITEM () COLSign
  ana_COL_SIG_ITEM _ mi =
      case mi of
      Constructor_items al ps -> do
          mapM_ (updateExtInfo . addConstructor . item) al
          return $ Constructor_items al ps
      Observer_items al ps -> do
          mapM_ (updateExtInfo . addObserver . item) al
          return $ Observer_items al ps
  