[clean up renaming code, collect free variables from SPECIALIZATION pragmas before renaming
John Meacham <john@repetae.net>**20090305011229
 Ignore-this: 6d581e7da67ecbbbbd7f298e7399bac0
] hunk ./FrontEnd/Desugar.hs 105
+-- XXX we currently discard instance specializations
+desugarDecl HsPragmaSpecialize { hsDeclName = n } | n == nameName u_instance = return []
+
hunk ./FrontEnd/Rename.hs 27
-import qualified FlagOpts as FO
hunk ./FrontEnd/Rename.hs 79
-        modify (\state -> state {unique = (unique state) + 1})
+        modify (\s -> s {unique = unique s + 1})
hunk ./FrontEnd/Rename.hs 153
-renameOld :: (SubTable -> RM a) -> RM a
-renameOld rm = asks envSubTable >>= rm
-
hunk ./FrontEnd/Rename.hs 156
-
-
hunk ./FrontEnd/Rename.hs 202
-        hsQualType' <- rename hsQualType
-        return (HsTypeSig srcLoc hsNames' hsQualType')
+            hsQualType' <- rename hsQualType
+            return (HsTypeSig srcLoc hsNames' hsQualType')
hunk ./FrontEnd/Rename.hs 270
-        n <- rename n
-        t <- rename t
-        m <- getCurrentModule
-        i <- newUniq
-        return prules { hsDeclUniq = (m,i), hsDeclName = n, hsDeclType = t }
+        n <- if n == nameName u_instance then return n else rename n
+        let ns = snub (getNames t)
+        updateWith t $ do
+            ns' <- rename ns
+            t <- rename t
+            m <- getCurrentModule
+            i <- newUniq
+            let nt = if null ns' then t else HsTyForall bs (HsQualType [] t)
+                bs = [ hsTyVarBind { hsTyVarBindName = n } | n <- ns']
+            return prules { hsDeclUniq = (m,i), hsDeclName = n, hsDeclType = t }
hunk ./FrontEnd/Rename.hs 386
+
hunk ./FrontEnd/Rename.hs 546
-        hsQualType' <- rename hsQualType
-        return (HsExpTypeSig srcLoc hsExp' hsQualType')
+            hsQualType' <- rename hsQualType
+            return (HsExpTypeSig srcLoc hsExp' hsQualType')
hunk ./FrontEnd/Rename.hs 630
-
-{-
-renameHsStmts (hsStmt:hsStmts) exp = do
-    updateWith hsStmt $ do
-      subTable' <- getUpdates hsStmt
-      withSubTable subTable' $ do
-      hsStmt' <- withSubTable subTable' $ rename hsStmt
-      (hsStmts',subTable'') <- renameHsStmts hsStmts subTable'
-      return ((hsStmt':hsStmts'),subTable'')
-renameHsStmts [] = do
-    fe <- exp
-    return ([],subTable)
-
--- renameHsStmts is trickier than you would expect because
--- the statements are only in scope after they have been declared
--- and thus the subTable must be more carefully threaded through
-
--- the updated subTable is returned at the end because it is needed by
--- the first section of a list comprehension.
-
-renameHsStmts :: [HsStmt] -> SubTable -> RM (([HsStmt],SubTable))
-renameHsStmts (hsStmt:hsStmts) subTable = do
-    updateWith hsStmt $ do
-      subTable' <- getUpdates hsStmt
-      withSubTable subTable' $ do
-      hsStmt' <- withSubTable subTable' $ rename hsStmt
-      (hsStmts',subTable'') <- renameHsStmts hsStmts subTable'
-      return ((hsStmt':hsStmts'),subTable'')
-renameHsStmts [] subTable = do
-      return ([],subTable)
- -}
-
hunk ./FrontEnd/Rename.hs 643
-
-
hunk ./FrontEnd/Rename.hs 650
-
-
hunk ./FrontEnd/Rename.hs 651
-    rename n = renameOld $ renameHsName n
+    rename n = do
+        subTable <- asks envSubTable
+        renameHsName n subTable
hunk ./FrontEnd/Rename.hs 655
-renameTypeName n = renameOld $ renameTypeHsName n
+renameTypeName hsName = do
+    t <- gets typeSubTable
+    subTable <- asks envSubTable
+    case Map.lookup hsName t of
+        Just _ -> renameHsName hsName t
+        Nothing -> renameHsName hsName subTable
hunk ./FrontEnd/Rename.hs 685
-renameTypeHsName hsName subTable  =  gets typeSubTable  >>= \t -> case Map.lookup hsName t of
-    Just _ -> renameHsName hsName t
-    Nothing -> renameHsName hsName subTable