VM,
noV, tryV, maybeV, orElseV, fixV, localV, closedV, initV,
- cloneName, newLocalVar, newTyVar,
+ cloneName, newExportedVar, newLocalVar, newDummyVar, newTyVar,
- Builtins(..), paDictTyCon,
+ Builtins(..), paDictTyCon, paDictDataCon,
builtin,
GlobalEnv(..),
+ setInstEnvs,
readGEnv, setGEnv, updGEnv,
LocalEnv(..),
import Panic
import Outputable
import FastString
+import SrcLoc ( noSrcSpan )
import Control.Monad ( liftM )
, applyClosurePVar :: Var
, lengthPAVar :: Var
, replicatePAVar :: Var
+ , emptyPAVar :: Var
}
paDictTyCon :: Builtins -> TyCon
paDictTyCon = classTyCon . paClass
+paDictDataCon :: Builtins -> DataCon
+paDictDataCon = classDataCon . paClass
+
initBuiltins :: DsM Builtins
initBuiltins
= do
applyClosurePVar <- dsLookupGlobalId applyClosurePName
lengthPAVar <- dsLookupGlobalId lengthPAName
replicatePAVar <- dsLookupGlobalId replicatePAName
+ emptyPAVar <- dsLookupGlobalId emptyPAName
return $ Builtins {
parrayTyCon = parrayTyCon
, applyClosurePVar = applyClosurePVar
, lengthPAVar = lengthPAVar
, replicatePAVar = replicatePAVar
+ , emptyPAVar = emptyPAVar
}
data GlobalEnv = GlobalEnv {
, global_bindings = []
}
+setInstEnvs :: InstEnv -> FamInstEnv -> GlobalEnv -> GlobalEnv
+setInstEnvs l_inst l_fam_inst genv
+ | (g_inst, _) <- global_inst_env genv
+ , (g_fam_inst, _) <- global_fam_inst_env genv
+ = genv { global_inst_env = (g_inst, l_inst)
+ , global_fam_inst_env = (g_fam_inst, l_fam_inst) }
+
emptyLocalEnv = LocalEnv {
local_vars = emptyVarEnv
, local_tyvars = []
(nameSrcSpan name)
| otherwise = mkSystemName u occ_name
+newExportedVar :: OccName -> Type -> VM Var
+newExportedVar occ_name ty
+ = do
+ mod <- liftDs getModuleDs
+ u <- liftDs newUnique
+
+ let name = mkExternalName u mod occ_name noSrcSpan
+
+ return $ Id.mkExportedLocalId name ty
+
newLocalVar :: FastString -> Type -> VM Var
newLocalVar fs ty
= do
u <- liftDs newUnique
return $ mkSysLocal fs u ty
+newDummyVar :: Type -> VM Var
+newDummyVar = newLocalVar FSLIT("ds")
+
newTyVar :: FastString -> Kind -> VM Var
newTyVar fs k
= do