Add built-in PA dictionary for closures
[ghc-hetmet.git] / compiler / vectorise / Vectorise.hs
index bb5aa0d..06fc542 100644 (file)
@@ -46,11 +46,23 @@ import Outputable
 import FastString
 import Control.Monad        ( liftM, liftM2, zipWithM, mapAndUnzipM )
 
-mkNDPVar :: FastString -> RdrName
-mkNDPVar fs = mkRdrQual nDP_BUILTIN (mkVarOccFS fs)
+mkNDPVar :: String -> RdrName
+mkNDPVar s = mkRdrQual nDP_BUILTIN (mkVarOcc s)
+
+mkNDPVarFS :: FastString -> RdrName
+mkNDPVarFS fs = mkRdrQual nDP_BUILTIN (mkVarOccFS fs)
 
 builtin_PAs :: [(Name, RdrName)]
-builtin_PAs = [(intTyConName, mkNDPVar FSLIT("dPA_Int"))]
+builtin_PAs = [
+                mk closureTyConName FSLIT("dPA_Clo")
+              , mk intTyConName     FSLIT("dPA_Int")
+              ]
+              ++ tups
+  where
+    mk name fs = (name, mkNDPVarFS fs)
+
+    tups = mk_tup 0 : map mk_tup [2..3]
+    mk_tup n   = (getName $ tupleTyCon Boxed n, mkNDPVar $ "dPA_" ++ show n)
 
 vectorise :: HscEnv -> UniqSupply -> RuleBase -> ModGuts
           -> IO (SimplCount, ModGuts)
@@ -69,21 +81,17 @@ vectModule :: ModGuts -> VM ModGuts
 vectModule guts
   = do
       defTyConRdrPAs builtin_PAs
-      (types', fam_insts, pa_insts) <- vectTypeEnv (mg_types guts)
+      (types', fam_insts, tc_binds) <- vectTypeEnv (mg_types guts)
       
-      let insts         = map painstInstance pa_insts
-          fam_inst_env' = extendFamInstEnvList (mg_fam_inst_env guts) fam_insts
-          inst_env'     = extendInstEnvList (mg_inst_env guts) insts
-      updGEnv (setInstEnvs inst_env' fam_inst_env')
+      let fam_inst_env' = extendFamInstEnvList (mg_fam_inst_env guts) fam_insts
+      updGEnv (setFamInstEnv fam_inst_env')
      
-      dicts   <- mapM buildPADict pa_insts
-      workers <- mapM vectDataConWorkers pa_insts
+      -- dicts   <- mapM buildPADict pa_insts
+      -- workers <- mapM vectDataConWorkers pa_insts
       binds'  <- mapM vectTopBind (mg_binds guts)
       return $ guts { mg_types        = types'
-                    , mg_binds        = Rec (concat workers ++ concat dicts) : binds'
-                    , mg_inst_env     = inst_env'
+                    , mg_binds        = Rec tc_binds : binds'
                     , mg_fam_inst_env = fam_inst_env'
-                    , mg_insts        = mg_insts guts ++ insts
                     , mg_fam_insts    = mg_fam_insts guts ++ fam_insts
                     }