module VectUtils (
collectAnnTypeBinders, collectAnnTypeArgs, isAnnTypeArg,
collectAnnValBinders,
- mkDataConTag,
+ mkDataConTag, mkDataConTagLit,
splitClosureTy,
mkBuiltinCo,
import TysWiredIn
import TysPrim ( intPrimTy )
import BasicTypes ( Boxity(..) )
+import Literal ( Literal, mkMachInt )
import Outputable
import FastString
isAnnTypeArg (_, AnnType t) = True
isAnnTypeArg _ = False
+mkDataConTagLit :: DataCon -> Literal
+mkDataConTagLit con
+ = mkMachInt . toInteger $ dataConTag con - fIRST_TAG
+
mkDataConTag :: DataCon -> CoreExpr
-mkDataConTag dc = mkConApp intDataCon [mkIntLitInt $ dataConTag dc]
+mkDataConTag con = mkIntLitInt (dataConTag con - fIRST_TAG)
splitUnTy :: String -> Name -> Type -> Type
splitUnTy s name ty
splitPArrayTy :: Type -> Type
splitPArrayTy = splitUnTy "splitPArrayTy" parrayTyConName
+splitPrimTyCon :: Type -> Maybe TyCon
+splitPrimTyCon ty
+ | Just (tycon, []) <- splitTyConApp_maybe ty
+ , isPrimTyCon tycon
+ = Just tycon
+
+ | otherwise = Nothing
+
mkBuiltinTyConApp :: (Builtins -> TyCon) -> [Type] -> VM Type
mkBuiltinTyConApp get_tc tys
= do
mkPADictType ty = mkBuiltinTyConApp paTyCon [ty]
mkPArrayType :: Type -> VM Type
+mkPArrayType ty
+ | Just tycon <- splitPrimTyCon ty
+ = do
+ arr <- traceMaybeV "mkPArrayType" (ppr tycon)
+ $ lookupPrimPArray tycon
+ return $ mkTyConApp arr []
mkPArrayType ty = mkBuiltinTyConApp parrayTyCon [ty]
mkBuiltinCo :: (Builtins -> TyCon) -> VM Coercion
paMethod :: PAMethod -> Type -> VM CoreExpr
paMethod (method, name) ty
- | Just (tycon, []) <- splitTyConApp_maybe ty
- , isPrimTyCon tycon
+ | Just tycon <- splitPrimTyCon ty
= do
fn <- traceMaybeV "paMethod" (ppr tycon <+> text name)
$ lookupPrimMethod tycon name