packages feed

ghc-hie-0.0.4: src/GHC/Builtin/Utils.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE LambdaCase #-}
module GHC.Builtin.Utils (GHC(..), isKnownKeyName, lookupKnownKeyName) where

import Data.Maybe
import Data.Functor
import Control.Applicative

import GHC.Types.Unique
import GHC.Types.Unique.FM

import GHC.Builtin.Imports
import GHC.Builtin.Uniques
import GHC.Builtin.Names.GHC908 qualified as GHC908
import GHC.Builtin.Names.GHC910 qualified as GHC910
import GHC.Builtin.Names.GHC912 qualified as GHC912
import GHC.Builtin.Names.GHC914 qualified as GHC914

data GHC =
    GHC908
  | GHC910
  | GHC912
  | GHC914

lookupKnownKeyName :: GHC -> Unique -> Maybe Name
lookupKnownKeyName = \ case
  GHC908 -> lookupKnownKeyName908
  GHC910 -> lookupKnownKeyName910
  GHC912 -> lookupKnownKeyName912
  GHC914 -> lookupKnownKeyName914

lookupKnownKeyName908 :: Unique -> Maybe Name
lookupKnownKeyName908 u = knownUniqueName u <|> lookupUFM_Directly knownKeysMap908 u

lookupKnownKeyName910 :: Unique -> Maybe Name
lookupKnownKeyName910 u = knownUniqueName u <|> lookupUFM_Directly knownKeysMap910 u

lookupKnownKeyName912 :: Unique -> Maybe Name
lookupKnownKeyName912 u = knownUniqueName u <|> lookupUFM_Directly knownKeysMap912 u

lookupKnownKeyName914 :: Unique -> Maybe Name
lookupKnownKeyName914 u = knownUniqueName u <|> lookupUFM_Directly knownKeysMap914 u

knownKeysMap908 :: UniqFM Name Name
knownKeysMap908 = listToIdentityUFM GHC908.knownKeyNames
{-# NOINLINE knownKeysMap908 #-}

knownKeysMap910 :: UniqFM Name Name
knownKeysMap910 = listToIdentityUFM GHC910.knownKeyNames
{-# NOINLINE knownKeysMap910 #-}

knownKeysMap912 :: UniqFM Name Name
knownKeysMap912 = listToIdentityUFM GHC912.knownKeyNames
{-# NOINLINE knownKeysMap912 #-}

knownKeysMap914 :: UniqFM Name Name
knownKeysMap914 = listToIdentityUFM GHC914.knownKeyNames
{-# NOINLINE knownKeysMap914 #-}

isKnownKeyName :: Name -> Bool
isKnownKeyName n = isJust (knownUniqueName $ nameUnique n) || elemUFM n knownKeys

#if __GLASGOW_HASKELL__ == 908 || __GLASGOW_HASKELL__ == 910 || __GLASGOW_HASKELL__ == 912 || __GLASGOW_HASKELL__ == 914
knownKeys :: UniqFM Name ()
knownKeys =
     knownKeysMap908
  <> knownKeysMap910
  <> knownKeysMap912
  <> knownKeysMap914
  $> ()
{-# NOINLINE knownKeys #-}
#else
#error unsupported GHC version
#endif