module UHC.Light.Compiler.CodeGen.ValAccess
( module UHC.Light.Compiler.CodeGen.BasicAnnot
, patNmL2DepL
, AltFetch (..)
, HsName2RefMp, HsName2RefMpMp
, HsName2FldMpMp, HsName2FldMp
, offMpKeysSorted, offMpMpKeysSet )
where
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Base.HsName.Builtin
import UHC.Light.Compiler.CodeGen.RefGenerator
import UHC.Util.Utils
import UHC.Util.Pretty as Pretty
import Data.Bits
import Data.Maybe
import qualified UHC.Util.FastSeq as Seq
import qualified Data.Map as Map
import qualified Data.Set as Set
import Control.Monad
import Control.Monad.State
import UHC.Light.Compiler.CodeGen.BasicAnnot
patNmL2DepL :: RefGenerator r => (Int -> Int) -> ([HsName] -> [HsName]) -> [HsName] -> AssocL HsName r
patNmL2DepL fd fl nmL = refGen 0 (fd 1) (fl nmL)
type HsName2RefMp meref = Map.Map HsName meref
type HsName2RefMpMp mref meref = Map.Map HsName (mref, HsName2RefMp meref)
type HsName2FldMp = HsName2RefMp Fld
type HsName2FldMpMp = HsName2RefMpMp Fld Fld
offMpKeysSorted :: (Ord mref, RefOfFld Fld mref) => HsName2FldMpMp -> AssocL HsName mref
offMpKeysSorted m = sortOn snd [ (n, refOfFld o) | (n,(o,_)) <- Map.toList m ]
offMpMpKeysSet :: HsName2RefMpMp mref meref -> HsNameS
offMpMpKeysSet m = Set.unions [ Map.keysSet m' | (_,m') <- Map.elems m ]
data AltFetch lref
= AltFetch_Many [HsName]
| AltFetch_One HsName lref
| AltFetch_Zero
deriving Eq