Skip to content
  • Simon Peyton Jones's avatar
    [project @ 1999-05-18 15:19:15 by simonpj] · 927b3cbb
    Simon Peyton Jones authored
    Renamer changes
    		~~~~~~~~~~~~~~~
    
    [The real commit preceded this, but had the stupid message "msg_rn"
     because I used "cvs commit -m" instead of "cvs commit -F"]
    
    Fairly substantial changes to the renamer:
    
    * opt_PruneTyDecls is gone, gone, gone. Hurrah.  Ditto the 'deferred
      data decls' which was a bug farm.
    
      Instead, the compiler slurps in the transitive closure of all type
      declarations.  It is nevertheless still parsimonious about slurping
      in instance decls and rewrite rules.
    
    * The renamer now uses the usage information stored in each interface
      file to figure out whether to look for A.hi or A.hi-boot when looking
      for a declaration for A.f (say).
    
    * Because of the above, there are no "A!f" symbols in interface files any more.
      However, the header of the interface file does contain a "!" to indicate
      that the mdoule contains "orphan" instance decls or rewrite rules.
    	__interface Foo 3 ! 403 where
    
      Likewise, the usage info contains a "!" to indicate that the module
      mentioned has orphans:
    	import Foo 3 ! :: a 1 b 7 ;
    
    * The renamer now only reads an interface looking for fixities if it
      finds an occurrence of an operator from that module.  (Previously
      it pessimistically read the home modlese of all in-scope variables.)
    
    * Some flags have changed to more consistent names:
    	-ddump-rn-stats		(was -dshow-rn-stats)
    	-ddump-rn-trace		(was -dshow-rn-trace)
    
    * Exports now come before imports in interface files.  (This was an
      un-forced change.)
    
    * The usage info is now explicit when a module imports the whole of another:
    	import M 3 ;		-- Imports the whole of M
    	import M 3 :: a 2 b 7 ;	-- Imports M.a, M.b
    	import M 3 :: ;		-- Imports nothing from M
      The last one is still vital to record that this module depends indirectly
      on M, even though it didn't use anything from M directly.
    
    * The renamer warns if you import {- SOURCE -} unnecessarily.
    927b3cbb