-- for details
module VectBuiltIn (
- Builtins(..), sumTyCon, prodTyCon,
+ Builtins(..), sumTyCon, prodTyCon, combinePAVar,
initBuiltins, initBuiltinTyCons, initBuiltinPAs, initBuiltinPRs,
primMethod, primPArray
mAX_NDP_SUM :: Int
mAX_NDP_SUM = 3
+mAX_NDP_COMBINE :: Int
+mAX_NDP_COMBINE = 2
+
mkNDPModule :: FastString -> Module
mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m)
, replicatePAVar :: Var
, emptyPAVar :: Var
, packPAVar :: Var
- -- , combinePAVar :: Var
+ , combinePAVars :: Array Int Var
, liftingContext :: Var
}
| n >= 0 && n <= mAX_NDP_PROD = tupleTyCon Boxed n
| otherwise = pprPanic "prodTyCon" (ppr n)
+combinePAVar :: Int -> Builtins -> Var
+combinePAVar n bi
+ | n >= 2 && n <= mAX_NDP_COMBINE = combinePAVars bi ! n
+ | otherwise = pprPanic "combinePAVar" (ppr n)
+
initBuiltins :: DsM Builtins
initBuiltins
= do
replicatePAVar <- externalVar nDP_PARRAY FSLIT("replicatePA")
emptyPAVar <- externalVar nDP_PARRAY FSLIT("emptyPA")
packPAVar <- externalVar nDP_PARRAY FSLIT("packPA")
- -- combinePAVar <- dsLookupGlobalId combinePAName
+
+ combines <- mapM (externalVar nDP_PARRAY)
+ [mkFastString ("combine" ++ show i ++ "PA")
+ | i <- [2..mAX_NDP_COMBINE]]
+ let combinePAVars = listArray (2, mAX_NDP_COMBINE) combines
liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy)
newUnique
, replicatePAVar = replicatePAVar
, emptyPAVar = emptyPAVar
, packPAVar = packPAVar
- -- , combinePAVar = combinePAVar
+ , combinePAVars = combinePAVars
, liftingContext = liftingContext
}
initBuiltinTyCons :: Builtins -> [(Name, TyCon)]
-initBuiltinTyCons bi = [(tyConName funTyCon, closureTyCon bi)]
+initBuiltinTyCons bi = (tyConName funTyCon, closureTyCon bi)
+ : [(tyConName tc, tc) | tc <- defaultTyCons]
+
+defaultTyCons :: [TyCon]
+defaultTyCons = [intTyCon]
initBuiltinDicts :: [(Name, Module, FastString)] -> DsM [(Name, Var)]
initBuiltinDicts ps