[project @ 2000-11-10 15:12:50 by simonpj]
[ghc-hetmet.git] / ghc / compiler / deSugar / Desugar.lhs
index 1d95438..1745615 100644 (file)
@@ -13,8 +13,9 @@ import HsSyn          ( MonoBinds, RuleDecl(..), RuleBndr(..),
                          HsExpr(..), HsBinds(..), MonoBinds(..) )
 import TcHsSyn         ( TypecheckedRuleDecl )
 import TcModule                ( TcResults(..) )
+import Id              ( Id )
 import CoreSyn
-import Rules           ( ProtoCoreRule(..), pprProtoCoreRule )
+import PprCore         ( pprIdCoreRule )
 import Subst           ( substExpr, mkSubst, mkInScopeSet )
 import DsMonad
 import DsExpr          ( dsExpr )
@@ -23,13 +24,14 @@ import DsForeign    ( dsForeigns )
 import DsExpr          ()      -- Forces DsExpr to be compiled; DsBinds only
                                -- depends on DsExpr.hi-boot.
 import Module          ( Module )
+import Id              ( Id )
 import VarEnv
 import VarSet
 import Bag             ( isEmptyBag )
-import CoreLint                ( beginPass, endPass )
+import CoreLint                ( showPass, endPass )
 import ErrUtils                ( doIfSet, pprBagOfWarnings )
 import Outputable
-import UniqSupply      ( UniqSupply )
+import UniqSupply      ( mkSplitUniqSupply )
 import HscTypes                ( HomeSymbolTable )
 \end{code}
 
@@ -44,34 +46,36 @@ start.
 
 \begin{code}
 deSugar :: DynFlags
-       -> Module 
-       -> UniqSupply
+       -> Module -> PrintUnqualified
        -> HomeSymbolTable
         -> TcResults
-       -> IO ([CoreBind], RuleEnv, SDoc, SDoc, [CoreBndr])
+       -> IO ([CoreBind], [(Id,CoreRule)], SDoc, SDoc, [CoreBndr])
 
-deSugar dflags mod_name us hst
+deSugar dflags mod_name unqual hst
         (TcResults {tc_env   = global_val_env,
                    tc_pcs   = pcs,
                    tc_binds = all_binds,
                    tc_rules = rules,
                    tc_fords = fo_decls})
   = do
-       beginPass dflags "Desugar"
+       showPass dflags "Desugar"
+       us <- mkSplitUniqSupply 'd'
+
        -- Do desugaring
        let (result, ds_warns) = 
                initDs dflags us (hst,pcs,global_val_env) mod_name
                        (dsProgram mod_name all_binds rules fo_decls)    
            (ds_binds, ds_rules, _, _, _) = result
 
-        -- Display any warnings
+       -- Display any warnings
         doIfSet (not (isEmptyBag ds_warns))
-               (printErrs (pprBagOfWarnings ds_warns))
+               (printErrs unqual (pprBagOfWarnings ds_warns))
 
-        -- Lint result if necessary
+       -- Lint result if necessary
         let do_dump_ds = dopt Opt_D_dump_ds dflags
         endPass dflags "Desugar" do_dump_ds ds_binds
 
+       -- Dump output
        doIfSet do_dump_ds (printDump (ppr_ds_rules ds_rules))
 
         return result
@@ -98,7 +102,7 @@ dsProgram mod_name all_binds rules fo_decls
 ppr_ds_rules [] = empty
 ppr_ds_rules rules
   = text "" $$ text "-------------- DESUGARED RULES -----------------" $$
-    vcat (map pprProtoCoreRule rules)
+    vcat (map pprIdCoreRule rules)
 \end{code}
 
 
@@ -109,13 +113,12 @@ ppr_ds_rules rules
 %************************************************************************
 
 \begin{code}
-dsRule :: IdSet -> TypecheckedRuleDecl -> DsM ProtoCoreRule
+dsRule :: IdSet -> TypecheckedRuleDecl -> DsM (Id, CoreRule)
 dsRule in_scope (HsRule name sig_tvs vars lhs rhs loc)
   = putSrcLocDs loc            $
     ds_lhs all_vars lhs                `thenDs` \ (fn, args) ->
     dsExpr rhs                 `thenDs` \ core_rhs ->
-    returnDs (ProtoCoreRule True {- local -} fn
-                           (Rule name tpl_vars args core_rhs))
+    returnDs (fn, Rule name tpl_vars args core_rhs)
   where
     tpl_vars = sig_tvs ++ [var | RuleBndr var <- vars]
     all_vars = mkInScopeSet (in_scope `unionVarSet` mkVarSet tpl_vars)