1. 29 May, 2009 2 commits
    • simonpj@microsoft.com's avatar
      Make haddocking depend on the library .a file · dc249f10
      simonpj@microsoft.com authored
      You can't Haddock a library until it's built. Previously that happened
      automatically because
        Haddock itself was built with stage2
        And all the libraries were built with stage1
      But now DPH is built with stage2, so Haddock can get to work too
      This patch adds the missing dependency (thanks to Simon M)
    • simonpj@microsoft.com's avatar
      Fix Trac #3259: expose 'lazy' only after generating interface files · 0abcc755
      simonpj@microsoft.com authored
      This patch fixes an insidious and long-standing bug in the way that
      parallelism is handled in GHC.  See Note [lazyId magic] in MkId.
      Here's the diagnosis, copied from the Trac ticket.  par is defined 
      in GHC.Conc thus:
          {-# INLINE par  #-}
          par :: a -> b -> b
          par  x y = case (par# x) of { _ -> lazy y }
          -- The reason for the strange "lazy" call is that it fools the
          -- compiler into thinking that pseq and par are non-strict in
          -- their second argument (even if it inlines pseq/par at the call
          -- site).  If it thinks par is strict in "y", then it often
          -- evaluates "y" before "x", which is totally wrong.
      The function lazy is the identity function, but it is inlined only
      after strictness analysis, and (via some magic) pretends to be
      lazy. Hence par pretends to be lazy too.
      The trouble is that both par and lazy are inlined into your definition
      of parallelise, so that the unfolding for parallelise (exposed in
      Parallelise.hi) does not use lazy at all. Then when compiling Main,
      parallelise is in turn inlined (before strictness analysis), and so
      the strictness analyser sees too much.
      This was all sloppy thinking on my part. Inlining lazy after
      strictness analysis works fine for the current module, but not for
      importing modules.
      The fix implemented by this patch is to inline 'lazy' in CorePrep,
      not in WorkWrap. That way interface files never see the inlined version.
      The downside is that a little less optimisation may happen on programs
      that use 'lazy'.  And you'll only see this in the results -ddump-prep
      not in -ddump-simpl.  So KEEP AN EYE OUT (Simon and Satnam especially).
      Still, it should work properly now.  Certainly fixes #3259.
  2. 28 May, 2009 21 commits
  3. 27 May, 2009 1 commit
  4. 26 May, 2009 1 commit
  5. 19 May, 2009 2 commits
  6. 18 May, 2009 1 commit
    • Ben.Lippmeier@anu.edu.au's avatar
      Split Reg into vreg/hreg and add register pairs · f9288086
      Ben.Lippmeier@anu.edu.au authored
       * The old Reg type is now split into VirtualReg and RealReg.
       * For the graph coloring allocator, the type of the register graph
         is now (Graph VirtualReg RegClass RealReg), which shows that it colors
         in nodes representing virtual regs with colors representing real regs.
         (as was intended)  
       * RealReg contains two contructors, RealRegSingle and RealRegPair,
         where RealRegPair is used to represent a SPARC double reg 
         constructed from two single precision FP regs. 
       * On SPARC we can now allocate double regs into an arbitrary register
         pair, instead of reserving some reg ranges to only hold float/double values. 
  7. 21 Apr, 2009 1 commit
  8. 27 May, 2009 5 commits
    • simonpj@microsoft.com's avatar
      Fix Trac #3221: renamer warnings for deriving clauses · 685f6314
      simonpj@microsoft.com authored
      This patch arranges to gather the variables used by 'deriving' clauses,
      so that unused bindings are correctly reported.
    • simonpj@microsoft.com's avatar
      Template Haskell: allow type splices · 389cca21
      simonpj@microsoft.com authored
      At last!  Trac #1476 and #3177
      This patch extends Template Haskell by allowing splices in
      types.  For example
        f :: Int -> $(burble 3)
      A type splice should work anywhere a type is expected.  This feature
      has been long requested, and quite a while ago I'd re-engineered the
      type checker to make it easier, but had never got around to finishing
      the job.  With luck, this does it.
      There's a ToDo in the HsSpliceTy case of RnTypes.rnHsType, where I
      am not dealing properly with the used variables; but that's awaiting
      the refactoring of the way we report unused names.
    • simonpj@microsoft.com's avatar
      Template Haskell: improve lifting for strings · 97a8fe87
      simonpj@microsoft.com authored
      When you have a (\s::String -> ....[| s |]....), the string 
      's' is lifted.  We used to get a chain of single-character 
      Cons nodes, correct but lots and lots of code.  
      This patch arranges to optimise that to a string literal. It does
      so in two places:
        a) In TcExpr, if we know that s::String, we generate liftString directly
        b) In DsMeta, if we find a list of character literals, we convert to
           a string.  This catches a few cases that (a) does not
      There an accompanying  patch in the template-haskell package, 
      adding Language.Haskell.TH.Syntax.liftString
    • simonpj@microsoft.com's avatar
    • simonpj@microsoft.com's avatar
      Comments about wiredInIds · e598b8f9
      simonpj@microsoft.com authored
  9. 26 May, 2009 4 commits
  10. 25 May, 2009 1 commit
  11. 24 May, 2009 1 commit