module UHC.Light.Compiler.CodeGen.BuiltinPrims
( PrimitiveNeedsEval (..), lookupPrimNeedsEval )
where
import UHC.Light.Compiler.Base.HsName
import UHC.Light.Compiler.Base.Common
import UHC.Light.Compiler.Opts
import UHC.Light.Compiler.CodeGen.BasicAnnot
import UHC.Light.Compiler.Base.HsName.Builtin
import qualified Data.Map as Map
import qualified UHC.Util.FastSeq as Seq
import UHC.Util.Pretty
import UHC.Util.Utils


{-# LINE 28 "src/ehc/CodeGen/BuiltinPrims.chs" #-}
data PrimitiveNeedsEval
  = Prim
      { primArgNeedEval     :: ![Bool]  		-- default: True
      , primResNeedEval     :: ! Bool   		-- default: False
      }

lookupPrimNeedsEval :: {- Backend -> -} String -> Maybe PrimitiveNeedsEval
lookupPrimNeedsEval {- backend -} name =  Map.lookup name primsNeedsEval {- >>= Map.lookup backend -}

{-# LINE 43 "src/ehc/CodeGen/BuiltinPrims.chs" #-}
primsNeedsEval :: Map.Map String ({- Map.Map Backend -} PrimitiveNeedsEval)
primsNeedsEval
  = Map.fromList
      [
        ( "primCatchException"	, Prim [False,False]		False )
      , ( "primThrowException"	, Prim [False] 				False )
      , ( "primNewArray"		, Prim [True,False] 		False )
      , ( "primIndexArray"		, Prim [True,True] 			True  )
      , ( "primWriteArray"		, Prim [True,True,False] 	False )
      -- , ( "primReadMutVar"		, Prim [True,True]	 		True  )
      , ( "primNewMutVar"		, Prim [False,True] 		False )
      , ( "primWriteMutVar"		, Prim [True,False,True] 	False )
      ]