lookupVar, defGlobalVar,
lookupTyCon, defTyCon,
lookupDataCon, defDataCon,
- lookupTyConPA, defTyConPA, defTyConPAs, defTyConRdrPAs,
+ lookupTyConPA, defTyConPA, defTyConPAs, defTyConBuiltinPAs,
lookupTyVarPA, defLocalTyVar, defLocalTyVarWithPA, localTyVars,
{-lookupInst,-} lookupFamInst
import Name
import NameEnv
import TysPrim ( intPrimTy )
-import RdrName
+import Module
+import IfaceEnv
import DsMonad
import PrelNames
import FastString
import SrcLoc ( noSrcSpan )
-import Control.Monad ( liftM )
+import Control.Monad ( liftM, zipWithM )
data Scope a b = Global a | Local b
, lengthPAVar :: Var
, replicatePAVar :: Var
, emptyPAVar :: Var
+ , packPAVar :: Var
+ , combinePAVar :: Var
+ , intEqPAVar :: Var
, liftingContext :: Var
}
lengthPAVar <- dsLookupGlobalId lengthPAName
replicatePAVar <- dsLookupGlobalId replicatePAName
emptyPAVar <- dsLookupGlobalId emptyPAName
+ packPAVar <- dsLookupGlobalId packPAName
+ combinePAVar <- dsLookupGlobalId combinePAName
+ intEqPAVar <- dsLookupGlobalId intEqPAName
liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy)
newUnique
, lengthPAVar = lengthPAVar
, replicatePAVar = replicatePAVar
, emptyPAVar = emptyPAVar
+ , packPAVar = packPAVar
+ , combinePAVar = combinePAVar
+ , intEqPAVar = intEqPAVar
, liftingContext = liftingContext
}
-- Hoisted bindings
, global_bindings :: [(Var, CoreExpr)]
-
- -- Global Rdr environment (from ModGuts)
- --
- , global_rdr_env :: GlobalRdrEnv
}
data LocalEnv = LocalEnv {
}
-initGlobalEnv :: VectInfo -> (InstEnv, InstEnv) -> FamInstEnvs -> Builtins -> GlobalRdrEnv
+initGlobalEnv :: VectInfo -> (InstEnv, InstEnv) -> FamInstEnvs -> Builtins
-> GlobalEnv
-initGlobalEnv info instEnvs famInstEnvs bi rdr_env
+initGlobalEnv info instEnvs famInstEnvs bi
= GlobalEnv {
global_vars = mapVarEnv snd $ vectInfoVar info
, global_exported_vars = emptyVarEnv
, global_inst_env = instEnvs
, global_fam_inst_env = famInstEnvs
, global_bindings = []
- , global_rdr_env = rdr_env
}
setFamInstEnv :: FamInstEnv -> GlobalEnv -> GlobalEnv
= do updLEnv $ \env -> env { local_bind_name = occNameFS (getOccName id) }
p
-lookupRdrName :: RdrName -> VM Name
-lookupRdrName rdr_name
- = do
- rdr_env <- readGEnv global_rdr_env
- case lookupGRE_RdrName rdr_name rdr_env of
- [gre] -> return (gre_name gre)
- [] -> pprPanic "VectMonad.lookupRdrName: not found" (ppr rdr_name)
- _ -> pprPanic "VectMonad.lookupRdrName: ambiguous" (ppr rdr_name)
-
-lookupRdrVar :: RdrName -> VM Var
-lookupRdrVar rdr_name
- = do
- name <- lookupRdrName rdr_name
- liftDs (dsLookupGlobalId name)
+lookupExternalVar :: Module -> FastString -> VM Var
+lookupExternalVar mod fs
+ = liftDs
+ $ dsLookupGlobalId =<< lookupOrig mod (mkVarOccFS fs)
cloneName :: (OccName -> OccName) -> Name -> VM Name
cloneName mk_occ name = liftM make (liftDs newUnique)
env { global_pa_funs = extendNameEnvList (global_pa_funs env)
[(tyConName tc, pa) | (tc, pa) <- ps] }
-defTyConRdrPAs :: [(Name, RdrName)] -> VM ()
-defTyConRdrPAs ps
+defTyConBuiltinPAs :: [(Name, Module, FastString)] -> VM ()
+defTyConBuiltinPAs ps
= do
- pas <- mapM lookupRdrVar rdr_names
+ pas <- zipWithM lookupExternalVar mods fss
updGEnv $ \env ->
env { global_pa_funs = extendNameEnvList (global_pa_funs env)
(zip tcs pas) }
where
- (tcs, rdr_names) = unzip ps
+ (tcs, mods, fss) = unzip3 ps
lookupTyVarPA :: Var -> VM (Maybe CoreExpr)
lookupTyVarPA tv = readLEnv $ \env -> lookupVarEnv (local_tyvar_pa env) tv
r <- runVM p builtins (initGlobalEnv info
instEnvs
famInstEnvs
- builtins
- (mg_rdr_env guts))
+ builtins)
emptyLocalEnv
case r of
Yes genv _ x -> return $ Just (new_info genv, x)