{-# LANGUAGE CPP #-} {-# LANGUAGE EmptyDataDecls #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DeriveDataTypeable #-} -- | Exports the UHC API, and provides dummy -- definitions if the backend is disabled. module Agda.Compiler.UHC.Bridge ( uhcBackendEnabled -- UHC.Util.Pretty , PP_Doc , putPPFile , disp , pp -- UHC.Util.Serialize , Serialize , putSerializeFile , serialize , unserialize -- UHC.Light.Compiler.Base.API , EHCOpts , defaultEHCOpts , HsName , CTag , mkHsName , mkHsName1 , mkUniqueHsName -- UHC.Light.Compiler.Core.API , CModule , CImport , CExport , CDeclMeta , CDataCon , CExpr , CBind , CAlt , CPat , CPatFld -- , CPatRest , mkUnit , mkInt , mkInteger , mkChar , mkString , mkError , mkUndefined , mkVar , mkLet1Plain , mkLet1Strict , mkLetRec , mkLam , mkApp , mkBind1 , mkBind1Nm1 , mkCTag , destructCTag , ctagUnit , ctagTrue , ctagFalse , ctagCons , ctagNil , mkCase , mkAlt , mkPatCon , mkPatRestEmpty , mkPatFldBind , mkTagTup , mkModule , mkImport , mkExport , mkMetaData , mkMetaDataCon , mkMetaDataConFromCTag , mkMain , parseExpr , printModule ) where #include "undefined.h" import Agda.Utils.Impossible import Data.Binary.Put import Data.Binary.Get import Data.Typeable #if defined(UHC_BACKEND) import UHC.Util.Pretty import UHC.Util.Serialize import UHC.Util.ParseUtils import UHC.Util.ScanUtils import UU.Scanner.Position import UHC.Light.Compiler.Core.API import UHC.Light.Compiler.Base.API #else -- UHC.Util.Pretty type PP_Doc = String class Show a => PP a where pp :: a -> PP_Doc instance PP CExpr where pp CExpr_DUMMY = "DUMMY - UHC backend is disabled" putPPFile :: String -> PP_Doc -> Int -> IO () putPPFile = __IMPOSSIBLE__ disp :: PP_Doc -> Int -> ShowS disp s _ = (s ++) -- UHC.Util.Serialize class Serialize a where putSerializeFile :: FilePath -> a -> IO () putSerializeFile = __IMPOSSIBLE__ serialize :: x -> Put serialize = __IMPOSSIBLE__ unserialize :: Get x unserialize = __IMPOSSIBLE__ -- UHC.Light.Compiler.Base.API data EHCOpts defaultEHCOpts :: EHCOpts defaultEHCOpts = __IMPOSSIBLE__ data HsName deriving (Typeable) deriving instance Eq HsName deriving instance Ord HsName deriving instance Show HsName instance Serialize HsName where data CTag deriving (Typeable) deriving instance Eq CTag deriving instance Ord CTag deriving instance Show CTag instance Serialize CTag where mkHsName :: [String] -> String -> HsName mkHsName = __IMPOSSIBLE__ mkHsName1 :: String -> HsName mkHsName1 = __IMPOSSIBLE__ mkUniqueHsName :: String -> [String] -> String -> HsName mkUniqueHsName = __IMPOSSIBLE__ -- UHC.Light.Compiler.Core.API data CModule instance Serialize CModule data CImport data CExport data CDeclMeta data CDataCon -- dummy to use as parse result for core pragmas data CExpr = CExpr_DUMMY deriving (Eq, Ord, Show, Typeable) instance Serialize CExpr where data CBind data CAlt data CPat data CPatFld data CPatRest mkUnit :: EHCOpts -> CExpr mkUnit = __IMPOSSIBLE__ mkInt :: EHCOpts -> Int -> CExpr mkInt = __IMPOSSIBLE__ mkInteger :: EHCOpts -> Integer -> CExpr mkInteger = __IMPOSSIBLE__ mkChar :: Char -> CExpr mkChar = __IMPOSSIBLE__ mkString :: EHCOpts -> String -> CExpr mkString = __IMPOSSIBLE__ mkError :: EHCOpts -> String -> CExpr mkError = __IMPOSSIBLE__ mkUndefined :: EHCOpts -> CExpr mkUndefined = __IMPOSSIBLE__ mkVar :: HsName -> CExpr mkVar = __IMPOSSIBLE__ mkLet1Plain :: HsName -> CExpr -> CExpr -> CExpr mkLet1Plain = __IMPOSSIBLE__ mkLet1Strict :: HsName -> CExpr -> CExpr -> CExpr mkLet1Strict = __IMPOSSIBLE__ mkLetRec :: [CBind] -> CExpr -> CExpr mkLetRec = __IMPOSSIBLE__ mkLam :: [HsName] -> CExpr -> CExpr mkLam = __IMPOSSIBLE__ mkApp :: CExpr -> [CExpr] -> CExpr mkApp = __IMPOSSIBLE__ mkBind1 :: HsName -> CExpr -> CBind mkBind1 = __IMPOSSIBLE__ mkBind1Nm1 :: HsName -> CBind mkBind1Nm1 = __IMPOSSIBLE__ mkCTag :: HsName -> HsName -> Int -> Int -> CTag mkCTag = __IMPOSSIBLE__ destructCTag :: a -> (HsName -> HsName -> Int -> Int -> a) -> CTag -> a destructCTag = __IMPOSSIBLE__ ctagUnit :: CTag ctagUnit = __IMPOSSIBLE__ ctagTrue :: EHCOpts -> CTag ctagTrue = __IMPOSSIBLE__ ctagFalse :: EHCOpts -> CTag ctagFalse = __IMPOSSIBLE__ ctagCons :: EHCOpts -> CTag ctagCons = __IMPOSSIBLE__ ctagNil :: EHCOpts -> CTag ctagNil = __IMPOSSIBLE__ mkCase :: CExpr -> [CAlt] -> CExpr mkCase = __IMPOSSIBLE__ mkAlt :: CPat -> CExpr -> CAlt mkAlt = __IMPOSSIBLE__ mkPatCon :: CTag -> CPatRest -> [CPatFld] -> CPat mkPatCon = __IMPOSSIBLE__ mkPatRestEmpty :: CPatRest mkPatRestEmpty = __IMPOSSIBLE__ mkPatFldBind :: (HsName, CExpr) -> CBind -> CPatFld mkPatFldBind = __IMPOSSIBLE__ mkTagTup :: CTag -> [CExpr] -> CExpr mkTagTup = __IMPOSSIBLE__ mkModule :: HsName -> [CExport] -> [CImport] -> [CDeclMeta] -> CExpr -> CModule mkModule = __IMPOSSIBLE__ mkImport :: HsName -> CImport mkImport = __IMPOSSIBLE__ mkExport :: HsName -> CExport mkExport = __IMPOSSIBLE__ mkMetaData :: HsName -> [CDataCon] -> CDeclMeta mkMetaData = __IMPOSSIBLE__ mkMetaDataCon :: HsName -> Int -> Int -> CDataCon mkMetaDataCon = __IMPOSSIBLE__ mkMetaDataConFromCTag :: CTag -> Maybe CDataCon mkMetaDataConFromCTag = __IMPOSSIBLE__ mkMain :: HsName -> CExpr mkMain = __IMPOSSIBLE__ parseExpr :: EHCOpts -> String -> Either [String] CExpr -- just always succeed, as we don't want to fail on UHC pragmas -- if the backend is disabled parseExpr _ _ = Right CExpr_DUMMY printModule :: EHCOpts -> CModule -> PP_Doc printModule = __IMPOSSIBLE__ #endif uhcBackendEnabled :: Bool #if defined(UHC_BACKEND) uhcBackendEnabled = True #else uhcBackendEnabled = False #endif