FIX #1617: reloading didn't change the :browse output as it should
authorSimon Marlow <simonmar@microsoft.com>
Wed, 7 Nov 2007 16:14:54 +0000 (16:14 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Wed, 7 Nov 2007 16:14:54 +0000 (16:14 +0000)
The problem was that because the interface hadn't changed, we were
re-using the old ModIface.  Unfortunately the ModIface contains the
GlobalRdrEnv for the module, and that *had* changed.  The fix is to
put the new GlobalRdrEnv in the ModIface even if the interface has not
otherwise changed.

ModIface is not really the right place for the GlobalRdrEnv, but
neither is ModDetails, so we should think about a better way to do
this.

compiler/iface/MkIface.lhs

index 33b18c4..c0b9717 100644 (file)
@@ -423,7 +423,13 @@ mkIface_ hsc_env maybe_old_iface
        ; dumpIfSet_dyn dflags Opt_D_dump_hi "FINAL INTERFACE" 
                        (pprModIface new_iface)
 
        ; dumpIfSet_dyn dflags Opt_D_dump_hi "FINAL INTERFACE" 
                        (pprModIface new_iface)
 
-       ; return (new_iface, no_change_at_all) }
+                -- bug #1617: on reload we weren't updating the PrintUnqualified
+                -- correctly.  This stems from the fact that the interface had
+                -- not changed, so addVersionInfo returns the old ModIface
+                -- with the old GlobalRdrEnv (mi_globals).
+        ; let final_iface = new_iface{ mi_globals = Just rdr_env }
+
+       ; return (final_iface, no_change_at_all) }
   where
      r1 `le_rule`     r2 = ifRuleName      r1    <=    ifRuleName      r2
      i1 `le_inst`     i2 = ifDFun          i1 `le_occ` ifDFun          i2  
   where
      r1 `le_rule`     r2 = ifRuleName      r1    <=    ifRuleName      r2
      i1 `le_inst`     i2 = ifDFun          i1 `le_occ` ifDFun          i2