14 years agoBug-fix for infix function definitions (parse/rename) [Fri, 19 May 2006 09:50:22 +0000 (09:50 +0000)]
Bug-fix for infix function definitions (parse/rename)

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.

14 years agoRemove misleading comments [Fri, 19 May 2006 09:49:36 +0000 (09:49 +0000)]
Remove misleading comments

14 years agoFix a nasty continuation-duplication bug [Thu, 18 May 2006 16:36:17 +0000 (16:36 +0000)]
Fix a nasty continuation-duplication bug

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#) ->
    (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

14 years agoMake simplifier report which phase it is doing in -ddump output [Thu, 18 May 2006 16:34:48 +0000 (16:34 +0000)]
Make simplifier report which phase it is doing in -ddump output

14 years agoComments only [Thu, 18 May 2006 16:34:25 +0000 (16:34 +0000)]
Comments only

14 years agotake parsec out of $(GhcBootLibs)
Simon Marlow [Thu, 18 May 2006 13:15:06 +0000 (13:15 +0000)]
take parsec out of $(GhcBootLibs)

14 years agoImprove documentation of INLINE pragmas [Thu, 18 May 2006 11:32:12 +0000 (11:32 +0000)]
Improve documentation of INLINE pragmas

14 years agoa couple of additions
Simon Marlow [Thu, 18 May 2006 10:40:25 +0000 (10:40 +0000)]
a couple of additions

14 years ago#define _REENTRANT 1 (needed to get the right errno on some OSs)
Simon Marlow [Thu, 18 May 2006 10:37:15 +0000 (10:37 +0000)]
#define _REENTRANT 1   (needed to get the right errno on some OSs)
Partial fix for hanging problems on Solaris and possibly *BSD.
A similar fix is also required to libraries/base/includes/HsBase.h.

14 years agoDeclare this file to be POSIX
Simon Marlow [Thu, 18 May 2006 10:28:58 +0000 (10:28 +0000)]
Declare this file to be POSIX
This is simpler than using _POSIX_THREAD_SEMANTICS on Solaris to get
the right version of ctime_r().

14 years agosomewhere to keep track of release notes for 6.6
Simon Marlow [Thu, 18 May 2006 07:44:15 +0000 (07:44 +0000)]
somewhere to keep track of release notes for 6.6

14 years agoNewtype data constructors get a compulsory unfolding [Wed, 17 May 2006 15:50:09 +0000 (15:50 +0000)]
Newtype data constructors get a compulsory unfolding

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.

14 years agoWhite space only [Wed, 17 May 2006 15:49:36 +0000 (15:49 +0000)]
White space only

14 years agoRetain InlinePragInfo on wrappers [Wed, 17 May 2006 15:47:25 +0000 (15:47 +0000)]
Retain InlinePragInfo on wrappers

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!

14 years agoSpelling correction [Wed, 17 May 2006 15:47:10 +0000 (15:47 +0000)]
Spelling correction

14 years agoRetain INLINE pragma information during indirection-shorting [Wed, 17 May 2006 15:44:49 +0000 (15:44 +0000)]
Retain INLINE pragma information during indirection-shorting

During indirection-shorting, we were dropping the InlinePragInfo,
although were were carefully retaining strictness info etc.
I think this is a long-standing bug.

14 years agoImprove pretty-printing [Wed, 17 May 2006 15:43:49 +0000 (15:43 +0000)]
Improve pretty-printing

14 years agoComments only [Wed, 17 May 2006 15:43:04 +0000 (15:43 +0000)]
Comments only

14 years agoImprove pretty-printing slightly [Wed, 17 May 2006 15:42:04 +0000 (15:42 +0000)]
Improve pretty-printing slightly

14 years agoLet GHCi work with with Sparc32+/V8+ .o files
Duncan Coutts [Tue, 16 May 2006 09:04:30 +0000 (09:04 +0000)]
Let GHCi work with with Sparc32+/V8+ .o files
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

14 years agomatch up more closely with compiler/main/DynFlags.hs:machdepCCOpts
Simon Marlow [Mon, 15 May 2006 09:00:31 +0000 (09:00 +0000)]
match up more closely with compiler/main/DynFlags.hs:machdepCCOpts
In particular, add -fno-builtin to x86 and x86_64, which was missing.

14 years agoset $(GhcVersion) and $(GhcPatchLevel) correctly when $(UseStage1)==YES
Simon Marlow [Wed, 10 May 2006 12:46:21 +0000 (12:46 +0000)]
set $(GhcVersion) and $(GhcPatchLevel) correctly when $(UseStage1)==YES

14 years ago.raw_s and .s live in $(odir), not the source dir
Simon Marlow [Wed, 10 May 2006 12:15:24 +0000 (12:15 +0000)]
.raw_s and .s live in $(odir), not the source dir

14 years agoadditions from Reilly Hayes
Simon Marlow [Wed, 10 May 2006 12:00:00 +0000 (12:00 +0000)]
additions from Reilly Hayes

14 years agosome tweaks to the HC bootstrapping instructions
Simon Marlow [Wed, 10 May 2006 11:52:36 +0000 (11:52 +0000)]
some tweaks to the HC bootstrapping instructions

14 years agoIgnore unboxed values in breakpoints.
Lemmih [Wed, 10 May 2006 07:27:22 +0000 (07:27 +0000)]
Ignore unboxed values in breakpoints.

14 years agoDon't read ~/.ghci on breakpoints.
Lemmih [Tue, 9 May 2006 22:34:55 +0000 (22:34 +0000)]
Don't read ~/.ghci on breakpoints.

14 years agomake it possible to define an alias for :quit
Simon Marlow [Tue, 9 May 2006 08:31:24 +0000 (08:31 +0000)]
make it possible to define an alias for :quit

14 years agoDo not put wired-in things in interface files [Mon, 8 May 2006 14:29:46 +0000 (14:29 +0000)]
Do not put wired-in things in interface files

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.)

14 years agoRemove NOINLINE strictness hack [Mon, 8 May 2006 14:28:34 +0000 (14:28 +0000)]
Remove NOINLINE strictness hack

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

Solving this by making all NOINLINE things have no strictness info is overkill.
In particular, it's overkill for runST, which is perfectly respectable.
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.

14 years agoTrim imports [Mon, 8 May 2006 14:18:04 +0000 (14:18 +0000)]
Trim imports

14 years agoTrim imports [Mon, 8 May 2006 14:17:13 +0000 (14:17 +0000)]
Trim imports

Simon Marlow [Mon, 8 May 2006 11:12:06 +0000 (11:12 +0000)]

14 years agoFix bug #763: Breakpoint mechanism crashes when there's a type error.
Lemmih [Fri, 5 May 2006 23:21:58 +0000 (23:21 +0000)]
Fix bug #763: Breakpoint mechanism crashes when there's a type error.

14 years agobreakpointCond
Lemmih [Tue, 2 May 2006 17:43:40 +0000 (17:43 +0000)]

14 years agoPreserve type variable names during type inference [Fri, 5 May 2006 15:37:53 +0000 (15:37 +0000)]
Preserve type variable names during type inference

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.

14 years agoTrim imports [Fri, 5 May 2006 15:05:06 +0000 (15:05 +0000)]
Trim imports

14 years agofixup for new source tree layout
Simon Marlow [Fri, 5 May 2006 11:41:00 +0000 (11:41 +0000)]
fixup for new source tree layout

14 years agoFPTOOLS_TOP-->GHC_TOP, and remove some references to "fptools"
Simon Marlow [Fri, 5 May 2006 11:05:20 +0000 (11:05 +0000)]
FPTOOLS_TOP-->GHC_TOP, and remove some references to "fptools"

14 years ago$(FPTOOLS_TOP) is now known as $(GHC_TOP)
Simon Marlow [Fri, 5 May 2006 11:01:27 +0000 (11:01 +0000)]
$(FPTOOLS_TOP) is now known as $(GHC_TOP)
I kept $(FPTOOLS_TOP) as an alias for $(GHC_TOP) while we switch

14 years agoupdate the build system documentation
Simon Marlow [Fri, 5 May 2006 10:58:43 +0000 (10:58 +0000)]
update the build system documentation

14 years agoupdate for new source tree layout
Simon Marlow [Fri, 5 May 2006 10:29:03 +0000 (10:29 +0000)]
update for new source tree layout

14 years agopartial update for new source tree layout
Simon Marlow [Fri, 5 May 2006 03:02:18 +0000 (03:02 +0000)]
partial update for new source tree layout

14 years agoupdate for new source tree layout (untested)
Simon Marlow [Fri, 5 May 2006 08:15:49 +0000 (08:15 +0000)]
update for new source tree layout (untested)

14 years agoPrint a more helpful error for find_thing [Thu, 4 May 2006 15:33:37 +0000 (15:33 +0000)]
Print a more helpful error for find_thing

14 years agoFix a bug in rule matching [Thu, 4 May 2006 11:24:30 +0000 (11:24 +0000)]
Fix a bug in rule matching

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.

14 years agoFix constructor-specialisation bug [Thu, 4 May 2006 11:21:31 +0000 (11:21 +0000)]
Fix constructor-specialisation bug

The constructor-specialisation optimisation was not dealing with the case
(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.

14 years agoFix precedence for records in derived Read [Thu, 4 May 2006 11:18:04 +0000 (11:18 +0000)]
Fix precedence for records in derived Read

The derived instance for Read of records wasn't quite right.
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

14 years agoMake rules available in RHS [Thu, 4 May 2006 11:15:00 +0000 (11:15 +0000)]
Make rules available in RHS

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!

14 years agoPretty printing instance for Unfolding [Thu, 4 May 2006 11:14:29 +0000 (11:14 +0000)]
Pretty printing instance for Unfolding

14 years agosmall clarification
Simon Marlow [Thu, 4 May 2006 10:34:14 +0000 (10:34 +0000)]
small clarification

14 years agosmall fix to booting instructions from #762
Simon Marlow [Thu, 4 May 2006 08:31:04 +0000 (08:31 +0000)]
small fix to booting instructions from #762

14 years ago$(ProjectNameShort) => ghc
Simon Marlow [Wed, 3 May 2006 10:24:19 +0000 (10:24 +0000)]
$(ProjectNameShort) => ghc

14 years agoonly pass -fno-unit-at-a-time to gcc if it is supported
Simon Marlow [Wed, 3 May 2006 09:36:14 +0000 (09:36 +0000)]
only pass -fno-unit-at-a-time to gcc if it is supported

14 years agoArrange that -fth is no longer implied by -fglasgow-exts [Wed, 26 Apr 2006 18:21:14 +0000 (18:21 +0000)]
Arrange that -fth is no longer implied by -fglasgow-exts

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.

14 years agoremove code not required in the new source tree layout
Simon Marlow [Tue, 2 May 2006 11:42:35 +0000 (11:42 +0000)]
remove code not required in the new source tree layout

14 years agomove "compat" earlier in the build for .hc bootstrapping
Simon Marlow [Tue, 2 May 2006 11:20:01 +0000 (11:20 +0000)]
move "compat" earlier in the build for .hc bootstrapping

14 years agofix ctime_r problem on Solaris (I hope)
Simon Marlow [Tue, 2 May 2006 11:12:31 +0000 (11:12 +0000)]
fix ctime_r problem on Solaris (I hope)

14 years agofix whitespace problem that shows up on Solaris (x86)
Simon Marlow [Tue, 2 May 2006 11:00:01 +0000 (11:00 +0000)]
fix whitespace problem that shows up on Solaris (x86)

14 years agolibraries/time is boring
Simon Marlow [Tue, 2 May 2006 10:55:24 +0000 (10:55 +0000)]
libraries/time is boring

14 years agoadd time package to libraries Makefile
Ashley Yakeley [Mon, 1 May 2006 09:22:41 +0000 (09:22 +0000)]
add time package to libraries Makefile

14 years agoadd time package to default-packages
Ashley Yakeley [Wed, 26 Apr 2006 07:04:45 +0000 (07:04 +0000)]
add time package to default-packages

14 years agoFix stage2 segfault on openbsd. [Fri, 28 Apr 2006 07:48:11 +0000 (07:48 +0000)]
Fix stage2 segfault on openbsd.

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.

14 years agofix quoting around ${FPTOOLS_TOP_ABS} (fixes #749)
Simon Marlow [Fri, 28 Apr 2006 08:52:52 +0000 (08:52 +0000)]
fix quoting around ${FPTOOLS_TOP_ABS} (fixes #749)

14 years agoFix bug shown in the mod77 test.
Lemmih [Thu, 27 Apr 2006 11:33:13 +0000 (11:33 +0000)]
Fix bug shown in the mod77 test.

14 years agoDon't init root pointers if they aren't gonna be used.
Lemmih [Wed, 26 Apr 2006 11:11:43 +0000 (11:11 +0000)]
Don't init root pointers if they aren't gonna be used.

14 years agoFix recompilation checking.
Simon Marlow [Tue, 25 Apr 2006 14:09:32 +0000 (14:09 +0000)]
Fix recompilation checking.
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.

14 years agoSolaris needs -lrt for the threaded RTS
Simon Marlow [Tue, 25 Apr 2006 08:28:23 +0000 (08:28 +0000)]
Solaris needs -lrt for the threaded RTS

14 years agofix problem with binary-dist docs
Simon Marlow [Mon, 24 Apr 2006 09:01:59 +0000 (09:01 +0000)]
fix problem with binary-dist docs

14 years agoEnable breakpoint support.
Lemmih [Fri, 21 Apr 2006 11:31:12 +0000 (11:31 +0000)]
Enable breakpoint support.

14 years agoFixing some lexer errors with extcore
Josef Svenningsson [Thu, 20 Apr 2006 22:26:25 +0000 (22:26 +0000)]
Fixing some lexer errors with extcore

14 years agoExtcore can now handle data types without constructors
Josef Svenningsson [Thu, 20 Apr 2006 21:36:22 +0000 (21:36 +0000)]
Extcore can now handle data types without constructors

14 years agoComments only
Josef Svenningsson [Thu, 20 Apr 2006 21:35:55 +0000 (21:35 +0000)]
Comments only

14 years agoResurrect ProjectName [Fri, 21 Apr 2006 08:51:25 +0000 (08:51 +0000)]
Resurrect ProjectName

14 years agoRemove the section on platform support, link to the wiki page
Simon Marlow [Thu, 20 Apr 2006 12:55:55 +0000 (12:55 +0000)]
Remove the section on platform support, link to the wiki page
The section in the building guide was becoming out of date, a wiki
page is much more likely to be kept fresh.

14 years agoFix workaround for a GHC 6.4 bug [Thu, 20 Apr 2006 04:42:23 +0000 (04:42 +0000)]
Fix workaround for a GHC 6.4 bug

14 years agohslibs is dead, Jim... [Wed, 19 Apr 2006 14:46:09 +0000 (14:46 +0000)]
hslibs is dead, Jim...

14 years agoSynched .spec file with reality [Wed, 19 Apr 2006 14:31:38 +0000 (14:31 +0000)]
Synched .spec file with reality

14 years agoAdd .spec file to source distribution [Wed, 19 Apr 2006 10:37:25 +0000 (10:37 +0000)]
Add .spec file to source distribution

14 years agoremove paragraph about mutable objects that doesn't apply now
Simon Marlow [Wed, 19 Apr 2006 08:20:38 +0000 (08:20 +0000)]
remove paragraph about mutable objects that doesn't apply now

14 years agoHsBool should be HsInt, not StgBool
Simon Marlow [Tue, 18 Apr 2006 14:42:14 +0000 (14:42 +0000)]
HsBool should be HsInt, not StgBool
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.

14 years agohandle Bool arg to foreign import "wrapper"
Simon Marlow [Tue, 18 Apr 2006 14:39:36 +0000 (14:39 +0000)]
handle Bool arg to foreign import "wrapper"
Fixes #746

14 years agoupdate commentry for foreign import "wrapper" handling
Simon Marlow [Tue, 18 Apr 2006 14:37:14 +0000 (14:37 +0000)]
update commentry for foreign import "wrapper" handling

14 years agoremove vestiges of ByteArray and MutableByteArray, which are no more
Simon Marlow [Tue, 18 Apr 2006 14:36:41 +0000 (14:36 +0000)]
remove vestiges of ByteArray and MutableByteArray, which are no more

14 years agoComment only [Tue, 18 Apr 2006 12:56:24 +0000 (12:56 +0000)]
Comment only

14 years agoFix rank-validity testing [Tue, 18 Apr 2006 12:53:50 +0000 (12:53 +0000)]
Fix rank-validity testing

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.

14 years agoMake the initial rdr and type scope available in the ghc-api.
Lemmih [Tue, 18 Apr 2006 02:36:06 +0000 (02:36 +0000)]
Make the initial rdr and type scope available in the ghc-api.

14 years agoFix minor bug in Linker.withExtendedLinkEnv
Lemmih [Tue, 18 Apr 2006 02:35:18 +0000 (02:35 +0000)]
Fix minor bug in Linker.withExtendedLinkEnv

14 years agoExport 'insertSymbol' and 'insertStableSymbol'.
Lemmih [Tue, 18 Apr 2006 02:18:06 +0000 (02:18 +0000)]
Export 'insertSymbol' and 'insertStableSymbol'.

'insertStableSymbol' is used for exporting closures that are affected by the GC.

14 years agoAllow $x, as well as $(x), at top level in TH [Fri, 14 Apr 2006 12:19:07 +0000 (12:19 +0000)]
Allow $x, as well as $(x), at top level in TH

Bulat pointed out that in Template Haskell
is allowed instead of
in expressions, but not at the top level of modules.

This commit fixes the omission.  Now you can say

f x = x
data T = T

and the $h will run Template Haskell just as you'd expect.

14 years agoFix TH erorr recovery (test is TH_recover) [Fri, 14 Apr 2006 12:04:11 +0000 (12:04 +0000)]
Fix TH erorr recovery (test is TH_recover)

14 years agoComments only [Fri, 14 Apr 2006 12:03:59 +0000 (12:03 +0000)]
Comments only

14 years agoRecover gracefully from a Template Haskell programmers error [Fri, 14 Apr 2006 11:58:31 +0000 (11:58 +0000)]
Recover gracefully from a Template Haskell programmers error

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.

14 years agoDocument newtype-unwrapping for IO in FFI [Fri, 14 Apr 2006 10:52:12 +0000 (10:52 +0000)]
Document newtype-unwrapping for IO in FFI

14 years agoCosmetics in SpecConstr [Wed, 12 Apr 2006 15:27:21 +0000 (15:27 +0000)]
Cosmetics in SpecConstr

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.

14 years agoImprove pruning of case alternatives to account for GADTs [Wed, 12 Apr 2006 15:23:27 +0000 (15:23 +0000)]
Improve pruning of case alternatives to account for GADTs


  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

The proximate cause was a program written by Manuel using PArrays

14 years agoFix a bug in optimising division to shift right
Simon Marlow [Wed, 12 Apr 2006 14:42:47 +0000 (14:42 +0000)]
Fix a bug in optimising division to shift right
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.

14 years agoOmit lndir on Windows, as it used to be [Tue, 11 Apr 2006 13:53:34 +0000 (13:53 +0000)]
Omit lndir on Windows, as it used to be

14 years agoremove a trace
Simon Marlow [Tue, 11 Apr 2006 13:15:31 +0000 (13:15 +0000)]
remove a trace

14 years agoAllow IO to be wrapped in a newtype in foreign import/export [Tue, 11 Apr 2006 12:04:41 +0000 (12:04 +0000)]
Allow IO to be wrapped in a newtype in foreign import/export

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

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",
   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.