1. 25 Feb, 2000 1 commit
    • panne's avatar
      [project @ 2000-02-25 14:55:31 by panne] · f83a5a68
      panne authored
      Deprecations of variables now works, although the source location is
      not yet reported correctly and the code needs some cleanup. Added a
      new flag -fwarn-deprecations to the set of standard warnings. The
      syntax of deprecations has been extended to deprecate types, classes,
      or even constructors, although this does not work yet.
      f83a5a68
  2. 22 Feb, 2000 1 commit
    • panne's avatar
      [project @ 2000-02-22 15:47:56 by panne] · b78eb7be
      panne authored
      Load deprecations from interface files into a deprecation environment
      which maps Names to RenamedDeprecations. This map is not used yet, but
      very soon it will...
      
      This commit fixes a bug related to implicit parameters, too:
      Previously, an interface file containing the name "with" could not be
      read by the interface parser. This broke Malcolm's HaXml 0.9 (released
      today). Remember Sven's glaexts-commandment (Jeffrey? :-) : Always
      keep Lex.lhs's ghcExtensionKeywordsFM and ParseIface.y's var_fs
      production in synch!
      b78eb7be
  3. 10 Feb, 2000 1 commit
  4. 20 Dec, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-12-20 10:34:27 by simonpj] · e921b2e3
      simonpj authored
      This commit implements a substantial re-organisation of the Prelude
      It also fixes a couple of small renamer bugs that were reported recently
      	(notably, Sven pointed out that we weren't reporting
      	unused imports properly)
      
      My original goal was to get rid of all "orphan" modules (i.e. ones
      with instance decls that don't belong either to a tycon or a class
      defined in the same module).  This should reduce the number of
      interface files that have to be read when compiling small Haskell
      modules.
      
      But like most expeditions into the Prelude Swamp, it spiraled out
      of control.  The result is quite satisfactory, though.
      
      	GONE AWAY:	PrelCCall, PrelNumExtra
      
      	NEW:		PrelReal, PrelFloat, PrelByteArr, PrelNum.hi-boot
      
      (The extra PrelNum.hi-boot is because of a tiresome thin-air Id, addr2Integer,
      which used to be in PrelBase.)
      
      Quite a lot of types have moved from one module to another,
      which entails some changes to part of the compiler (PrelInfo, PrelMods) etc,
      and there are a few places in the RTS includes and even in the driver
      that know about these home modules (alas).
      
      So the rough structure is as follows, in (linearised) dependency order
      	[this list now appears in PrelBase.lhs]
      
      PrelGHC		Has no implementation.  It defines built-in things, and
      		by importing it you bring them into scope.
      		The source file is PrelGHC.hi-boot, which is just
      		copied to make PrelGHC.hi
      
      		Classes: CCallable, CReturnable
      
      PrelBase	Classes: Eq, Ord, Functor, Monad
      		Types:   list, (), Int, Bool, Ordering, Char, String
      
      PrelTup		Types: tuples, plus instances for PrelBase classes
      
      PrelShow	Class: Show, plus instances for PrelBase/PrelTup types
      
      PrelEnum	Class: Enum,  plus instances for PrelBase/PrelTup types
      
      PrelMaybe	Type: Maybe, plus instances for PrelBase classes
      
      PrelNum		Class: Num, plus instances for Int
      		Type:  Integer, plus instances for all classes so far (Eq, Ord, Num, Show)
      
      		Integer is needed here because it is mentioned in the signature
      		of 'fromInteger' in class Num
      
      PrelReal	Classes: Real, Integral, Fractional, RealFrac
      			 plus instances for Int, Integer
      		Types:  Ratio, Rational
      			plus intances for classes so far
      
      		Rational is needed here because it is mentioned in the signature
      		of 'toRational' in class Real
      
      Ix		Classes: Ix, plus instances for Int, Bool, Char, Integer, Ordering, tuples
      
      PrelArr		Types: Array, MutableArray, MutableVar
      
      		Does *not* contain any ByteArray stuff (see PrelByteArr)
      		Arrays are used by a function in PrelFloat
      
      PrelFloat	Classes: Floating, RealFloat
      		Types:   Float, Double, plus instances of all classes so far
      
      		This module contains everything to do with floating point.
      		It is a big module (900 lines)
      		With a bit of luck, many modules can be compiled without ever reading PrelFloat.hi
      
      PrelByteArr	Types: ByteArray, MutableByteArray
      
      		We want this one to be after PrelFloat, because it defines arrays
      		of unboxed floats.
      
      
      Other Prelude modules are much easier with fewer complex dependencies.
      e921b2e3
  5. 10 Dec, 1999 1 commit
  6. 09 Dec, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-12-09 12:30:56 by simonpj] · 39262efa
      simonpj authored
      A bunch of small changes in the way that usage information
      is generated to stuff into interface files.  I'm not certain
      anything was really wrong before, but it's tidier now, and
      there are slightly fewer dependencies generated.  Main
      differences are in RnIfaces.getImportVersions
      
      I also made the check for orphan rules a bit cleverer
      (Rename.isOrphanDecl) so that we get fewer spurious orphan modules.
      
      Simon
      39262efa
  7. 02 Dec, 1999 1 commit
  8. 30 Nov, 1999 1 commit
    • lewie's avatar
      [project @ 1999-11-30 16:10:07 by lewie] · e1e1d020
      lewie authored
      First bits o' functional dependencies - just the syntax and related
      datatypes, plus started moving some of the static checks from the
      renamer (where we don't know about fundeps) to later in the typechecker.
      e1e1d020
  9. 29 Nov, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-11-29 17:34:14 by simonpj] · e1a4f2a5
      simonpj authored
      Make it so that a class decl generates default method decls
      for every method, not just for the ones that the user supplies
      default-methods for.
      
      GHC will never call these default-default methods, because
      when it finds an instance decl with no defn for a method,
      *and* the class decl doesn't have a user-programmed default
      method, it whips up a new default method for that instance
      decl so that the error message is more informative than
      the default-default method would be.
      
      But Hugs isn't so smart, and wants to call something from
      the class decl.
      
      This change required fiddling with more than I expected.  Sigh.
      
      Simon
      e1a4f2a5
  10. 16 Sep, 1999 1 commit
  11. 24 Aug, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-08-24 08:59:14 by simonpj] · 7d845299
      simonpj authored
      Record all orphan modules (including "library" ones)
      in the usage info in an interface file.  Leaving these out
      prevents propagation of orphan module information.
      7d845299
  12. 08 Jul, 1999 1 commit
  13. 06 Jul, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-07-06 16:45:31 by simonpj] · 9d38678e
      simonpj authored
      All Simon's recent tuning changes.  Rough summary follows:
      
      * Fix Kevin Atkinson's cant-find-instance bug.  Turns out that Rename.slurpSourceRefs
        needs to repeatedly call getImportedInstDecls, and then go back to slurping
        source-refs.  Comments with Rename.slurpSourceRefs.
      
      * Add a case to Simplify.mkDupableAlt for the quite-common case where there's
        a very simple alternative, in which case there's no point in creating a
        join-point binding.
      
      * Fix CoreUtils.exprOkForSpeculation so that it returns True of (==# a# b#).
        This lack meant that
      	case ==# a# b# of { True -> x; False -> x }
        was not simplifying
      
      * Make float-out dump bindings at the top of a function argument, as
        at the top of a let(rec) rhs.  See notes with FloatOut.floatRhs
      
      * Make the ArgOf case of mkDupableAlt generate a OneShot lambda.
        This gave a noticeable boost to spectral/boyer2
      
      
      * Reduce the number of coerces, using worker/wrapper stuff.
        The main idea is in WwLib.mkWWcoerce.  The gloss is that we must do
        the w/w split even for small non-recursive things.  See notes with
        WorkWrap.tryWw.
      
      * This further complicated getWorkerId, so I finally bit the bullet and
        make the workerInfo field of the IdInfo work properly, including
        under substitutions.  Death to getWorkerId.  Kevin Glynn will be happy.
      
      * Make all lambdas over realWorldStatePrimTy
        into one-shot lambdas.  This is a GROSS HACK.
      
      * Also make the occurrence analyser aware of one-shot lambdas.
      
      * Make various Prelude things into INLINE, so that foldr doesn't
        get inlined in their body, so that the caller gets the benefit
        of fusion.  Notably in PrelArr.lhs.
      9d38678e
  14. 05 Jul, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-07-05 15:30:25 by simonpj] · 8ae0e52a
      simonpj authored
      Make sure that instance gates have their home modules
      loaded by RnIfaces.getImportedInstDecls.  This was causing
      Kevin Atkinson's missing-instance bug.
      8ae0e52a
  15. 28 Jun, 1999 1 commit
  16. 17 Jun, 1999 1 commit
  17. 08 Jun, 1999 1 commit
  18. 01 Jun, 1999 1 commit
    • simonmar's avatar
      [project @ 1999-06-01 16:40:41 by simonmar] · 904f158f
      simonmar authored
      This commit replaces the old yacc parser with a Happy-generated one.
      Notes:
      
      	- The generated .hs file is *big*.  Best to use a recent
      	  version of Happy, and even better to add the -c flag
      	  to use unsafeCoerce# with ghc (versions 4.02+ please).
      
      	- The lexer has grown all sorts of unsightly growths and
      	  should be put down as soon as possible.
      
      	- Parse errors may result in strange diagnostics.  I'm looking
      	  into this.
      
      	- HsSyn now contains a few extra constructors due to the way
      	  patterns are parsed as expressions in the parser.
      
      	- The layout rule is implemented according to the Haskell
      	  report.  I found a couple of places in the libraries where
      	  we previously weren't adhering to this - in particular the
      	  rule about "nested contexts must be more indented than
      	  outer contexts".  The rule is necessary to disambiguate
      	  in the presence of empty declaration lists.
      904f158f
  19. 26 May, 1999 1 commit
  20. 21 May, 1999 1 commit
  21. 18 May, 1999 1 commit
  22. 27 Apr, 1999 1 commit
    • sof's avatar
      [project @ 1999-04-27 17:33:49 by sof] · 90c0b29e
      sof authored
      Renamer changes:
      
       - for a toplevel type signature
      
      	f :: ty
      
         the name 'f' refers to a local definition of 'f' - i.e., don't
         report 'f' as clashing with any imported 'f's.
      
       - tidied up the handling of fixity declarations - misplaced fixity
         declarations inside class decls, e.g.,
      
            class F a where
             infix 9 `f`
             g :: a -> Int
      
         are now caught and reported as errors. Robustified the renaming
         of class decls.
      90c0b29e
  23. 02 Apr, 1999 1 commit
    • simonm's avatar
      [project @ 1999-04-02 08:50:23 by simonm] · 1b919f1d
      simonm authored
      Hack from Simon: put abstract type decls (i.e. from an hi-boot file)
      on the defferred list, just in case we happen to pull in the real one
      as well.
      1b919f1d
  24. 11 Mar, 1999 1 commit
  25. 02 Mar, 1999 1 commit
    • sof's avatar
      [project @ 1999-03-02 17:12:54 by sof] · 94ff1ec1
      sof authored
      Directories can now be flagged as containing interface files that have
      their corresponding object codes living in Win32 DLLs.
      
      The compiler needs to keep track of whether a name refers to something
      in a DLL or not, since Win32 DLLs forces you to distinguish between
      the two at the point of use. For example, the code generated for
      the following snippet
      
           return (x+2);
      
      will differ. If 'x' resides in a DLL, you need to perform an extra
      indirection to get at its value. Effectively, the generated code
      becomes
      
           return (*x+2);
      
      For functions, the distinction can be made transparent, but we
      can avoid jumping through an extra level of indirection if we
      do indicate that a label will be imported from a DLL.
      
      Back to the renamer and its scheme, directories that contain
      the file ".dLL_ifs.hi" (name chosen to lessen the risk of a clash..)
      are considered as containing 'DLL interface files'. There's two
      caveats to this scheme:
      
       - interface files found in "." are not considered to be referring
         to something in a DLL.
       - if the compiler has got -static on the command line, then all
         interface file in scope are considered to be 'normal'.
      94ff1ec1
  26. 15 Feb, 1999 1 commit
  27. 04 Feb, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-02-04 13:45:24 by simonpj] · 937b23b9
      simonpj authored
      a) Fix black hole bug when doing -dshow-rn-trace
         (Involved reorganising where fixity exports are dealt with
          in RnNames/RnIfaces.)
      
      b) Arrange to apply Lint to imported unfoldings when -dcore-lint
      
      c) Add -fwarn-type-defaults to report use of the defaulting rules for types
      
      d) Make it so that f (error "help) --> error "help", if f is strict
         (Changes in Simplify.lhs.)
      937b23b9
  28. 28 Jan, 1999 1 commit
  29. 27 Jan, 1999 1 commit
    • simonpj's avatar
      [project @ 1999-01-27 14:51:14 by simonpj] · 18976e61
      simonpj authored
      Finally!  This commits the ongoing saga of Simon's hygiene sweep
      
      FUNCTIONALITY
      ~~~~~~~~~~~~~
      a) The 'unused variable' warnings from the renamer work.  
      b) Better error messages here and there, esp type checker
      c) Fixities for Haskell 98 (maybe I'd done that before)
      d) Lazy reporting of name clashes for Haskell 98 (ditto)
      
      HYGIENE
      ~~~~~~~
      a) type OccName has its own module.  OccNames are represented
         by a single FastString, not three as in the last round.  This
         string is held in Z-encoded form; a decoding function decodes
         for printing in user error messages.  There's a nice tight
         encoding for (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)
      
      b) type Module is a proper ADT, in module OccName
      
      c) type RdrName is a proper ADT, in its own module
      
      d) type Name has a new, somwhat tidier, representation
      
      e) much grunting in the renamer to get Provenances right.
         This makes error messages look better (no spurious qualifiers)
      18976e61
  30. 14 Jan, 1999 1 commit
    • sof's avatar
      [project @ 1999-01-14 17:58:41 by sof] · 3160f854
      sof authored
      Assorted minor Haskell 98 changes:
      
        * Maximal munch rule for "--" comments
        * _ as lower-case letter, "_" is a reserved id. Prefixing unused
          variable names in patterns with '_' causes the renamer not to
          report such names as being unused.
        * allow empty decls
        * comprehensions are now list comprehensions, not monadic.
        * use Monad.fail to signal pattern matching errors within
          do expressions.
        * remove record punning.
        * empty contexts are now legal  (go wild!)
        * allow records with no fields
        * allow newtypes with a labelled field
        * default default is now (Integer, Double)
        * turn off defaulting mechanism for args & res to a _ccall_.
        * allow LHSs of the form  (a -.- b) x = ...
        * Main.main can now have type (IO a)
        * nuked Void (and its use in the compiler sources.)
        * deriving machinery for Enum now also generate 'succ' and 'pred'
          method bindings.
      3160f854
  31. 07 Jan, 1999 1 commit
  32. 18 Dec, 1998 1 commit
    • simonpj's avatar
      [project @ 1998-12-18 17:40:31 by simonpj] · 7e602b0a
      simonpj authored
      Another big commit from Simon.  Actually, the last one
      didn't all go into the main trunk; because of a CVS glitch it
      ended up in the wrong branch.
      
      So this commit includes:
      
      * Scoped type variables
      * Warnings for unused variables should work now (they didn't before)
      * Simplifier improvements:
      	- Much better treatment of strict arguments
      	- Better treatment of bottoming Ids
      	- No need for w/w split for fns that are merely strict
      	- Fewer iterations needed, I hope
      * Less gratuitous renaming in interface files and abs C
      * OccName is a separate module, and is an abstract data type
      
      I think the whole Prelude and Exts libraries compile correctly.
      Something isn't quite right about typechecking existentials though.
      7e602b0a
  33. 02 Dec, 1998 1 commit
  34. 14 Aug, 1998 1 commit
  35. 23 Jul, 1998 1 commit
  36. 21 Jul, 1998 1 commit
  37. 20 Jul, 1998 1 commit
  38. 01 Jun, 1998 1 commit
  39. 04 May, 1998 1 commit
  40. 30 Apr, 1998 1 commit