Add bang patterns
[ghc-hetmet.git] / ghc / compiler / rename / RnHsSyn.lhs
index bc2fa4d..6752218 100644 (file)
@@ -4,7 +4,17 @@
 \section[RnHsSyn]{Specialisations of the @HsSyn@ syntax for the renamer}
 
 \begin{code}
-module RnHsSyn where
+module RnHsSyn( 
+       -- Names
+       charTyCon_name, listTyCon_name, parrTyCon_name, tupleTyCon_name,
+       extractHsTyVars, extractHsTyNames, extractHsTyNames_s, 
+       extractFunDepNames, extractHsCtxtTyNames, extractHsPredTyNames,
+
+       -- Free variables
+       hsSigsFVs, hsSigFVs, conDeclFVs, bangTyFVs,
+       
+       maybeGenericMatch
+  ) where
 
 #include "HsVersions.h"
 
@@ -54,6 +64,7 @@ extractHsTyNames ty
     get (HsPredTy p)          = extractHsPredTyNames p
     get (HsOpTy ty1 op ty2)    = getl ty1 `unionNameSets` getl ty2 `unionNameSets` unitNameSet (unLoc op)
     get (HsParTy ty)           = getl ty
+    get (HsBangTy _ ty)        = getl ty
     get (HsNumTy n)            = emptyNameSet
     get (HsTyVar tv)          = unitNameSet tv
     get (HsSpliceTy _)         = emptyNameSet  -- Type splices mention no type variables
@@ -100,22 +111,27 @@ In all cases this is set up for interface-file declarations:
 hsSigsFVs :: [LSig Name] -> FreeVars
 hsSigsFVs sigs = plusFVs (map (hsSigFVs.unLoc) sigs)
 
-hsSigFVs (Sig v ty)        = extractHsTyNames ty
+hsSigFVs (TypeSig v ty)     = extractHsTyNames ty
 hsSigFVs (SpecInstSig ty)   = extractHsTyNames ty
-hsSigFVs (SpecSig v ty)     = extractHsTyNames ty
+hsSigFVs (SpecSig v ty inl) = extractHsTyNames ty
 hsSigFVs other             = emptyFVs
 
 ----------------
-conDeclFVs (L _ (ConDecl _ tyvars context details))
+conDeclFVs (L _ (ConDecl { con_qvars = tyvars, con_cxt = context, 
+                          con_details = details, con_res = res_ty}))
   = delFVs (map hsLTyVarName tyvars) $
-    extractHsCtxtTyNames context         `plusFV`
-    conDetailsFVs details
+    extractHsCtxtTyNames context  `plusFV`
+    conDetailsFVs details        `plusFV`
+    conResTyFVs res_ty
 
-conDetailsFVs (PrefixCon btys)    = plusFVs (map bangTyFVs btys)
+conResTyFVs ResTyH98       = emptyFVs
+conResTyFVs (ResTyGADT ty) = extractHsTyNames ty
+
+conDetailsFVs (PrefixCon btys)     = plusFVs (map bangTyFVs btys)
 conDetailsFVs (InfixCon bty1 bty2) = bangTyFVs bty1 `plusFV` bangTyFVs bty2
 conDetailsFVs (RecCon flds)       = plusFVs [bangTyFVs bty | (_, bty) <- flds]
 
-bangTyFVs bty = extractHsTyNames (getBangType (unLoc bty))
+bangTyFVs bty = extractHsTyNames (getBangType bty)
 \end{code}