10 years agoSPARC NCG: Also do misaligned reads [Wed, 21 Jan 2009 23:24:23 +0000 (23:24 +0000)] 
SPARC NCG: Also do misaligned reads

10 years agoWhen converting TH syntax to GHC syntax, need to put sections in parentheses
Ian Lynagh [Wed, 21 Jan 2009 14:17:06 +0000 (14:17 +0000)] 
When converting TH syntax to GHC syntax, need to put sections in parentheses
Fixes trac #2956

10 years agoSPARC NCG: Add a SPARC version of rts_mkInt64 that handles misaligned closure payloads. [Wed, 21 Jan 2009 05:23:34 +0000 (05:23 +0000)] 
SPARC NCG: Add a SPARC version of rts_mkInt64 that handles misaligned closure payloads.

10 years agoSPARC NCG: Reenable out of line 32 bit float ops [Wed, 21 Jan 2009 03:47:16 +0000 (03:47 +0000)] 
SPARC NCG: Reenable out of line 32 bit float ops

10 years agoSPARC NCG: Clean up formatting and add comments in genCCall [Wed, 21 Jan 2009 02:55:49 +0000 (02:55 +0000)] 
SPARC NCG: Clean up formatting and add comments in genCCall

10 years agoSPARC NCG: Fix format problem when converting float to int [Wed, 21 Jan 2009 01:26:24 +0000 (01:26 +0000)] 
SPARC NCG: Fix format problem when converting float to int

10 years agoSPARC NCG: fill branch delay slot after tabled jump (doh!) [Wed, 21 Jan 2009 00:37:29 +0000 (00:37 +0000)] 
SPARC NCG: fill branch delay slot after tabled jump (doh!)

10 years agoSPARC NCG: Add tabled switch [Tue, 20 Jan 2009 21:49:14 +0000 (21:49 +0000)] 
SPARC NCG: Add tabled switch

10 years agoSPARC NCG: Fix 64bit integers returned from ccalls [Tue, 20 Jan 2009 09:06:17 +0000 (09:06 +0000)] 
SPARC NCG: Fix 64bit integers returned from ccalls

10 years ago#2875: Correct SYB's representation of Char
'Jose Pedro Magalhaes [Mon, 19 Jan 2009 11:23:21 +0000 (11:23 +0000)] 
#2875: Correct SYB's representation of Char

10 years agoFix #2759: add ability to serialize Rational
'Jose Pedro Magalhaes [Tue, 9 Dec 2008 12:55:51 +0000 (12:55 +0000)] 
Fix #2759: add ability to serialize Rational

10 years agoSPARC NCG: Fix warnings [Tue, 20 Jan 2009 07:51:00 +0000 (07:51 +0000)] 
SPARC NCG: Fix warnings

10 years agoSPARC NCG: Remove a comment that was confusing haddock [Fri, 16 Jan 2009 01:18:53 +0000 (01:18 +0000)] 
SPARC NCG: Remove a comment that was confusing haddock

10 years agoSPARC NCG: ppr 64 bit store sizes [Tue, 20 Jan 2009 07:40:00 +0000 (07:40 +0000)] 
SPARC NCG: ppr 64 bit store sizes

10 years agoSPARC NCG: Fix generation of 64 bit ops on 32 bit sparc [Tue, 20 Jan 2009 07:15:36 +0000 (07:15 +0000)] 
SPARC NCG: Fix generation of 64 bit ops on 32 bit sparc

10 years agoSPARC NCG: Add support for hardware divide [Tue, 20 Jan 2009 05:21:13 +0000 (05:21 +0000)] 
SPARC NCG: Add support for hardware divide

10 years agoSPARC NCG: Redo code for integer sign extension [Thu, 15 Jan 2009 08:41:05 +0000 (08:41 +0000)] 
SPARC NCG: Redo code for integer sign extension

10 years agoSPARC NCG: Fix signed/unsigned operand format bug [Thu, 15 Jan 2009 08:00:04 +0000 (08:00 +0000)] 
SPARC NCG: Fix signed/unsigned operand format bug

10 years agoMore fixes to the SPARC native code generator [Thu, 15 Jan 2009 05:57:27 +0000 (05:57 +0000)] 
More fixes to the SPARC native code generator

 * Fix loading of 64bit floats
 * Put SRT and other read only static data in the .text segment

10 years agoStart fixing the SPARC native code generator [Wed, 14 Jan 2009 05:44:16 +0000 (05:44 +0000)] 
Start fixing the SPARC native code generator

  * Use BlockIds in branch instructions instead of Imms.
  * Assign FP values returned from C calls to the right regs
  * Fix loading of F32s
  * Add a SPARC version of the FreeRegs map to the linear allcator.

10 years agoFix some holes in the SPARC native code generator. [Mon, 12 Jan 2009 06:33:10 +0000 (06:33 +0000)] 
Fix some holes in the SPARC native code generator.

This makes about half the tests in codeGen/should_run work.

10 years agoUntag closure pointers before trying to print them. [Mon, 12 Jan 2009 05:34:21 +0000 (05:34 +0000)] 
Untag closure pointers before trying to print them.

In RTS tracing code, need to untag the pointer before trying
to load the info table in printClosure()

10 years agoAdd missing documention of -Da DEBUG: apply flag to RTS help. [Mon, 12 Jan 2009 00:56:25 +0000 (00:56 +0000)] 
Add missing documention of -Da DEBUG: apply flag to RTS help.

10 years agoBetter panic message in RegAllocLinear [Sat, 10 Jan 2009 02:58:02 +0000 (02:58 +0000)] 
Better panic message in RegAllocLinear

10 years agoMake the SPARC NCG compile again - it's still broken though. [Sat, 10 Jan 2009 01:44:18 +0000 (01:44 +0000)] 
Make the SPARC NCG compile again - it's still broken though.

10 years agoEnable the native code generator for SPARC [Mon, 5 Jan 2009 07:04:29 +0000 (07:04 +0000)] 
Enable the native code generator for SPARC

10 years agoAlways use PTHREAD_MUTEX_ERRORCHECK to create mutexes when -DDEBUG
Ian Lynagh [Sun, 18 Jan 2009 19:33:28 +0000 (19:33 +0000)] 
Always use PTHREAD_MUTEX_ERRORCHECK to create mutexes when -DDEBUG
anyway, so there's no need to special-case it.

10 years agoUse error-checking mutexes on all platforms when DEBUG is on
Ian Lynagh [Sat, 17 Jan 2009 21:59:31 +0000 (21:59 +0000)] 
Use error-checking mutexes on all platforms when DEBUG is on
Otherwise ASSERT_LOCK_HELD will cause deadlocks

10 years agoReinstate: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Ian Lynagh [Sat, 17 Jan 2009 20:09:55 +0000 (20:09 +0000)] 
Reinstate: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Sun Jan  4 19:24:43 GMT 2009  Matthias Kilian <>
    Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG
    is defined. The return values of those functions are well defined
    and should be supported on all operation systems with pthreads. The
    checks are cheap enough to do them even in the default build (without

    While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let
    the debugBelch part enabled with -DLOCK_DEBUG work independently
    of -DDEBUG.

10 years agoInitialise and deinitialise the file_lock_mutex
Ian Lynagh [Sat, 17 Jan 2009 02:39:47 +0000 (02:39 +0000)] 
Initialise and deinitialise the file_lock_mutex

10 years agoCreate package.conf when installing a bindist
Ian Lynagh [Sun, 18 Jan 2009 11:06:54 +0000 (11:06 +0000)] 
Create package.conf when installing a bindist

10 years agovalidate fix on 32-bit
Simon Marlow [Wed, 14 Jan 2009 16:28:34 +0000 (16:28 +0000)] 
validate fix on 32-bit

10 years agofix validate on Windows
Simon Marlow [Wed, 14 Jan 2009 15:58:42 +0000 (15:58 +0000)] 
fix validate on Windows

10 years agoUNDO: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Simon Marlow [Fri, 16 Jan 2009 11:43:39 +0000 (11:43 +0000)] 
UNDO: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
This patch caused problems on Mac OS X, undoing until we can do it better.

rolling back:

Sun Jan  4 19:24:43 GMT 2009  Matthias Kilian <>
  * Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().

  Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG
  is defined. The return values of those functions are well defined
  and should be supported on all operation systems with pthreads. The
  checks are cheap enough to do them even in the default build (without

  While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let
  the debugBelch part enabled with -DLOCK_DEBUG work independently
  of -DDEBUG.

    M ./includes/OSThreads.h -30 +10

10 years agoUpdate config.guess, config.sub and from automake-1.10.2
Simon Marlow [Fri, 16 Jan 2009 09:53:11 +0000 (09:53 +0000)] 
Update config.guess, config.sub and from automake-1.10.2
In particular, config.guess should now know about x86_64-pc-solaris2

10 years agoMore useful error message when a package .hi file cannot be found:
Simon Marlow [Thu, 15 Jan 2009 12:25:24 +0000 (12:25 +0000)] 
More useful error message when a package .hi file cannot be found:

> import System.Process
Could not find module `System.Process':
  There are files missing in the process- package,
  try running 'ghc-pkg check'.
  Use -v to see a list of the files searched for.

10 years agosoup-up "ghc-pkg check"
Simon Marlow [Thu, 15 Jan 2009 12:21:43 +0000 (12:21 +0000)] 
soup-up "ghc-pkg check"

We now look for missing files (including .hi files), and report all
the packages that are transitively broken.

$ ghc-pkg check
There are problems in package syb-
  dependency foo- doesn't exist
There are problems in package process-
  file System/Process.hi is missing

The following packages are broken, either because they have a problem
listed above, or because they depend on a broken package.

10 years agodocument -feager-blackholing
Simon Marlow [Thu, 15 Jan 2009 09:39:22 +0000 (09:39 +0000)] 
document -feager-blackholing

10 years agoExternal Core: re-add code I removed mistakenly in last commit
Tim Chevalier [Thu, 15 Jan 2009 00:26:12 +0000 (00:26 +0000)] 
External Core: re-add code I removed mistakenly in last commit

10 years agoExternal Core lib: lots of cleanup
Tim Chevalier [Wed, 14 Jan 2009 22:44:28 +0000 (22:44 +0000)] 
External Core lib: lots of cleanup

- Factor out code for applying newtypes from Check into CoreUtils
- Use this code in Prep, which allowed for some simplification
- Change Merge and ElimDeadCode to not flatten top-level binds
- Add a flag for elimDeadCode to tell it whether to keep
exported bindings or not.
- Other things.

10 years agoExternal Core: print out more precise dependency info
Tim Chevalier [Wed, 14 Jan 2009 22:17:34 +0000 (22:17 +0000)] 
External Core: print out more precise dependency info

Print out the same recursive/non-recursive binding groups
that existed in internal Core in an External Core file,
rather than dumping everything into one big recursive group.

10 years agoFix "make install": Put "[]" in the install package.conf
Ian Lynagh [Wed, 14 Jan 2009 20:59:45 +0000 (20:59 +0000)] 
Fix "make install": Put "[]" in the install package.conf

10 years agoRemove redundant import; spotted by Thorkil Naur
Ian Lynagh [Wed, 14 Jan 2009 18:19:37 +0000 (18:19 +0000)] 
Remove redundant import; spotted by Thorkil Naur

10 years agoRemove a redundant import
Ian Lynagh [Wed, 14 Jan 2009 18:12:12 +0000 (18:12 +0000)] 
Remove a redundant import

10 years agoDetect when a C finalizer calls back to Haskell
Simon Marlow [Wed, 14 Jan 2009 12:15:26 +0000 (12:15 +0000)] 
Detect when a C finalizer calls back to Haskell
This is illegal now, after the fix for #1364, but it turns out that
the existing check for dodgy callbacks doesn't catch finalizers
calling back, so we need another test.  This will be particularly
important for 6.10.2, because the behaviour has changed.

10 years agoFix Trac #2931 [Tue, 13 Jan 2009 17:09:48 +0000 (17:09 +0000)] 
Fix Trac #2931

Fix the lexical analyser when it encounters 'x<EOF> and Template
Haskell is on.

10 years agoRewrite CorePrep and improve eta expansion [Tue, 13 Jan 2009 16:49:53 +0000 (16:49 +0000)] 
Rewrite CorePrep and improve eta expansion

This patch does two main things

a) Rewrite most of CorePrep to be much easier to understand (I hope!).
   The invariants established by CorePrep are now written out, and
   the code is more perspicuous.  It is surpringly hard to get right,
   and the old code had become quite incomprehensible.

b) Rewrite the eta-expander so that it does a bit of simplifying
   on-the-fly, and thereby guarantees to maintain the CorePrep
   invariants.  This make it much easier to use from CorePrep, and
   is a generally good thing anyway.

A couple of pieces of re-structuring:

*  I moved the eta-expander and arity analysis stuff into a new
   module coreSyn/CoreArity.

   Max will find that the type CoreArity.EtaInfo looks strangely

*  I moved a bunch of comments from Simplify to OccurAnal; that's
   why it looks as though there's a lot of lines changed in those

On the way I fixed various things

  - Function arguments are eta expanded
       f (map g)  ===>  let s = \x. map g x in f s

  - Trac #2368

The result is a modest performance gain, I think mainly due
to the first of these changes:

        Program           Size    Allocs   Runtime   Elapsed
            Min          -1.0%    -17.4%    -19.1%    -46.4%
            Max          +0.3%     +0.5%     +5.4%    +53.8%
 Geometric Mean          -0.1%     -0.3%     -7.0%    -10.2%

10 years agoRename isIdentityCoercion to isIdentityCoI; add Coercion.isIdentityCoercion [Tue, 13 Jan 2009 16:48:04 +0000 (16:48 +0000)] 
Rename isIdentityCoercion to isIdentityCoI; add Coercion.isIdentityCoercion

10 years agoSpelling in comment only [Tue, 13 Jan 2009 16:46:24 +0000 (16:46 +0000)] 
Spelling in comment only

10 years agoMake the ASSERT more informative [Tue, 13 Jan 2009 16:41:33 +0000 (16:41 +0000)] 
Make the ASSERT more informative

10 years agoExport mapOL from OrdList [Tue, 13 Jan 2009 16:40:51 +0000 (16:40 +0000)] 
Export mapOL from OrdList

10 years agoImprove error messages slightly [Tue, 13 Jan 2009 16:40:20 +0000 (16:40 +0000)] 
Improve error messages slightly

10 years agoDo not do SpecConstr on functions that unconditionally diverge [Tue, 13 Jan 2009 16:29:18 +0000 (16:29 +0000)] 
Do not do SpecConstr on functions that unconditionally diverge

There is no point in specialising a function that is guaranteed to
diverge, and doing so screwed up arity stuff.

See Note [Do not specialise diverging functions].

10 years agoMake -XTypeFamilies imply -XRelaxedPolyRec (Trac #2944) [Tue, 13 Jan 2009 16:27:16 +0000 (16:27 +0000)] 
Make -XTypeFamilies imply -XRelaxedPolyRec (Trac #2944)

10 years agoFix Trac #2937: deserialising assoicated type definitions [Tue, 13 Jan 2009 15:32:17 +0000 (15:32 +0000)] 
Fix Trac #2937: deserialising assoicated type definitions

The deserialiser (TcIface) for associated type definitions wasn't
taking into account that the class decl brings into scope some
type variables that scope over the data/type family declaration.

Easy to fix: the new function is TcIface.bindIfaceTyVars_AT

10 years agoAlways check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Matthias Kilian [Sun, 4 Jan 2009 19:24:43 +0000 (19:24 +0000)] 
Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().

Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG
is defined. The return values of those functions are well defined
and should be supported on all operation systems with pthreads. The
checks are cheap enough to do them even in the default build (without

While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let
the debugBelch part enabled with -DLOCK_DEBUG work independently

10 years agosanity checking fixes
Simon Marlow [Mon, 12 Jan 2009 12:10:42 +0000 (12:10 +0000)] 
sanity checking fixes

10 years agoKeep the remembered sets local to each thread during parallel GC
Simon Marlow [Mon, 12 Jan 2009 12:10:24 +0000 (12:10 +0000)] 
Keep the remembered sets local to each thread during parallel GC
This turns out to be quite vital for parallel programs:

  - The way we discover which threads to traverse is by finding
    dirty threads via the remembered sets (aka mutable lists).

  - A dirty thread will be on the remembered set of the capability
    that was running it, and we really want to traverse that thread's
    stack using the GC thread for the capability, because it is in
    that CPU's cache.  If we get this wrong, we get penalised badly by
    the memory system.

Previously we had per-capability mutable lists but they were
aggregated before GC and traversed by just one of the GC threads.
This resulted in very poor performance particularly for parallel
programs with deep stacks.

Now we keep per-capability remembered sets throughout GC, which also
removes a lock (recordMutableGen_sync).

10 years agoindicate which TSOs are dirty in the printAllThreads() output
Simon Marlow [Wed, 7 Jan 2009 15:14:49 +0000 (15:14 +0000)] 
indicate which TSOs are dirty in the printAllThreads() output

10 years agoFix Trac #2584: Pretty printing of types with HsDocTy
David Waern [Fri, 9 Jan 2009 19:17:13 +0000 (19:17 +0000)] 
Fix Trac #2584: Pretty printing of types with HsDocTy

The pretty printing clause for HsDocTy was wrong, causing brackets to be left
out. We now print Haddock comments on types as if they were postfix type

10 years agoAdd "Word size" to the +RTS --info output
Ian Lynagh [Fri, 9 Jan 2009 16:04:54 +0000 (16:04 +0000)] 
Add "Word size" to the +RTS --info output

10 years agoCheck that make supports eval
Ian Lynagh [Fri, 9 Jan 2009 15:10:06 +0000 (15:10 +0000)] 
Check that make supports eval

10 years agoAdd some more fields to +RTS --info
Ian Lynagh [Thu, 8 Jan 2009 13:11:01 +0000 (13:11 +0000)] 
Add some more fields to +RTS --info

10 years agoFIX BUILD on Windows (fix for #2873 broke it)
Simon Marlow [Fri, 9 Jan 2009 09:06:58 +0000 (09:06 +0000)] 
FIX BUILD on Windows (fix for #2873 broke it)

10 years agowhen calling mmap() with MAP_ANON, the fd argument should be -1
Simon Marlow [Thu, 8 Jan 2009 15:53:41 +0000 (15:53 +0000)] 
when calling mmap() with MAP_ANON, the fd argument should be -1
might fix #2925

10 years agoFix Trac #2914: record wild cards and assoicated types [Thu, 8 Jan 2009 12:41:18 +0000 (12:41 +0000)] 
Fix Trac #2914: record wild cards and assoicated types

10 years agoFix #2873: should fail if a package DB desn't exist
Simon Marlow [Thu, 8 Jan 2009 09:56:28 +0000 (09:56 +0000)] 
Fix #2873: should fail if a package DB desn't exist
We allowed non-existence before because the user DB is allowed to not
exist, so now we have an explicit exception for that case.

10 years agoClose the races between throwTo and thread completion
Simon Marlow [Wed, 7 Jan 2009 14:05:07 +0000 (14:05 +0000)] 
Close the races between throwTo and thread completion
Any threads we missed were being caught by the GC (possibly the idle
GC if the system was otherwise inactive), but that's not ideal.  The
fix (from Bertram Felgenhauer) is to use lockTSO to synchronise,
imposing an unconditional lockTSO on thread exit.  I couldn't measure
any performance overhead from doing this, so it seems reasonable.

10 years agoadd comment
Simon Marlow [Wed, 7 Jan 2009 12:11:42 +0000 (12:11 +0000)] 
add comment

10 years agoFix two more locking issues in throwTo()
Bertram Felgenhauer [Wed, 7 Jan 2009 12:08:08 +0000 (12:08 +0000)] 
Fix two more locking issues in throwTo()

10 years agomaybePerformBlockedException() should handle ThreadComplete/ThreadKilled
Simon Marlow [Wed, 7 Jan 2009 12:07:34 +0000 (12:07 +0000)] 
maybePerformBlockedException() should handle ThreadComplete/ThreadKilled
Part of the fix for #2910

10 years agofix a race where the timer signal could remain turned off, leading to deadlock
Simon Marlow [Wed, 7 Jan 2009 12:06:52 +0000 (12:06 +0000)] 
fix a race where the timer signal could remain turned off, leading to deadlock

10 years agoputMVar and takeMVar: add write_barrier() to fix race with throwTo
Simon Marlow [Wed, 7 Jan 2009 11:20:26 +0000 (11:20 +0000)] 
putMVar and takeMVar: add write_barrier() to fix race with throwTo

10 years agocruft removal
Simon Marlow [Tue, 6 Jan 2009 15:44:08 +0000 (15:44 +0000)] 
cruft removal

10 years agowake up the blocked exception queue on ThreadFinished; fixes #2910
Simon Marlow [Tue, 6 Jan 2009 15:32:54 +0000 (15:32 +0000)] 
wake up the blocked exception queue on ThreadFinished; fixes #2910

10 years agobump GHC's max stack size to 512M
Simon Marlow [Fri, 19 Dec 2008 11:22:11 +0000 (11:22 +0000)] 
bump GHC's max stack size to 512M
To accomodate compiling very long static lists (#2002)

10 years agoext-core: change .cabal file so we can build with either GHC 6.8 or 6.10
Tim Chevalier [Mon, 5 Jan 2009 19:27:57 +0000 (19:27 +0000)] 
ext-core: change .cabal file so we can build with either GHC 6.8 or 6.10

10 years agoext-core: fix some Prep bugs
Tim Chevalier [Mon, 5 Jan 2009 19:27:34 +0000 (19:27 +0000)] 
ext-core: fix some Prep bugs

10 years agoext-core: use shorter names when combining modules
Tim Chevalier [Mon, 5 Jan 2009 19:26:45 +0000 (19:26 +0000)] 
ext-core: use shorter names when combining modules

10 years agoext-core: twiddle primitive things
Tim Chevalier [Mon, 5 Jan 2009 19:24:34 +0000 (19:24 +0000)] 
ext-core: twiddle primitive things

10 years agoDon't pin a register for gc_thread on SPARC. [Mon, 5 Jan 2009 03:07:58 +0000 (03:07 +0000)] 
Don't pin a register for gc_thread on SPARC.

This makes the build work again.

10 years agoRequire HsColour by default
Ian Lynagh [Sun, 4 Jan 2009 21:46:47 +0000 (21:46 +0000)] 
Require HsColour by default
This should stop us ending up without HsColour'ed sources on some

We also now tell Cabal where to find HsColour, rather than it finding
it itself.

10 years agoFix build
Ian Lynagh [Sun, 4 Jan 2009 21:18:10 +0000 (21:18 +0000)] 
Fix build

10 years agoAdd GHCi completions to :set and :show
Ori Avtalion [Tue, 9 Dec 2008 19:42:10 +0000 (19:42 +0000)] 
Add GHCi completions to :set and :show

10 years agoFix sync-all: Check for --complete/partial before --<anything>
Ian Lynagh [Sun, 4 Jan 2009 18:46:52 +0000 (18:46 +0000)] 
Fix sync-all: Check for --complete/partial before --<anything>
Patch from megacz in trac #2857

10 years agoRemove time from extralibs at request of maintainer
Ian Lynagh [Sun, 4 Jan 2009 11:55:09 +0000 (11:55 +0000)] 
Remove time from extralibs at request of maintainer

10 years agovalidate fix: InteractiveEval no longer needs to import IdInfo
Ian Lynagh [Sat, 3 Jan 2009 15:47:54 +0000 (15:47 +0000)] 
validate fix: InteractiveEval no longer needs to import  IdInfo

10 years agoFix validate: strs is no longer used in IfaceSyn
Ian Lynagh [Sat, 3 Jan 2009 15:36:24 +0000 (15:36 +0000)] 
Fix validate: strs is no longer used in IfaceSyn

10 years agoRemove trailing whitespace from HaddockUtils
Ian Lynagh [Mon, 29 Dec 2008 19:17:27 +0000 (19:17 +0000)] 
Remove trailing whitespace from HaddockUtils

10 years agoFix warnings in HaddockUtils
Ian Lynagh [Mon, 29 Dec 2008 19:16:57 +0000 (19:16 +0000)] 
Fix warnings in HaddockUtils

10 years agoRemove dead code from HaddockUtils
Ian Lynagh [Mon, 29 Dec 2008 19:14:30 +0000 (19:14 +0000)] 
Remove dead code from HaddockUtils

10 years agoMake record selectors into ordinary functions [Fri, 2 Jan 2009 14:28:51 +0000 (14:28 +0000)] 
Make record selectors into ordinary functions

This biggish patch addresses Trac #2670.  The main effect is to make
record selectors into ordinary functions, whose unfoldings appear in
interface files, in contrast to their previous existence as magic
"implicit Ids".  This means that the usual machinery of optimisation,
analysis, and inlining applies to them, which was failing before when
the selector was somewhat complicated.  (Which it can be when
strictness annotations, unboxing annotations, and GADTs are involved.)

The change involves the following points

* Changes in Var.lhs to the representation of Var.  Now a LocalId can
  have an IdDetails as well as a GlobalId.  In particular, the
  information that an Id is a record selector is kept in the
  IdDetails.  While compiling the current module, the record selector
  *must* be a LocalId, so that it participates properly in compilation
  (free variables etc).

  This led me to change the (hidden) representation of Var, so that there
  is now only one constructor for Id, not two.

* The IdDetails is persisted into interface files, so that an
  importing module can see which Ids are records selectors.

* In TcTyClDecls, we generate the record-selector bindings in renamed,
  but not typechecked form.  In this way, we can get the typechecker
  to add all the types and so on, which is jolly helpful especially
  when GADTs or type families are involved.  Just like derived
  instance declarations.

  This is the big new chunk of 180 lines of code (much of which is
  commentary).  A call to the same function, mkAuxBinds, is needed in
  TcInstDcls for associated types.

* The typechecker therefore has to pin the correct IdDetails on to
  the record selector, when it typechecks it.  There was a neat way
  to do this, by adding a new sort of signature to HsBinds.Sig, namely
  IdSig.  This contains an Id (with the correct Name, Type, and IdDetails);
  the type checker uses it as the binder for the final binding.  This
  worked out rather easily.

* Record selectors are no longer "implicit ids", which entails changes to
  (These three functions must agree.)

* MkId.mkRecordSelectorId is deleted entirely, some 300+ lines (incl
  comments) of very error prone code.  Happy days.

* A TyCon no longer contains the list of record selectors:
  algTcSelIds is gone

The renamer is unaffected, including the way that import and export of
record selectors is handled.

Other small things

* IfaceSyn.ifaceDeclSubBndrs had a fragile test for whether a data
  constructor had a wrapper.  I've replaced that with an explicit flag
  in the interface file. More robust I hope.

* I renamed isIdVar to isId, which touched a few otherwise-unrelated files.

10 years agoFix Trac #2721: reject newtype deriving if the class has associated types [Wed, 31 Dec 2008 16:43:00 +0000 (16:43 +0000)] 
Fix Trac #2721: reject newtype deriving if the class has associated types

10 years ago-XImpredicativeTypes implies -XRankNTypes, and improve error msg in TcMType [Wed, 31 Dec 2008 15:25:17 +0000 (15:25 +0000)] 
-XImpredicativeTypes implies -XRankNTypes, and improve error msg in TcMType

If you are going for impredicative types you almost certainly want RankN
too. The change to TcMType improves the error when you say
     T (forall a. blah)
where T is a type synonym.  This doesn't necessarily need impredicativity,
if you have LiberalTypeSynonyms.

10 years agoFix Trac #2856: make deriving work for type families [Wed, 31 Dec 2008 14:41:51 +0000 (14:41 +0000)] 
Fix Trac #2856: make deriving work for type families

Darn, but TcDeriv is complicated, when type families get in on
the act!  This patch makes GeneralisedNewtypeDeriving work
properly for type families.  I think.

In order to do so, I found that GeneralisedNewtypeDeriving can
work for recursive newtypes too -- and since families are conservatively
marked recursive, that's a crucial part of the fix, and useful too.
See Note [Recursive newtypes] in TcDeriv.

10 years agoWhite space and spelling in comments [Wed, 31 Dec 2008 14:41:31 +0000 (14:41 +0000)] 
White space and spelling in comments

10 years agoRemove -XImpredicativeTypes from -fglasgow-exts [Wed, 31 Dec 2008 14:40:06 +0000 (14:40 +0000)] 
Remove -XImpredicativeTypes from -fglasgow-exts

See Trac #2846: impredicative types are far from stable, so
-fglasgow-exts should not imply them.  Maybe we should merge
this into 6.10?

10 years agoImprove error reporting for 'deriving' [Wed, 31 Dec 2008 14:35:21 +0000 (14:35 +0000)] 
Improve error reporting for 'deriving'

a) Improve the extra suggested fix when there's a "no instance"
   error in a deriving clause.

b) Improve error location recording in tcInstDecl2

Many of the changes in tcInstDecl2 are simple reformatting.

10 years agoImprove error message in deriving (fix Trac #2851) [Tue, 30 Dec 2008 16:59:06 +0000 (16:59 +0000)] 
Improve error message in deriving (fix Trac #2851)

10 years agoAvoid nasty name clash with associated data types (fixes Trac #2888) [Tue, 30 Dec 2008 16:44:32 +0000 (16:44 +0000)] 
Avoid nasty name clash with associated data types (fixes Trac #2888)

The main bug was in TcHsType; see Note [Avoid name clashes for
associated data types].  However I did a bit of re-factoring while
I was abouut it.

I'm still a but unhappy with the use of TyCon.setTyConArgPoss; it'd
be better to construct the TyCon correctly in the first place.  But
that means passing an extra parameter to tcTyDecl1... maybe we should
do this.