Commit 14e92de4 authored by simonpj's avatar simonpj
Browse files

[project @ 2000-12-19 17:42:13 by simonpj]

Fix the tcAddImportedIdInfo problem
parent 5a763550
......@@ -10,7 +10,7 @@ module RnHsSyn where
import HsSyn
import HsCore
import Class ( FunDep )
import Class ( FunDep, DefMeth(..) )
import TysWiredIn ( tupleTyCon, listTyCon, charTyCon )
import Name ( Name, getName, isTyVarName )
import NameSet
......@@ -132,11 +132,22 @@ tyClDeclFVs (TyData {tcdCtxt = context, tcdTyVars = tyvars, tcdCons = condecls,
tyClDeclFVs (TySynonym {tcdTyVars = tyvars, tcdSynRhs = ty})
= delFVs (map hsTyVarName tyvars) (extractHsTyNames ty)
tyClDeclFVs (ClassDecl {tcdCtxt = context, tcdTyVars = tyvars, tcdFDs = fds, tcdSigs = sigs})
tyClDeclFVs (ClassDecl {tcdCtxt = context, tcdTyVars = tyvars, tcdFDs = fds,
tcdSigs = sigs, tcdMeths = maybe_meths})
= delFVs (map hsTyVarName tyvars) $
extractHsCtxtTyNames context `plusFV`
plusFVs (map extractFunDepNames fds) `plusFV`
hsSigsFVs sigs
hsSigsFVs sigs `plusFV`
dm_fvs
where
dm_fvs = case maybe_meths of
Nothing -> mkFVs [v | ClassOpSig _ (DefMeth v) _ _ <- sigs]
-- No method bindings, so this class decl comes from an interface file,
-- So we want to treat the default-method names as free (they should
-- be defined somewhere else). [In source code this is not so; the class
-- decl will bind whatever default-methods are necessary.]
Just _ -> emptyFVs -- Source code, so the default methods
-- are *bound* not *free*
----------------
hsSigsFVs sigs = plusFVs (map hsSigFVs sigs)
......
......@@ -397,14 +397,6 @@ rnClassOp clas clas_tyvars clas_fds sig@(ClassOpSig op dm_stuff ty locn)
returnRn (ClassOpSig op_name dm_stuff' new_ty locn)
rnClassBinds :: RdrNameTyClDecl -> RenamedTyClDecl -> RnMS (RenamedTyClDecl, FreeVars)
rnClassBinds (ClassDecl {tcdMeths = Nothing})
rn_cls_decl@(ClassDecl {tcdSigs = sigs})
-- No method bindings, so this class decl comes from an interface file,
-- However we want to treat the default-method names as free (they should
-- be defined somewhere else). [In source code this is not so; the class
-- decl will bind whatever default-methods are necessary.]
= returnRn (rn_cls_decl, mkFVs [v | ClassOpSig _ (DefMeth v) _ _ <- sigs])
rnClassBinds (ClassDecl {tcdMeths = Just mbinds}) -- Get mbinds from here
rn_cls_decl@(ClassDecl {tcdTyVars = tyvars, tcdLoc = src_loc}) -- Everything else is here
-- There are some default-method bindings (abeit possibly empty) so
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment