diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-04-21 13:56:24 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-04-21 13:56:24 +0000 |
commit | 81709fc3e51b7d328d42367e307ce6af728da7de (patch) | |
tree | 1f24e887a35262b50d036c008407b768eb53e79f /compiler/iface | |
parent | ef03a76a01e538ccae5239dce00c583e9da17984 (diff) | |
download | haskell-81709fc3e51b7d328d42367e307ce6af728da7de.tar.gz |
FIX #3166: include the fixity of classes and type synonyms in their fingerprints
Diffstat (limited to 'compiler/iface')
-rw-r--r-- | compiler/iface/MkIface.lhs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs index 8cfc08f329..019602a659 100644 --- a/compiler/iface/MkIface.lhs +++ b/compiler/iface/MkIface.lhs @@ -631,7 +631,8 @@ freeNamesDeclABI (_mod, decl, extras) = data IfaceDeclExtras = IfaceIdExtras Fixity [IfaceRule] | IfaceDataExtras Fixity [IfaceInstABI] [(Fixity,[IfaceRule])] - | IfaceClassExtras [IfaceInstABI] [(Fixity,[IfaceRule])] + | IfaceClassExtras Fixity [IfaceInstABI] [(Fixity,[IfaceRule])] + | IfaceSynExtras Fixity | IfaceOtherDeclExtras freeNamesDeclExtras :: IfaceDeclExtras -> NameSet @@ -639,8 +640,10 @@ freeNamesDeclExtras (IfaceIdExtras _ rules) = unionManyNameSets (map freeNamesIfRule rules) freeNamesDeclExtras (IfaceDataExtras _ _insts subs) = unionManyNameSets (map freeNamesSub subs) -freeNamesDeclExtras (IfaceClassExtras _insts subs) +freeNamesDeclExtras (IfaceClassExtras _ _insts subs) = unionManyNameSets (map freeNamesSub subs) +freeNamesDeclExtras (IfaceSynExtras _) + = emptyNameSet freeNamesDeclExtras IfaceOtherDeclExtras = emptyNameSet @@ -653,10 +656,12 @@ instance Binary IfaceDeclExtras where putByte bh 1; put_ bh fix; put_ bh rules put_ bh (IfaceDataExtras fix insts cons) = do putByte bh 2; put_ bh fix; put_ bh insts; put_ bh cons - put_ bh (IfaceClassExtras insts methods) = do - putByte bh 3; put_ bh insts; put_ bh methods + put_ bh (IfaceClassExtras fix insts methods) = do + putByte bh 3; put_ bh fix; put_ bh insts; put_ bh methods + put_ bh (IfaceSynExtras fix) = do + putByte bh 4; put_ bh fix put_ bh IfaceOtherDeclExtras = do - putByte bh 4 + putByte bh 5 declExtras :: (OccName -> Fixity) -> OccEnv [IfaceRule] @@ -673,9 +678,10 @@ declExtras fix_fn rule_env inst_env decl (map IfaceInstABI $ lookupOccEnvL inst_env n) (map (id_extras . ifConOcc) (visibleIfConDecls cons)) IfaceClass{ifSigs=sigs} -> - IfaceClassExtras + IfaceClassExtras (fix_fn n) (map IfaceInstABI $ lookupOccEnvL inst_env n) [id_extras op | IfaceClassOp op _ _ <- sigs] + IfaceSyn{} -> IfaceSynExtras (fix_fn n) _other -> IfaceOtherDeclExtras where n = ifName decl |