Sun Jul  2 21:29:11 EDT 2006  Alec Berryman <[EMAIL PROTECTED]>
  * Remove bashisms from darcs-all
  
  darcs-all may now be run with any POSIX-compatible /bin/sh.
New patches:

[Remove bashisms from darcs-all
Alec Berryman <[EMAIL PROTECTED]>**20060703012911
 
 darcs-all may now be run with any POSIX-compatible /bin/sh.
] {
hunk ./darcs-all 12
-function message()
+message()
hunk ./darcs-all 19
-function darcsall()
+darcsall()
hunk ./darcs-all 41
-function darcsget()
+darcsget()
}

Context:

[x86-64: fix a problem exposed by negative offsets in vector tables
Simon Marlow <[EMAIL PROTECTED]>**20060629140608
 static relative offsets (eg .long l1-l2) are restricted to 32 bits on
 x86-64 due to lack of support in the linker.  The codegen, NCG and
 runtime work around this, using 32-bit offsets instead of 64.
 However, we were missing a workaround for vector tables, and it
 happened to work by accident because the offsets were always positive
 and resolved by the assembler.  The bug was exposed by using the NCG
 to compile the RTS, where the offsets became negative, again by
 accident.
] 
[No longer force -fvia-C for the RTS, it can now be compiled with the NCG
Simon Marlow <[EMAIL PROTECTED]>**20060629135836] 
[Replace inline C functions with C-- macros in .cmm code
Simon Marlow <[EMAIL PROTECTED]>**20060629134726
 So that we can build the RTS with the NCG.
] 
[remove conditionals from definition of StgRegTable
Simon Marlow <[EMAIL PROTECTED]>**20060629134405
 so that we can calculate deterministic offsets to some of the fields
 of Capability.
] 
[mpz_foo() functions are really called __gmpz_foo() in GMP
Simon Marlow <[EMAIL PROTECTED]>**20060629122217
 gmp.h #defines mpz_foo to __gmpz_foo, so the real ABI is __gmpz_foo,
 so that is what we must invoke in order to be portable here.
 Similarly for mpn --> __gmpn.
] 
[use the new "prim %write_barrier()" in .cmm instead of calls to wb()
Simon Marlow <[EMAIL PROTECTED]>**20060629120526] 
[fix some problems with the fixup block code
Simon Marlow <[EMAIL PROTECTED]>**20060629120210
 We weren't handling InBoth properly.  InBoth needs to be expanded to
 appropriate InReg/InMem locations *before* building the interference
 graph, otherwise an InBoth will not be seen to conflict with other
 InReg/InMem locations.
] 
[small optimisation: eliminate more register-to-register moves
Simon Marlow <[EMAIL PROTECTED]>**20060629120029] 
[new syntax: "prim %OP (args)"  for using CallishMachOps in .cmm
Simon Marlow <[EMAIL PROTECTED]>**20060629115949
 
 
] 
[add MO_WriteBarrier to CallishMachOps
Simon Marlow <[EMAIL PROTECTED]>**20060629115837
 This will let us express write barriers in C--
] 
[Use -fno-strict-aliasing for *all* C files in the runtime
Simon Marlow <[EMAIL PROTECTED]>**20060629082902
 as a precautionary measure.  It is definitely required for GC.c,
 but it may well become necessary for other files in the future due to
 our (mis-)use of the C "type system".
] 
[the unlifted kind
Simon Marlow <[EMAIL PROTECTED]>**20060623152626] 
[fix a lint-o
Simon Marlow <[EMAIL PROTECTED]>**20060620151901] 
[fix sloppy conditionals
Simon Marlow <[EMAIL PROTECTED]>**20060620151758] 
[fix sloppy conditionals
Simon Marlow <[EMAIL PROTECTED]>**20060620151039] 
[fix a few sloppy conditionals caught by new test in CmmLint
Simon Marlow <[EMAIL PROTECTED]>**20060620150618] 
[flattenCgStmts: fix a case of empty code blocks being generated
Simon Marlow <[EMAIL PROTECTED]>**20060620150520] 
[improve a panic message
Simon Marlow <[EMAIL PROTECTED]>**20060620141219] 
[check that the argument to CmmCondBranch is really a conditional
Simon Marlow <[EMAIL PROTECTED]>**20060620141204] 
[Generate a new unique for each label
Simon Marlow <[EMAIL PROTECTED]>**20060620140106] 
[Remove long-redundant FieldLabel.lhs
[EMAIL PROTECTED] 
[Add comments to SpecConstr
[EMAIL PROTECTED] 
[fix up slop-overwriting for THUNK_SELECTORS in DEBUG mode
Simon Marlow <[EMAIL PROTECTED]>**20060627123951] 
[Make SpecConstr work better for nested functions
[EMAIL PROTECTED]
 
 In SpecConstr.scBind, we should pass the optimised body (body') to
 specialise, not the un-optimised one. In this way we'll benefit from
 specialising any nested functions inside body.
 
 Discovered by Roman.
 
] 
[More SpecConstr tuning
[EMAIL PROTECTED]
 
 For some reason, SpecConstr wasn't taking account of let-bound constructors:
 	let v = Just 4
 	in ...(f v)...
 
 Now it does.  An easy fix fortunately.
 
] 
[Improve consistency checking for derived instances
[EMAIL PROTECTED]
 
 This patch arranges that derived instances use the same instance-decl
 checking code as user-defined instances.  That gives greater consistency
 in error messages.
 
 Furthermore, the error description if this consistency check fails is now
 much more explicit.  For example, drvfail003 now says
      Variable occurs more often in a constraint than in the instance head
        in the constraint: Show (v (v a))
      (Use -fallow-undecidable-instances to permit this)
      In the derived instance
        instance (Show (v (v a))) => Show (Square_ v w a)
 
] 
[Slight improvement in TH error reporting
[EMAIL PROTECTED] 
[Improve location info when typechecking interface fiels
[EMAIL PROTECTED] 
[Fix a bug in the pretty printing of class declarations
[EMAIL PROTECTED] 
[Improve RULE matching a bit more
[EMAIL PROTECTED]
 
 Consider this example (provided by Roman)
 
 	foo :: Int -> Maybe Int -> Int
 	foo 0 (Just n) = n
 	foo m (Just n) = foo (m-n) (Just n)
 
 SpecConstr sees this fragment:
 
 	case w_smT of wild_Xf [Just A] {
 	  Data.Maybe.Nothing -> lvl_smf;
 	  Data.Maybe.Just n_acT [Just S(L)] ->
 	    case n_acT of wild1_ams [Just A] { GHC.Base.I# y_amr [Just L] ->
 	    $wfoo_smW (GHC.Prim.-# ds_Xmb y_amr) wild_Xf
 	    }};
 
 and correctly generates the rule
 
 	RULES: "SC:$wfoo1" [0] __forall {y_amr [Just L] :: GHC.Prim.Int#
 					  sc_snn :: GHC.Prim.Int#}
 	  $wfoo_smW sc_snn (Data.Maybe.Just @ GHC.Base.Int (GHC.Base.I# y_amr))
 	  = $s$wfoo_sno y_amr sc_snn ;]
 
 BUT we must ensure that this rule matches in the original function!
 Note that the call to $wfoo is
 	    $wfoo_smW (GHC.Prim.-# ds_Xmb y_amr) wild_Xf
 
 During matching we expand wild_Xf to (Just n_acT).  But then we must also
 expand n_acT to (I# y_amr).  And we can only do that if we look up n_acT
 in the in-scope set, because in wild_Xf's unfolding it won't have an unfolding
 at all. 
 
 Happily, fixing the bug is easy: add a call to 'lookupRnInScope' in the 
 (Var v2) case of 'match'.
 
] 
[--enable-src-tree-haddock and friends are no longer required
Simon Marlow <[EMAIL PROTECTED]>**20060623113303
 Happy, Alex and Haddock are built separately using Cabal now.
] 
[fix a couple of bugs in markSparkQueue (#799)
Simon Marlow <[EMAIL PROTECTED]>**20060623092044] 
[pull in STABLE(!) tweaks
[EMAIL PROTECTED] 
[fix for when path to GHC contains spaces, from #695
Simon Marlow <[EMAIL PROTECTED]>**20060622131700] 
[Comment only
[EMAIL PROTECTED] 
[Transfer INLINE to specialised functions
[EMAIL PROTECTED]
 
 When the Specialise pass generates a specialised copy of a function,
 it should transfer the INLINE information to the specialised function.
 Otherwise, whether or not the INLNE happens can depend on whether
 specialisation happens, which seems wrong.  See Note [Inline specialisation]
 in Specialise.lhs
 
 Here's the example Roman reported
 
     primWriteMU :: UAE e => MUArr e s -> Int -> e -> ST s ()
     {-# INLINE primWriteMU #-}
     primWriteMU = writeMBU . unMUAPrim
     ------
     
     The problem is that primWriteMU doesn't get inlined *sometimes*, which
     results in code like
     
     case Data.Array.Parallel.Unlifted.Flat.UArr.$sprimWriteMU
 	    @ s11_X1nJ
 	    marr_s25s
 	    (GHC.Base.I# sc_s27F)
 	    GHC.Base.False
 	    new_s_a1Db
 	    of wild3_a1Dd { (# new_s1_X1F9, r_a1Dc #) -> ...
 
 Note the fact that we have a call to the *specialised* $sprimWriteMU.
 
] 
[Arity and eta-expansion tuning
[EMAIL PROTECTED]
 
 Roman found that 
     loop :: STRef s a -> Int -> ST s Int
     loop ref n = case n of
                    0 -> return n
                    n -> loop ref (n-1)
 wasn't eta-expanding nicely, despite the 'state hack'
 (see Id.isStateHackType).  The reason was two-fold:
 
   a) a bug in CoreUtils.arityType (the Var case)
 
   b) the arity of a recursive function was not being
 	exposed in its RHS (see commments with
 	SimplEnv.addLetIdInfo
 
 The commit fixes both.  
 
] 
[documentation for TH w/ profiling
Simon Marlow <[EMAIL PROTECTED]>**20060621112523] 
[Allow Template Haskell to be used with -prof
Simon Marlow <[EMAIL PROTECTED]>**20060621110436
 
 In order for this to work, you need to build the program first in the
 normal way (without -prof), and then again with -prof and a suitable
 -osuf (eg. -osuf p_o).  The compiler will pick up the object files
 from the normal way for running TH expressions, when it sees -prof
 together with -osuf.  If you omit the -osuf, you get an error message:
 
 TH_genEx.hs:12:2:
     Dynamic linking required, but this is a non-standard build (eg. prof).
     You need to build the program twice: once the normal way, and then
     in the desired way using -osuf to set the object file suffix.
 
 If you use -osuf, but haven't built the program the normal way first,
 then you see:
 
 TH_genEx.hs:12:2:
     cannot find normal object file `TH_genExLib.o'
     while linking an interpreted expression
 
 Documentation to follow.
 
 Fixes: #651
] 
[add decl for stg_block_throwto_ret
Simon Marlow <[EMAIL PROTECTED]>**20060620083410] 
[comment out a non-true assertion
Simon Marlow <[EMAIL PROTECTED]>**20060616140750] 
[make compilation a little less noisy
Simon Marlow <[EMAIL PROTECTED]>**20060616140652] 
[allow the max number of workers to scale with +RTS -N
Simon Marlow <[EMAIL PROTECTED]>**20060616140633] 
[fix one-character error in stack check
Simon Marlow <[EMAIL PROTECTED]>**20060616135621] 
[add STM support to the new throwTo mechanism
Simon Marlow <[EMAIL PROTECTED]>**20060616111937] 
[remove duplicate way names (-debug -debug didn't work)
Simon Marlow <[EMAIL PROTECTED]>**20060616110258] 
[Asynchronous exception support for SMP
Simon Marlow <[EMAIL PROTECTED]>**20060616103342
 
 This patch makes throwTo work with -threaded, and also refactors large
 parts of the concurrency support in the RTS to clean things up.  We
 have some new files:
 
   RaiseAsync.{c,h}	asynchronous exception support
   Threads.{c,h}         general threading-related utils
 
 Some of the contents of these new files used to be in Schedule.c,
 which is smaller and cleaner as a result of the split.
 
 Asynchronous exception support in the presence of multiple running
 Haskell threads is rather tricky.  In fact, to my annoyance there are
 still one or two bugs to track down, but the majority of the tests run
 now.
] 
[make rmp_tmp_w an StgWord instead of StgInt
Simon Marlow <[EMAIL PROTECTED]>**20060616102311] 
[__compat_long_path_size(): have proto and defn agree on return type
[EMAIL PROTECTED] 
[call wakeUpRts() in the correct place
Simon Marlow <[EMAIL PROTECTED]>**20060614134728] 
[readerProc: split up text output using host's line termination convention
[EMAIL PROTECTED] 
[Improve pretty-printing for bags
[EMAIL PROTECTED] 
[Make scoped type variables work for default methods
[EMAIL PROTECTED]
 
 Consider
   class C a where
     op :: forall b. a -> b -> b
     op = <rhs>
 
 Then 'b' should be in scope in <rhs>.  I had omitted this case.
 This patch fixes it.
 
] 
[And move 'Chasing ...' messages into verbosity 2 as well
Don Stewart <[EMAIL PROTECTED]>**20060612084656] 
[Emit 'linking not required' messages only with -v 2 or above.
Don Stewart <[EMAIL PROTECTED]>**20060611071041
 
 Similar in philosophy to the 'Skipping' patch, this is another case of
 printing noisy messages when no work is being done. This patch makes the
 building-when-nothing-to-do case smoother.
 
] 
[Don't emit 'Skipping' messages unless -v2 or higher is on
Don Stewart <[EMAIL PROTECTED]>**20060610145713
 
 Following GNU make, this patch makes GHC not emit messages about modules
 its skipping. This makes builds much quieter, and its a lot easier to
 work out what effects a change had on the code.
 
 The current behaviour can be recovered with -v2
 
] 
[fix the stage3 build
Simon Marlow <[EMAIL PROTECTED]>**20060612084114] 
[oops, undo accidental commit of version number
Simon Marlow <[EMAIL PROTECTED]>**20060612083520] 
[Move readline configuration into the readline package
Simon Marlow <[EMAIL PROTECTED]>**20060609135840] 
[fix possible ^C problems
Simon Marlow <[EMAIL PROTECTED]>**20060608144457
 Calling prodAllCapabilities() from interruptStgRts() was wrong, for
 the same reasons that we stopped doing it in handle_tick().  We now
 use the same mechanism (send a byte down the pipe to the IO manager
 thread), but abstract it in a wakeUpRts() function in the scheduler.
] 
[New tracing interface
Simon Marlow <[EMAIL PROTECTED]>**20060608144210
 A simple interface for generating trace messages with timestamps and
 thread IDs attached to them.  Most debugging output goes through this
 interface now, so it is straightforward to get timestamped debugging
 traces with +RTS -vt.  Also, we plan to use this to generate
 parallelism profiles from the trace output.
] 
[fix warnings
Simon Marlow <[EMAIL PROTECTED]>**20060608143635] 
[fix warnings
Simon Marlow <[EMAIL PROTECTED]>**20060608143520] 
[Make it so that StgWord/StgInt are longs
Simon Marlow <[EMAIL PROTECTED]>**20060608143438
 This means we can use a %ld format specifier for StgWord/StgInt with
 printf and not get shouted at by gcc.
] 
[more warning fixage
Simon Marlow <[EMAIL PROTECTED]>**20060608142844] 
[fix a warning
Simon Marlow <[EMAIL PROTECTED]>**20060608141903] 
[fix some warnings
Simon Marlow <[EMAIL PROTECTED]>**20060608140201] 
[Add new RTS flags for tracing:
Simon Marlow <[EMAIL PROTECTED]>**20060608130101
 
   -vs       Trace scheduler events (see also -Ds with -debug)
   -vt       Time-stamp trace messages
 
 the intention is that we will pipe the -vs output into a
 profile-generating tool.  This commit includes the flags only,
 functionality to follow.
] 
[codegen debug flag (+RTS -Dc) was unused; remove it
Simon Marlow <[EMAIL PROTECTED]>**20060607145848] 
[add 'const' modifiers to types where appropriate
Simon Marlow <[EMAIL PROTECTED]>**20060607145800] 
[rearrange casts to avoid gcc warnings
Simon Marlow <[EMAIL PROTECTED]>**20060607145626] 
[warning fix
Simon Marlow <[EMAIL PROTECTED]>**20060607141013] 
[remove //@ stuff
Simon Marlow <[EMAIL PROTECTED]>**20060607134553] 
[Gather timing stats for a Task when it completes.
Simon Marlow <[EMAIL PROTECTED]>**20060607124407
 Previously we did this just for workers, now we do it for the main
 thread and for forkOS threads too.
] 
[Remove unnecessary SCHED_INTERRUPTED scheduler state
Simon Marlow <[EMAIL PROTECTED]>**20060607115105
 
] 
[fix a warning
Simon Marlow <[EMAIL PROTECTED]>**20060427130048] 
[re-enable time package on Windows
[EMAIL PROTECTED] 
[fix a case of "naughty I386 byte reg"
Simon Marlow <[EMAIL PROTECTED]>**20060606112357
 The fix is a little hacky, because we don't have support for register
 classes in general, but it's an improvement.
] 
[A better icon for GHCi
Neil Mitchell <http://www.cs.york.ac.uk/~ndm/>**20060602145913] 
[markSignalHandlers(): implementation was unnecessary, and had a bug
[EMAIL PROTECTED]
 
 There's no need to mark the signal handler here, because it is stored
 in a StablePtr and hence is a root anyway.  Furthermore, the call to
 evac() was passing the address of a local variable, which turned out
 to be harmless for copying GC, but fatal for compacting GC: compacting
 GC assumes that the addresses of the roots are the same each time.
 
 Fixes: possibly #783, possibly #776, definitely #787
] 
[disable time package on mingw to unblock builds.
[EMAIL PROTECTED] 
[Remove one more IfaceInlineCall
[EMAIL PROTECTED] 
[Remove InlinePlease and add inline function and RULE
[EMAIL PROTECTED]
 
 For a long time GHC has had some internal mechanism designed to support
 a call-site inline directive, thus
 	inline f xs
 makes f be inlined at the call site even if f is big.
 
 However, the surface syntax seems to have gone, and in any case it
 can be done more neatly using a RULE.
 
 This commit:
   * Removes the InlineCall constructor for Note
     and InlinePlease for SimplCont
 
   * Adds a new known-key Id called 'inline', whose definition in
     GHC.Base is just the identity function
 
   * Adds a built-in RULE in PrelRules that rewrites (inline f) to
     the body of f, if possible
 
   * Adds documentation
 
 NOTE: I have not tested this (aeroplane work).  Give it a try!
 
] 
[Fix typo
[EMAIL PROTECTED] 
[fix type of allocateExec
Simon Marlow <[EMAIL PROTECTED]>**20060601125406] 
[stgMallocBytesRWX --> allocateExec
Simon Marlow <[EMAIL PROTECTED]>**20060601123314] 
[fix non-Windows build
Simon Marlow <[EMAIL PROTECTED]>**20060601121435] 
[Win32: set up the console code pages
[EMAIL PROTECTED]
 This may help with entering non-ASCII characters at the GHCi prompt,
 but as usual with Unicode there's no simple solution that just works.
 See commentary in InteractiveUI.hs for more details.
] 
[add a type signature
[EMAIL PROTECTED] 
[improvements to lexical error reporting
[EMAIL PROTECTED] 
[commented-out debugging code
[EMAIL PROTECTED] 
[understand Latin-1 symbols
[EMAIL PROTECTED] 
[stgMallocBytesRWX --> allocateExec
Simon Marlow <[EMAIL PROTECTED]>**20060531091202
 Not sure how I left this out of the previous patch, oh well.
] 
['time' depends on 'Win32' when Windows=YES; mirror that
[EMAIL PROTECTED]
 when setting up SUBDIRS.
] 
[Win32: add _imp__tzname
[EMAIL PROTECTED] 
[fix Win32 build
[EMAIL PROTECTED] 
[replace stgMallocBytesRWX() with our own allocator
Simon Marlow <[EMAIL PROTECTED]>**20060530100211
 
 See bug #738
 
 Allocating executable memory is getting more difficult these days.  In
 particular, the default SELinux policy on Fedora Core 5 disallows
 making the heap (i.e. malloc()'d memory) executable, although it does
 apparently allow mmap()'ing anonymous executable memory by default.
 
 Previously, stgMallocBytesRWX() used malloc() underneath, and then
 tried to make the page holding the memory executable.  This was rather
 hacky and fails with Fedora Core 5.  
 
 This patch adds a mini-allocator for executable memory, based on the
 block allocator.  We grab page-sized blocks and make them executable,
 then allocate small objects from the page.  There's a simple free
 function, that will free whole pages back to the system when they are
 empty.
 
] 
[add time subdir
Simon Marlow <[EMAIL PROTECTED]>**20060530070721] 
[Make rule-matching robust to lets
[EMAIL PROTECTED]
 
 Consider a RULE like
 	forall arr. splitD (joinD arr) = arr
 
 Until now, this rule would not match code of form
 	splitD (let { d = ... } in joinD (...d...))
 because the 'let' got in the way.
 
 This patch makes the rule-matcher robust to lets.  See comments with
 the Let case of Rules.match.
 
 This improvement is highly desirable in the fusion rules for NDP
 stuff that Roman is working on, where we are doing fusion of *overloaded*
 functions (which may look lazy).  The let expression that Roman tripped
 up on was a dictioary binding.
 
] 
[Improve error reporting in interface typechecking
[EMAIL PROTECTED] 
[Fix egregious and long-standing tidying bug
[EMAIL PROTECTED]
 
 A typo in tidyAlt meant that we could get shadowing of occurrence names
 in the output of tidying.  (Specifically, of existentially bound type 
 variables.)  That in turn meant that an IfaceExpr could have shadowing, so
 when the IfaceExpr was read in, it meant something different.
 That in turn led to an obscure crash like:
 	Panic: tcIfaceTyVar
 
 Anyway, this fixes it.  MERGE into 6.4.3.
 
 
] 
[Prune imports
[EMAIL PROTECTED] 
[performGC_(): don't use the existing Task, always grab a new one
Simon Marlow <[EMAIL PROTECTED]>**20060525090035] 
[Better control of the IO manager thread; improvements to deadlock checking
Simon Marlow <[EMAIL PROTECTED]>**20060524122839
     
 In the threaded RTS on *nix platforms:
     
  - we now start the IO manager thread eagerly at startup time
    (previously was started on demand).
 
  - we now ask the IO manager thread to stop at shutdown
     
  - In Timer.c:handle_tick, if it looks like we might be in a
    deadlock, instead of calling prodOneCapability() which was known to be
    wrong, we now send a byte down the IO manager's pipe to wake it up.
   
 This also avoids a case of double-acquisition of a mutex, which
 happened if prodOneCapability() was called while the current thread
 was holding a mutex.
] 
[TARGET_OS ==> HOST_OS
Simon Marlow <[EMAIL PROTECTED]>**20060524122103] 
[fix a _TARGET_ARCH that should be _HOST_ARCH
Simon Marlow <[EMAIL PROTECTED]>**20060524122022] 
[we don't need OutOfHeapHook(), and the version in the RTS has a better message
Simon Marlow <[EMAIL PROTECTED]>**20060524112007] 
[Bug-fix to patch "Run simplifier before SpecConstr"
[EMAIL PROTECTED] 
[Run simplifier before SpecConstr
[EMAIL PROTECTED]
 
 Arrange to run the simplifier before SpecConstr, to (almost entirely) 
 eliminate shadowing.
 
 Reason: otherwise SpecConstr can generate a RULE that never
 files; and LiberateCase specifically *does* generate lots of shadowing.
 
 See Note [Shadowing] in SpecConstr.lhs
 
 
] 
[Prune imports
[EMAIL PROTECTED] 
[Add deShadowBinds
[EMAIL PROTECTED]
 
 Add CoreSubst.deShadowBinds, which removes shadowing from 
 a Core term.  I thought we wanted it for SpecConstr, but in 
 fact decided not to use it. Nevertheless, it's a useful sort
 of function to have around, and it has a particularly simple
 definition!
 
] 
[Inline in a call argument if the caller has RULES
[EMAIL PROTECTED]
 
 This is an experimental change suggested by Roman.  Consider
 	
 	{-# INLINE f #-}
 	f x y = ...
 
 	....(g (f a b))...
 
 where g has RULES.  Then we'd like to inline f, even though the context of
 the call is otherwise 100% boring -- g is lazy and we know nothing about
 x and y. 
 
 This patch just records in the continuation that f has rules.  And does so
 somewhat recursively...e.g.
 
 	...(g (h (f a b)))...
 
 where g has rules.  
 
 
] 
[Add idHasRules
[EMAIL PROTECTED]
 
 Add Id.idHasRules :: Id -> Bool, with the obvious semantics.
 This patch makes sense by itself, but it's just a tidy-up.
 
 
] 
[Transmit inline pragmas faithfully
[EMAIL PROTECTED]
 
 *** WARNING: you will need to recompile your libraries 
 ***	     when you pull this patch (make clean; make)
 
 The inline pragma on wrapper-functions was being lost; this patch 
 makes it be transmitted faithfully.
 
 The reason is that we don't write the full inlining for a wrapper into
 an interface file, because it's generated algorithmically from its strictness
 info.  But previously the inline pragma as being written out only when we
 wrote out an unfolding, and hence it was lost for a wrapper.
 
 This makes a particular difference when a function has a NOINLINE[k] pragma.
 Then it may be w/w'd, and we must retain the pragma.  It's the only consistent
 thing to do really.
 
 The change does change the binary format of interface files, slightly.
 So you need to recompile all your libraries.
 
] 
[Improved RULE lhs typechecking; less dictionary sharing
[EMAIL PROTECTED]
 
 See long comment with Simplify.tcSimplifyRuleLhs.
 
 Here's the key example:
 
   RULE "g"  forall x y z. g (x == y) (y == z) = ...
 
 Here, the two dictionaries are *identical*, but we do NOT WANT to
 generate the rule
 
 RULE	forall x::a, y::a, z::a, d1::Eq a
 	  f ((==) d1 x y) ((>) d1 y z) = ...
 
 Instead we want
 
 RULE	forall x::a, y::a, z::a, d1::Eq a, d2:Eq a
 	  f ((==) d1 x y) ((>) d2 y z) = ...
 
] 
[Bug-fix for infix function definitions (parse/rename)
[EMAIL PROTECTED]
   
 Fix a crash provoked by
 
 	x `op` y = x
 	op       = True
 
 The trouble was that there is currently a single 'infix' flag for the
 whole group; and RnTypes.checkPrecMatch was therefore expecting the
 second eqn to have two args.
 
 This fixes the crash, and also or-s the infix flags for the various
 eqns together; previously it was just taken from the first eqn, which
 was wrong.
 
 
] 
[Remove misleading comments
[EMAIL PROTECTED] 
[Fix a nasty continuation-duplication bug
[EMAIL PROTECTED]
 
 For a long-time mkDupableCont has had a bug that allows it to duplicate
 an arbitrary continuation, which it should not do, of course.
 
 The bug was that in the Select case of mkDupableCont we were calling
 prepareCaseCont, which did not duplicate the continuation if there is
 but a single alternative.  This is quite right in the case of the call
 in rebuildCase, but quite wrong in mkDupableCont.
 
 The bug manifest as follows. In the expression
 	f (case ... of { ..several alts.. })
 (when f is strict), we should transform to
 	f (...transformed arg...)
 The application of f should not be pushed down (see notes with the
 ArgOf case of mkDupableCont.  But that was not happening in an example
 like this (see how the call to f is pushed inwards).
 
 f (a `div` abs (b::Int))
 	--->
     case b_afT of wild_aHa { GHC.Base.I# x_aHc ->
     let {
       $j_sIe :: GHC.Prim.Int# -> GHC.Base.Int
       []
       $j_sIe =
 	\ (ds1_aHr [Nothing OneShot] :: GHC.Prim.Int#) ->
 	  Foo7.f
 	    (case ds1_aHr of ds2_aHq {
 	       __DEFAULT ->
 		 case a_afS of wild1_aHM { GHC.Base.I# x_aHO ->
 		 GHC.Base.I# (GHC.Base.divInt# x_aHO ds2_aHq)
 		 };
 	       0 -> GHC.Err.divZeroError @ GHC.Base.Int
 	     })
     } in 
       case GHC.Prim.>=# x_aHc 0 of wild1_aHe [Dead Nothing] {
 	GHC.Base.False ->
 	  let {
 	    ds1_aHr :: GHC.Prim.Int#
 	    []
 	    ds1_aHr = GHC.Prim.negateInt# x_aHc
 	  } in  $j_sIe ds1_aHr;
 	GHC.Base.True -> $j_sIe x_aHc
       }
     }
 
 
] 
[Make simplifier report which phase it is doing in -ddump output
[EMAIL PROTECTED] 
[Comments only
[EMAIL PROTECTED] 
[take parsec out of $(GhcBootLibs)
Simon Marlow <[EMAIL PROTECTED]>**20060518131506] 
[Improve documentation of INLINE pragmas
[EMAIL PROTECTED] 
[a couple of additions
Simon Marlow <[EMAIL PROTECTED]>**20060518104025] 
[#define _REENTRANT 1   (needed to get the right errno on some OSs)
Simon Marlow <[EMAIL PROTECTED]>**20060518103715
 Partial fix for hanging problems on Solaris and possibly *BSD.
 A similar fix is also required to libraries/base/includes/HsBase.h.
] 
[Declare this file to be POSIX
Simon Marlow <[EMAIL PROTECTED]>**20060518102858
 This is simpler than using _POSIX_THREAD_SEMANTICS on Solaris to get
 the right version of ctime_r().
] 
[somewhere to keep track of release notes for 6.6
Simon Marlow <[EMAIL PROTECTED]>**20060518074415] 
[Newtype data constructors get a compulsory unfolding
[EMAIL PROTECTED]
 
 With this change, newtype data constructors get a "compulsory" unfolding,
 which means that they *must* be inlined, and no top-level definition of
 the constructor is provided at all.  Since these constructors are no-ops,
 I'm not sure why this wasn't the case all along.
 
] 
[White space only
[EMAIL PROTECTED] 
[Retain InlinePragInfo on wrappers
[EMAIL PROTECTED]
 
 For some reason, when doing the worker/wrapper split, we transferred the
 InlinePragInfo from the original function, but expunging it from the wrapper.
 This meant, for example, that a NOINLINE function would have its wrapper
 inlined, which isn't sensible.
 
 For a change, fixing a bug involves only deleting code!
 
] 
[Spelling correction
[EMAIL PROTECTED] 
[Retain INLINE pragma information during indirection-shorting
[EMAIL PROTECTED]
 
 During indirection-shorting, we were dropping the InlinePragInfo,
 although were were carefully retaining strictness info etc.  
 I think this is a long-standing bug.
 
] 
[Improve pretty-printing
[EMAIL PROTECTED] 
[Comments only
[EMAIL PROTECTED] 
[Improve pretty-printing slightly
[EMAIL PROTECTED] 
[Let GHCi work with with Sparc32+/V8+ .o files
Duncan Coutts <[EMAIL PROTECTED]>**20060516090430
 Currently the GHCi linker looks exclusively for V7 ABI .o files.
 
 You can generate V8+ ABI .o files using flags to gcc such as:
  -optc-mcpu=ultrasparc -opta-mcpu=ultrasparc
 
 Note that this allows gcc to generate hardware integer division and
 hardware floating point instructions rather than using software emulation.
 All recent sparc hardware is V8+ or later. Perhaps we should check for the
 cpu generation in configure and use the later ABI if possible.
 
 Tested briefly on a SunBlade 100 (TI UltraSparc IIe) sparc-unknown-linux
] 
[match up more closely with compiler/main/DynFlags.hs:machdepCCOpts
Simon Marlow <[EMAIL PROTECTED]>**20060515090031
 In particular, add -fno-builtin to x86 and x86_64, which was missing.
] 
[set $(GhcVersion) and $(GhcPatchLevel) correctly when $(UseStage1)==YES
Simon Marlow <[EMAIL PROTECTED]>**20060510124621] 
[.raw_s and .s live in $(odir), not the source dir
Simon Marlow <[EMAIL PROTECTED]>**20060510121524] 
[additions from Reilly Hayes
Simon Marlow <[EMAIL PROTECTED]>**20060510120000] 
[some tweaks to the HC bootstrapping instructions
Simon Marlow <[EMAIL PROTECTED]>**20060510115236] 
[Ignore unboxed values in breakpoints.
Lemmih <[EMAIL PROTECTED]>**20060510072722] 
[Don't read ~/.ghci on breakpoints.
Lemmih <[EMAIL PROTECTED]>**20060509223455] 
[make it possible to define an alias for :quit
Simon Marlow <[EMAIL PROTECTED]>**20060509083124] 
[Do not put wired-in things in interface files
[EMAIL PROTECTED]
 
 There is no need for wired-in things to go into interface files; the compiler
 knows about them anyway.  Worse, it turns ou that if they are in an interface
 file, they may get read in with not-quite-right type info (e.g. GHC.Err.error),
 and the not-quite-right thing gets into the type envt.  Than it gets used 
 instead of the wired in thing.
 
 Best all round never to put them into interface files.  This is the way
 it used to be, but it looks as if it rotted away some time ago.
 
 (I noticed this when fixing unsafePerformIO stuff, becuase 'lazy' was getting
 an unfolding when it shouldn't.)
 
] 
[Remove NOINLINE strictness hack
[EMAIL PROTECTED]
 
 The stricteness analyser used to have a HACK which ensured that NOINLNE things
 were not strictness-analysed.  The reason was unsafePerformIO. Left to itself,
 the strictness analyser would discover this strictness for unsafePerformIO:
 	unsafePerformIO:  C(U(AV))
 But then consider this sub-expression
 	unsafePerformIO (\s -> let r = f x in 
 			       case writeIORef v r s of (# s1, _ #) ->
 			       (# s1, r #)
 The strictness analyser will now find that r is sure to be eval'd,
 and may then hoist it out.  This makes tests/lib/should_run/memo002
 deadlock.
 
 Solving this by making all NOINLINE things have no strictness info is overkill.
 In particular, it's overkill for runST, which is perfectly respectable.
 Consider
 	f x = runST (return x)
 This should be strict in x.
 
 So the new plan is to define unsafePerformIO using the 'lazy' combinator:
 
 	unsafePerformIO (IO m) = lazy (case m realWorld# of (# _, r #) -> r)
 
 Remember, 'lazy' is a wired-in identity-function Id, of type a->a, which is 
 magically NON-STRICT, and is inlined after strictness analysis.  So
 unsafePerformIO will look non-strict, and that's what we want.
 
 Now we don't need the hack in the strictness analyser.
 
] 
[Trim imports
[EMAIL PROTECTED] 
[Trim imports
[EMAIL PROTECTED] 
[GHC_MANGLER-->MANGLER
Simon Marlow <[EMAIL PROTECTED]>**20060508111206] 
[Fix bug #763: Breakpoint mechanism crashes when there's a type error.
Lemmih <[EMAIL PROTECTED]>**20060505232158] 
[breakpointCond
Lemmih <[EMAIL PROTECTED]>**20060502174340] 
[Preserve type variable names during type inference
[EMAIL PROTECTED]
 
 During unification we attempt to preserve the print-names of type variables,
 so that type error messages tend to mention type variables using the 
 programmer's vocabulary.  
 
 This had bit-rotted a bit when I added impredicative polymorphism; especially
 when unBoxing a boxy type variable we should not gratuitously lose its name.
 
] 
[Trim imports
[EMAIL PROTECTED] 
[fixup for new source tree layout
Simon Marlow <[EMAIL PROTECTED]>**20060505114100] 
[FPTOOLS_TOP-->GHC_TOP, and remove some references to "fptools"
Simon Marlow <[EMAIL PROTECTED]>**20060505110520] 
[$(FPTOOLS_TOP) is now known as $(GHC_TOP)
Simon Marlow <[EMAIL PROTECTED]>**20060505110127
 I kept $(FPTOOLS_TOP) as an alias for $(GHC_TOP) while we switch
] 
[update the build system documentation
Simon Marlow <[EMAIL PROTECTED]>**20060505105843] 
[update for new source tree layout
Simon Marlow <[EMAIL PROTECTED]>**20060505102903] 
[partial update for new source tree layout
Simon Marlow <[EMAIL PROTECTED]>**20060505030218] 
[update for new source tree layout (untested)
Simon Marlow <[EMAIL PROTECTED]>**20060505081549] 
[Print a more helpful error for find_thing
[EMAIL PROTECTED] 
[Fix a bug in rule matching
[EMAIL PROTECTED]
 
 The rule matcher uses a "rough-match" pre-filter, which was being too 
 aggressive.  The case looked like this:
 
 	rule:	f True
 	expr:	case e of x { True -> f x }
 
 Jues because x doesn't immediately look like True, we shouldn't say
 "can't match", but that is exactly what ruleCantMatch was doing.
 
 
] 
[Fix constructor-specialisation bug
[EMAIL PROTECTED]
 
 The constructor-specialisation optimisation was not dealing with the case
 of 
 	(letrec ... in f) a1 a2
 
 We need to apply constructor specialisation in the letrec; previously
 we were leaving it untouched on the grounds that the function part of
 an application is almost always a variable.
 
 But in fact, float-in immediately precedes SpecConstr, so we can get
 these odd-looking applications.
 
 
] 
[Fix precedence for records in derived Read
[EMAIL PROTECTED]
 
 The derived instance for Read of records wasn't quite right.
 Consider
 	data T = T1 T | T2 { x::Int }
 
 The string "T1 T2 { x=2 }" should parse correctly as 
 	T1 (T2 {x=2})
 because of Haskell's odd precedence rules (record construction binds
 even more tightly than application), but the derived Read didn't take
 account of that.
 
 drvrun020 is the regression test
 
 
] 
[Make rules available in RHS
[EMAIL PROTECTED]
 
 After some earlier re-factoring, the code that was carefully trying
 to make RULES available in a function's own RHS was plain wrong.
 
 This commit fixes it.  Some programs should go faster!
 
] 
[Pretty printing instance for Unfolding
[EMAIL PROTECTED] 
[small clarification
Simon Marlow <[EMAIL PROTECTED]>**20060504103414] 
[small fix to booting instructions from #762
Simon Marlow <[EMAIL PROTECTED]>**20060504083104] 
[$(ProjectNameShort) => ghc
Simon Marlow <[EMAIL PROTECTED]>**20060503102419] 
[only pass -fno-unit-at-a-time to gcc if it is supported
Simon Marlow <[EMAIL PROTECTED]>**20060503093614] 
[Arrange that -fth is no longer implied by -fglasgow-exts
[EMAIL PROTECTED]
 
 Messages involving Template Haskell are deeply puzzling
 if you don't know about TH, so it seems better to make
 -fth an explicit flag.  It is no longer switched on
 by -fglasgow-exts.
 
] 
[remove code not required in the new source tree layout
Simon Marlow <[EMAIL PROTECTED]>**20060502114235] 
[move "compat" earlier in the build for .hc bootstrapping
Simon Marlow <[EMAIL PROTECTED]>**20060502112001] 
[fix ctime_r problem on Solaris (I hope)
Simon Marlow <[EMAIL PROTECTED]>**20060502111231] 
[fix whitespace problem that shows up on Solaris (x86)
Simon Marlow <[EMAIL PROTECTED]>**20060502110001] 
[libraries/time is boring
Simon Marlow <[EMAIL PROTECTED]>**20060502105524] 
[add time package to libraries Makefile
Ashley Yakeley <[EMAIL PROTECTED]>**20060501092241] 
[add time package to default-packages
Ashley Yakeley <[EMAIL PROTECTED]>**20060426070445] 
[Fix stage2 segfault on openbsd.
[EMAIL PROTECTED]
 
 Somewhere along the 6.5 branch, gcc started compiling the rts such that
 it triggers the stack smash handler, causing stage2 to by kill'd
 immediately. This turns off the stack protector, which will do for now.
 
] 
[fix quoting around ${FPTOOLS_TOP_ABS} (fixes #749)
Simon Marlow <[EMAIL PROTECTED]>**20060428085252] 
[Fix bug shown in the mod77 test.
Lemmih <[EMAIL PROTECTED]>**20060427113313] 
[Don't init root pointers if they aren't gonna be used.
Lemmih <[EMAIL PROTECTED]>**20060426111143] 
[Fix recompilation checking.
Simon Marlow <[EMAIL PROTECTED]>**20060425140932
 One-shot compilation was throwing away the old iface read by
 checkOldIface, with the result that version numbers were never being
 incremented.  Fixes the recomp001 test too.
] 
[Solaris needs -lrt for the threaded RTS
Simon Marlow <[EMAIL PROTECTED]>**20060425082823] 
[fix problem with binary-dist docs
Simon Marlow <[EMAIL PROTECTED]>**20060424090159] 
[Enable breakpoint support.
Lemmih <[EMAIL PROTECTED]>**20060421113112] 
[Fixing some lexer errors with extcore
Josef Svenningsson <[EMAIL PROTECTED]>**20060420222625] 
[Extcore can now handle data types without constructors
Josef Svenningsson <[EMAIL PROTECTED]>**20060420213622] 
[Comments only
Josef Svenningsson <[EMAIL PROTECTED]>**20060420213555] 
[Resurrect ProjectName
[EMAIL PROTECTED] 
[Remove the section on platform support, link to the wiki page
Simon Marlow <[EMAIL PROTECTED]>**20060420125555
 The section in the building guide was becoming out of date, a wiki
 page is much more likely to be kept fresh.
] 
[Fix workaround for a GHC 6.4 bug
[EMAIL PROTECTED] 
[hslibs is dead, Jim...
[EMAIL PROTECTED] 
[Synched .spec file with reality
[EMAIL PROTECTED] 
[Add .spec file to source distribution
[EMAIL PROTECTED] 
[remove paragraph about mutable objects that doesn't apply now
Simon Marlow <[EMAIL PROTECTED]>**20060419082038] 
[HsBool should be HsInt, not StgBool
Simon Marlow <[EMAIL PROTECTED]>**20060418144214
 StgBool is mapped to C's int type.  GHC doesn't currently know the
 size of a C int on the target arch, it's easier to use StgInt instead.
 I guess nobody ever uses Bool arguments to foreign imports/exports.
] 
[handle Bool arg to foreign import "wrapper"
Simon Marlow <[EMAIL PROTECTED]>**20060418143936
 Fixes #746
] 
[update commentry for foreign import "wrapper" handling
Simon Marlow <[EMAIL PROTECTED]>**20060418143714] 
[remove vestiges of ByteArray and MutableByteArray, which are no more
Simon Marlow <[EMAIL PROTECTED]>**20060418143641] 
[Comment only
[EMAIL PROTECTED] 
[Fix rank-validity testing
[EMAIL PROTECTED]
 
 GHC does not now do "hoisting" as it used to.  Instead, it allows
 foralls to the right of fuction arrows, as well as to the left.
 
 But the type-validity tester hadn't caught up.  This commit fixes 
 it. The test is tc203.
 
 Incidentally, GHC still doesn't let you write
 	forall a. Eq a => forall b. b -> b
 because we get a zillion reduce/reduce errors if we allow that.  I'm
 sure it's fixable.  But meanwhile you have to use an auxiliary type
 synonym, which is a bit stupid.
 
 
] 
[Make the initial rdr and type scope available in the ghc-api.
Lemmih <[EMAIL PROTECTED]>**20060418023606] 
[Fix minor bug in Linker.withExtendedLinkEnv
Lemmih <[EMAIL PROTECTED]>**20060418023518] 
[Export 'insertSymbol' and 'insertStableSymbol'.
Lemmih <[EMAIL PROTECTED]>**20060418021806
 
 'insertStableSymbol' is used for exporting closures that are affected by the GC.
 
] 
[Allow $x, as well as $(x), at top level in TH
[EMAIL PROTECTED]
 
 Bulat pointed out that in Template Haskell
    $x
 is allowed instead of 
    $(x)
 in expressions, but not at the top level of modules.
 
 This commit fixes the omission.  Now you can say
 
 	f x = x
  	$h
 	data T = T
 
 and the $h will run Template Haskell just as you'd expect.
 
] 
[Fix TH erorr recovery (test is TH_recover)
[EMAIL PROTECTED] 
[Comments only
[EMAIL PROTECTED] 
[Recover gracefully from a Template Haskell programmers error
[EMAIL PROTECTED]
 
 If a TH programmer uses a type constructor as a data constructor,
 GHC simply crashed.  This commit makes it report the error in a
 graceful way.
 
] 
[Document newtype-unwrapping for IO in FFI
[EMAIL PROTECTED] 
[Cosmetics in SpecConstr
[EMAIL PROTECTED]
 
 SpecConstr currently uses substExpr for tiresome reasons to do with
 GADTs.  Unfortunately the substExpr generates some WARNINGS (when DEBUG)
 is on, because we aren't adding all the in-scope Ids to the in-scope
 set of the substitution.
 
 When we move to FC these substExprs will go away, so I'm not going to
 worry about this now.
 
] 
[Improve pruning of case alternatives to account for GADTs
[EMAIL PROTECTED]
 
 Consider
 
   data T a where
     T1 :: T Int
     T2 :: T Bool
     T3 :: T Char
 
   f :: T Bool -> Int
   f x = case x of
 	  DEFAULT -> ...
 	  T2 -> 3
 
 Here the DEFAULT case covers multiple constructors (T1,T3), but none 
 of them can match a scrutinee of type (T Bool).  So we can prune away
 the default case altogether.
 
 In implementing this, I re-factored this bit of the simplifier, elminiating
 prepareAlts from SimplUtils, and putting all the work into simplAlts in
 Simplify
 
 The proximate cause was a program written by Manuel using PArrays
 
] 
[Fix a bug in optimising division to shift right
Simon Marlow <[EMAIL PROTECTED]>**20060412144247
 Division by an integral log2 can't be directly optimised to a shift
 right, because shift right behaves like a division that rounds to
 negative infinity, whereas we want one that rounds to zero.  Fix this
 by adding (divisor-1) to the dividend when it is negative before
 shifting.  We do this without jumps, generating very slightly worse
 code than gcc, which uses conditional moves on CPUs that support it.
] 
[Omit lndir on Windows, as it used to be
[EMAIL PROTECTED] 
[remove a trace
Simon Marlow <[EMAIL PROTECTED]>**20060411131531] 
[Allow IO to be wrapped in a newtype in foreign import/export
[EMAIL PROTECTED]
 
 Up to now, the silent unwrapping of newtypes in foreign import/export
 has been limited to data values.  But it's useful for the IO monad
 itself:
 
 	newtype MyIO a = MIO (IO a)
 
 	foreign import foo :: Int -> MyIO Int
 
 This patch allows the IO monad to be
 wrapped too. This applies to foreign import "dynamic" and "wrapper", 
 thus
    foreign import "wrapper" foo :: MyIO () -> HisIO (FunPtr (MyIO ())) 
 
 Warning: I did on the plane, and I'm no longer sure if its 100% 
 complete, so needs more testing.  In particular the wrapper/dynamic bit.
 
] 
[Improve newtype deriving
[EMAIL PROTECTED]
 
 Ross Paterson pointed out a useful generalisation of GHC's 
 newtype-deriving mechanism.  This implements it.  The idea
 is to allow
 	newtype Wrap m a = Wrap (m a) deriving (Monad, Eq)
 where the representation type doesn't start with a type
 constructor.
 
 Actually GHC already *did* implement this, but the eta-ok
 check in TcDeriv missed a case, so there was a lurking bug.
 
 This patches fixes the documentation too.  drvrun019 tests.
 
 
] 
[add take to the list of functions deforestable
Simon Marlow <[EMAIL PROTECTED]>**20060411090131] 
[avoid versionitis in Numeric.showHex (should fix tcrun007)
Simon Marlow <[EMAIL PROTECTED]>**20060411085009] 
[add a note about full-laziness
Simon Marlow <[EMAIL PROTECTED]>**20060410093824] 
[robustify the test for the top of the tree a little
Simon Marlow <[EMAIL PROTECTED]>**20060410082224] 
[Make darcs-all work without a ghc toplevel directory
Josef Svenningsson <[EMAIL PROTECTED]>**20060407161738] 
[Fix typo in darcsall warning
Josef Svenningsson <[EMAIL PROTECTED]>**20060407161335] 
[fix source dists
Simon Marlow <[EMAIL PROTECTED]>**20060407150045] 
[add a README for binary dists
Simon Marlow <[EMAIL PROTECTED]>**20060407143832] 
[fix binary dists
Simon Marlow <[EMAIL PROTECTED]>**20060407143822] 
[remove the last bits of the ghc/ subdir
Simon Marlow <[EMAIL PROTECTED]>**20060407085219] 
[TAG 07.04.06
Lemmih <[EMAIL PROTECTED]>**20060407130411] 
Patch bundle hash:
69cfccfbbef9be544270d069caab48f24b948b83
_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to