[project @ 2003-11-06 17:09:50 by simonpj]
[ghc-hetmet.git] / ghc / compiler / rename / RnExpr.lhs
index 24d3893..0b78b1a 100644 (file)
@@ -28,7 +28,7 @@ import RdrHsSyn
 import RnHsSyn
 import TcRnMonad
 import RnEnv
-import RdrName         ( plusGlobalRdrEnv )
+import OccName         ( plusOccEnv )
 import RnNames         ( importsFromLocalDecls )
 import RnTypes         ( rnHsTypeFVs, rnPat, litFVs, rnOverLit, rnPatsAndThen,
                          dupFieldErr, precParseErr, sectionPrecErr, patSigErr, checkTupSize )
@@ -228,12 +228,6 @@ rnExpr e@(HsSplice n splice loc)
     rnExpr splice              `thenM` \ (splice', fvs_e) ->
     returnM (HsSplice n' splice' loc, fvs_e)
 
-rnExpr e@(HsReify (Reify flavour name))
-  = checkTH e "reify"          `thenM_`
-    lookupGlobalOccRn name     `thenM` \ name' ->
-       -- For now, we can only reify top-level things
-    returnM (HsReify (Reify flavour name'), unitFV name')
-
 rnExpr section@(SectionL expr op)
   = rnExpr expr                                        `thenM` \ (expr', fvs_expr) ->
     rnExpr op                                  `thenM` \ (op', fvs_op) ->
@@ -625,6 +619,8 @@ rnRbinds str rbinds
 %************************************************************************
 
 \begin{code}
+rnBracket (VarBr n) = lookupOccRn n            `thenM` \ name -> 
+                     returnM (VarBr name, unitFV name)
 rnBracket (ExpBr e) = rnExpr e         `thenM` \ (e', fvs) ->
                      returnM (ExpBr e', fvs)
 rnBracket (PatBr p) = rnPat p          `thenM` \ (p', fvs) ->
@@ -637,14 +633,19 @@ rnBracket (DecBr group)
   = importsFromLocalDecls group `thenM` \ (rdr_env, avails) ->
        -- Discard avails (not useful here)
 
-    updGblEnv (\gbl -> gbl { tcg_rdr_env = rdr_env `plusGlobalRdrEnv` tcg_rdr_env gbl }) $
+    updGblEnv (\gbl -> gbl { tcg_rdr_env = tcg_rdr_env gbl `plusOccEnv` rdr_env}) $
+       -- Notice plusOccEnv, not plusGlobalRdrEnv.  In this situation we want
+       -- to *shadow* top-level bindings.  E.g.
+       --      foo = 1
+       --      bar = [d| foo = 1|]
+       -- So we drop down to plusOccEnv.  (Perhaps there should be a fn in RdrName.)
 
     rnSrcDecls group   `thenM` \ (tcg_env, group') ->
        -- Discard the tcg_env; it contains only extra info about fixity
     let 
        dus = tcg_dus tcg_env 
     in
-    returnM (DecBr group', duUses dus `minusNameSet` duDefs dus)
+    returnM (DecBr group', allUses dus)
 \end{code}
 
 %************************************************************************