From: Simon Marlow Date: Wed, 7 Nov 2007 16:14:54 +0000 (+0000) Subject: FIX #1617: reloading didn't change the :browse output as it should X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=23e4e1039c16bb30fec04b5006bfc0f4989239d9 FIX #1617: reloading didn't change the :browse output as it should 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. --- diff --git a/compiler/iface/MkIface.lhs b/compiler/iface/MkIface.lhs index 33b18c4..c0b9717 100644 --- a/compiler/iface/MkIface.lhs +++ b/compiler/iface/MkIface.lhs @@ -423,7 +423,13 @@ mkIface_ hsc_env maybe_old_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