summaryrefslogtreecommitdiff
path: root/compiler/iface
diff options
context:
space:
mode:
authorManuel M T Chakravarty <chak@cse.unsw.edu.au>2011-08-24 22:34:40 +1000
committerManuel M T Chakravarty <chak@cse.unsw.edu.au>2011-08-24 22:44:09 +1000
commitfaa4b3f08f2379a14d163d5485b05bf3ab84c530 (patch)
treea9f2fa4e87e8271c076c4582637ab7cec37138a4 /compiler/iface
parent82ac7ff381e0eaaf3e6e18c375b32a0d7463344a (diff)
downloadhaskell-faa4b3f08f2379a14d163d5485b05bf3ab84c530.tar.gz
Fix name generation for vectorised identifiers
Diffstat (limited to 'compiler/iface')
-rw-r--r--compiler/iface/MkIface.lhs3
-rw-r--r--compiler/iface/TcIface.lhs14
2 files changed, 9 insertions, 8 deletions
diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs
index d32b6d1cc8..d17fe6adf8 100644
--- a/compiler/iface/MkIface.lhs
+++ b/compiler/iface/MkIface.lhs
@@ -575,7 +575,8 @@ addFingerprints hsc_env mb_old_fingerprint iface0 new_decls
mi_iface_hash = iface_hash,
mi_exp_hash = export_hash,
mi_orphan_hash = orphan_hash,
- mi_orphan = not (null orph_rules && null orph_insts),
+ mi_orphan = not (null orph_rules && null orph_insts
+ && null (ifaceVectInfoVar (mi_vect_info iface0))),
mi_finsts = not . null $ mi_fam_insts iface0,
mi_decls = sorted_decls,
mi_hash_fn = lookupOccEnv local_env }
diff --git a/compiler/iface/TcIface.lhs b/compiler/iface/TcIface.lhs
index 52311baa20..dde969fab0 100644
--- a/compiler/iface/TcIface.lhs
+++ b/compiler/iface/TcIface.lhs
@@ -722,7 +722,7 @@ tcIfaceVectInfo mod typeEnv (IfaceVectInfo
}
where
vectVarMapping name
- = do { vName <- lookupOrig mod (mkLocalisedOccName mkVectOcc name)
+ = do { vName <- lookupOrig mod (mkLocalisedOccName mod mkVectOcc name)
; var <- forkM (text ("vect var") <+> ppr name) $
tcIfaceExtId name
; vVar <- forkM (text ("vect vVar") <+> ppr vName) $
@@ -730,9 +730,9 @@ tcIfaceVectInfo mod typeEnv (IfaceVectInfo
; return (var, (var, vVar))
}
vectTyConMapping name
- = do { vName <- lookupOrig mod (mkLocalisedOccName mkVectTyConOcc name)
- ; paName <- lookupOrig mod (mkLocalisedOccName mkPADFunOcc name)
- ; isoName <- lookupOrig mod (mkLocalisedOccName mkVectIsoOcc name)
+ = do { vName <- lookupOrig mod (mkLocalisedOccName mod mkVectTyConOcc name)
+ ; paName <- lookupOrig mod (mkLocalisedOccName mod mkPADFunOcc name)
+ ; isoName <- lookupOrig mod (mkLocalisedOccName mod mkVectIsoOcc name)
-- FIXME: we will need to use tcIfaceTyCon/tcIfaceExtId on some of these (but depends
-- on how we exactly define the 'VECTORISE type' pragma to work)
; let { tycon = lookupTyCon name
@@ -748,8 +748,8 @@ tcIfaceVectInfo mod typeEnv (IfaceVectInfo
)
}
vectTyConReuseMapping scalarNames name
- = do { paName <- lookupOrig mod (mkLocalisedOccName mkPADFunOcc name)
- ; isoName <- lookupOrig mod (mkLocalisedOccName mkVectIsoOcc name)
+ = do { paName <- lookupOrig mod (mkLocalisedOccName mod mkPADFunOcc name)
+ ; isoName <- lookupOrig mod (mkLocalisedOccName mod mkVectIsoOcc name)
; tycon <- forkM (text ("vect reuse tycon") <+> ppr name) $
tcIfaceTyCon (IfaceTc name) -- somewhat naughty for wired in tycons, but ok
; if name `elemNameSet` scalarNames
@@ -773,7 +773,7 @@ tcIfaceVectInfo mod typeEnv (IfaceVectInfo
}}
vectDataConMapping datacon
= do { let name = dataConName datacon
- ; vName <- lookupOrig mod (mkLocalisedOccName mkVectDataConOcc name)
+ ; vName <- lookupOrig mod (mkLocalisedOccName mod mkVectDataConOcc name)
; let vDataCon = lookupDataCon vName
; return (name, (datacon, vDataCon))
}