X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fvectorise%2FVectMonad.hs;h=738ae6ffb499cecd14d9b3939f6e7b65cb22a4e1;hp=11f7b53cc0bde450ac4b3ef0b1011483fec7d42a;hb=ad94d40948668032189ad22a0ad741ac1f645f50;hpb=f8b36ae46b5ee5aa13ca8a6fdb901d92249d147b diff --git a/compiler/vectorise/VectMonad.hs b/compiler/vectorise/VectMonad.hs index 11f7b53..738ae6f 100644 --- a/compiler/vectorise/VectMonad.hs +++ b/compiler/vectorise/VectMonad.hs @@ -1,3 +1,10 @@ +{-# OPTIONS -w #-} +-- The above warning supression flag is a temporary kludge. +-- While working on this module you are encouraged to remove it and fix +-- any warnings in the module. See +-- http://hackage.haskell.org/trac/ghc/wiki/CodingStyle#Warnings +-- for details + module VectMonad ( Scope(..), VM, @@ -7,8 +14,8 @@ module VectMonad ( cloneName, cloneId, newExportedVar, newLocalVar, newDummyVar, newTyVar, - Builtins(..), - builtin, + Builtins(..), sumTyCon, prodTyCon, + builtin, builtins, GlobalEnv(..), setFamInstEnv, @@ -24,6 +31,7 @@ module VectMonad ( lookupDataCon, defDataCon, lookupTyConPA, defTyConPA, defTyConPAs, lookupTyConPR, + lookupPrimMethod, lookupPrimPArray, lookupTyVarPA, defLocalTyVar, defLocalTyVarWithPA, localTyVars, {-lookupInst,-} lookupFamInst @@ -240,6 +248,9 @@ liftDs p = VM $ \bi genv lenv -> do { x <- p; return (Yes genv lenv x) } builtin :: (Builtins -> a) -> VM a builtin f = VM $ \bi genv lenv -> return (Yes genv lenv (f bi)) +builtins :: (a -> Builtins -> b) -> VM (a -> b) +builtins f = VM $ \bi genv lenv -> return (Yes genv lenv (`f` bi)) + readGEnv :: (GlobalEnv -> a) -> VM a readGEnv f = VM $ \bi genv lenv -> return (Yes genv lenv (f genv)) @@ -351,6 +362,12 @@ defDataCon :: DataCon -> DataCon -> VM () defDataCon dc dc' = updGEnv $ \env -> env { global_datacons = extendNameEnv (global_datacons env) (dataConName dc) dc' } +lookupPrimPArray :: TyCon -> VM (Maybe TyCon) +lookupPrimPArray = liftDs . primPArray + +lookupPrimMethod :: TyCon -> String -> VM (Maybe Var) +lookupPrimMethod tycon = liftDs . primMethod tycon + lookupTyConPA :: TyCon -> VM (Maybe Var) lookupTyConPA tc = readGEnv $ \env -> lookupNameEnv (global_pa_funs env) (tyConName tc) @@ -452,8 +469,9 @@ initV hsc_env guts info p go = do builtins <- initBuiltins - builtin_tycons <- initBuiltinTyCons - builtin_pas <- initBuiltinPAs + let builtin_tycons = initBuiltinTyCons builtins + builtin_pas <- initBuiltinPAs builtins + builtin_prs <- initBuiltinPRs builtins eps <- ioToIOEnv $ hscEPS hsc_env let famInstEnvs = (eps_fam_inst_env eps, mg_fam_inst_env guts) @@ -461,6 +479,7 @@ initV hsc_env guts info p let genv = extendTyConsEnv builtin_tycons . extendPAFunsEnv builtin_pas + . setPRFunsEnv builtin_prs $ initGlobalEnv info instEnvs famInstEnvs r <- runVM p builtins genv emptyLocalEnv