simonpj [Fri, 15 Feb 2002 09:32:47 +0000 (09:32 +0000)]
[project @ 2002-02-15 09:32:47 by simonpj]
Comments only
simonpj [Fri, 15 Feb 2002 09:32:18 +0000 (09:32 +0000)]
[project @ 2002-02-15 09:32:18 by simonpj]
-------------------------------------------------
Fix an interesting case-alternatives filtering bug
-------------------------------------------------
This bug, shown up by Krasimir's ObjectIO suite, caused the
simplifier to encounter a case expression like
case x of { x:xs -> True; [] -> False }
in a context where x could not possibly be either a (:) or []!
Case expressions in the enclosing scope dealt with it...
So the alternative-filtering removed all the alternatives, leaving
a case expression with no branches, which GHC didn't like one little
bit.
The actual bug was elsewhere; it was because we should sometimes
filter out the DEFAULT alternative, and we weren't doing that.
To fix it, I pulled the alternative-filtering code out of Simplify
and put it in SimplUtils.prepareAlts. It's nice now.
sof [Fri, 15 Feb 2002 08:11:42 +0000 (08:11 +0000)]
[project @ 2002-02-15 08:11:42 by sof]
drop -mwin32 filtering
sof [Fri, 15 Feb 2002 08:10:44 +0000 (08:10 +0000)]
[project @ 2002-02-15 08:10:44 by sof]
mingw: drop the use of -mwin32 in CC_OPTS; no longer needed
sof [Fri, 15 Feb 2002 07:50:37 +0000 (07:50 +0000)]
[project @ 2002-02-15 07:50:36 by sof]
Tighten up the Scheduler synchronisation story some more:
- moved thread_ready_cond + the counter rts_n_waiting_tasks
to Capability.c, leaving only sched_mutex as a synchro
variable in Scheduler (the less stuff that inhabit
Schedule.c, the better, methinks.)
- upon entry to the Scheduler, a worker thread will now call
Capability.yieldToReturningWorker() to check whether it
needs to give up its capability.
- Worker threads that are either idle or lack a capability,
will now call Capability.waitForWorkCapability() and block.
sof [Fri, 15 Feb 2002 07:40:10 +0000 (07:40 +0000)]
[project @ 2002-02-15 07:40:10 by sof]
Use scheduleExtThread() (see
20020214 commit msg for SchedAPI.h for details)
sof [Fri, 15 Feb 2002 07:38:45 +0000 (07:38 +0000)]
[project @ 2002-02-15 07:38:45 by sof]
wibble
sof [Fri, 15 Feb 2002 07:37:55 +0000 (07:37 +0000)]
[project @ 2002-02-15 07:37:55 by sof]
Distinguish between the scheduling of a new thread from within
the RTS (e.g., via forkIO, running finalizers etc) and scheduling
of a thread that's created via the RtsAPI -- the latter
now uses scheduleExtThread(), the rest scheduleThread().
Why the distinction? Because the former will in threaded builds create
a worker OS thread, while the latter won't. (There's an added
wrinkle -- main() will also use scheduleThread()).
sof [Fri, 15 Feb 2002 07:23:02 +0000 (07:23 +0000)]
[project @ 2002-02-15 07:23:02 by sof]
Add rts_mainEvalIO proto
sof [Thu, 14 Feb 2002 18:20:37 +0000 (18:20 +0000)]
[project @ 2002-02-14 18:20:37 by sof]
more comments
sof [Thu, 14 Feb 2002 17:21:50 +0000 (17:21 +0000)]
[project @ 2002-02-14 17:21:50 by sof]
widen the scope of is_heap_alloced() proto; for all mingw builds
sof [Thu, 14 Feb 2002 17:17:08 +0000 (17:17 +0000)]
[project @ 2002-02-14 17:17:08 by sof]
COMPILING_RTS wasn't being fed to the C compiler. It is arguably a
bug/feature deficiency of GHC not to do the Right Thing for invocations
such as these:
ghc -c -DFOO foo.c
i.e., pass -DFOO to the C compiler -- currently, you have to be explicit
about this, -optc-DFOO
sof [Thu, 14 Feb 2002 16:58:13 +0000 (16:58 +0000)]
[project @ 2002-02-14 16:58:13 by sof]
as per simonpj request, add mingw protos to avoid -Wmissing-declarations warnings
sof [Thu, 14 Feb 2002 16:55:07 +0000 (16:55 +0000)]
[project @ 2002-02-14 16:55:07 by sof]
resetNonBlockingFd, setNonBlockingFd: mingw tidyup
sof [Thu, 14 Feb 2002 16:24:59 +0000 (16:24 +0000)]
[project @ 2002-02-14 16:24:59 by sof]
extsBitmap handling: avoid using Int instance for Bits (may not be there; cf. 4.08), use Int32 instead
simonmar [Thu, 14 Feb 2002 15:51:30 +0000 (15:51 +0000)]
[project @ 2002-02-14 15:51:30 by simonmar]
oops, got the sense of an ifdef round the wrong way.
simonmar [Thu, 14 Feb 2002 15:14:02 +0000 (15:14 +0000)]
[project @ 2002-02-14 15:14:00 by simonmar]
Fixes to 'make install' in fptools/libraries. We have to maintain the
directory structure when installing the .hi files, rather than just
dumping them in a single directory as we do for packages in
fptools/hslibs.
simonmar [Thu, 14 Feb 2002 15:11:28 +0000 (15:11 +0000)]
[project @ 2002-02-14 15:11:28 by simonmar]
fix typo: PKG_CPP_OPTS ==> PACKAGE_CPP_OPTS (fixes linking libgmp)
simonpj [Thu, 14 Feb 2002 15:08:08 +0000 (15:08 +0000)]
[project @ 2002-02-14 15:08:08 by simonpj]
-------------------------------------------------
Undo an earlier hack in postInlineUnconditionally
-------------------------------------------------
In an earlier era I made postInlineUnconditionally rather less
aggressive; it didn't inline even trivial things unless they
occurred just once. THis was a hack designed to avoid rules
unexpectedly not firing. But now we have much more control
over rules, through the phase numbering stuff, so I can undo the
hack.
Well, so I believe. Manuel, yell if your rules stop working!
simonpj [Thu, 14 Feb 2002 15:03:38 +0000 (15:03 +0000)]
[project @ 2002-02-14 15:03:38 by simonpj]
------------------------------------
Desugar existential matches correctly
------------------------------------
Consider
data T = forall a. Ord a => T a (a->Int)
f (T x f) True = ...expr1...
f (T y g) False = ...expr2..
When we put in the tyvars etc we get
f (T a (d::Ord a) (x::a) (f::a->Int)) True = ...expr1...
f (T b (e::Ord a) (y::a) (g::a->Int)) True = ...expr2...
After desugaring etc we'll get a single case:
f = \t::T b::Bool ->
case t of
T a (d::Ord a) (x::a) (f::a->Int)) ->
case b of
True -> ...expr1...
False -> ...expr2...
*** We have to substitute [a/b, d/e] in expr2! **
Originally I tried to use
(\b -> let e = d in expr2) a
to do this substitution. While this is "correct" in a way, it fails
Lint, because e::Ord b but d::Ord a.
So now I simply do the substitution properly using substExpr.
simonpj [Thu, 14 Feb 2002 14:56:04 +0000 (14:56 +0000)]
[project @ 2002-02-14 14:56:04 by simonpj]
---------------------------------------
Record updates are ok for types involving
existential data constructors, so long as the
existential ones aren't the ones updated.
---------------------------------------
This check was already in the type checker, but
the desugarer had an over-zealous assert.
simonpj [Thu, 14 Feb 2002 14:02:55 +0000 (14:02 +0000)]
[project @ 2002-02-14 14:02:55 by simonpj]
---------------------------------------
Stop CSE messing up workers annotations
---------------------------------------
See the comments with CSE.do_one
simonpj [Thu, 14 Feb 2002 14:01:40 +0000 (14:01 +0000)]
[project @ 2002-02-14 14:01:40 by simonpj]
Do tcSub the right way round for pattern type signatures
simonpj [Thu, 14 Feb 2002 14:01:10 +0000 (14:01 +0000)]
[project @ 2002-02-14 14:01:09 by simonpj]
Do tcMonoExpr instead of tcExpr, here and there
simonpj [Thu, 14 Feb 2002 13:59:24 +0000 (13:59 +0000)]
[project @ 2002-02-14 13:59:22 by simonpj]
Import wibbles
njn [Thu, 14 Feb 2002 11:56:05 +0000 (11:56 +0000)]
[project @ 2002-02-14 11:56:03 by njn]
This commit affects ticky-ticky profiling. Entry counts for thunks,
constructors, functions (standard and direct) and indirections are split into
two counters, one for entries to static closures and one for entries to dynamic
closures.
This required changing ticky-ticky details in the RTS (introducing new counters
and corresponding TICK_* events), and also changing the code generator to
generate the new event names (eg. TICK_ENT_THK is replaced by
TICK_ENT_STATIC_THK and TICK_ENT_DYN_THK).
sof [Thu, 14 Feb 2002 09:00:41 +0000 (09:00 +0000)]
[project @ 2002-02-14 09:00:41 by sof]
make multi-threading story work under win32 also
sof [Thu, 14 Feb 2002 08:59:29 +0000 (08:59 +0000)]
[project @ 2002-02-14 08:59:29 by sof]
debugged
sof [Thu, 14 Feb 2002 08:23:26 +0000 (08:23 +0000)]
[project @ 2002-02-14 08:23:25 by sof]
Right, that's it! Nuke rawSystem nonsense, as it turns
out the SysTools replacement for it wasn't 4.08 compatible,
hence nightly build break.
Should you bootstrap with 4.08 under mingw, and subseq.
do a stage2 build, you'll run into command-line length
probs during the final big linker invocation. Nothing
to lose sleep over, there are plenty of newer versions
to base a stage1 build on.
sof [Thu, 14 Feb 2002 07:55:47 +0000 (07:55 +0000)]
[project @ 2002-02-14 07:55:47 by sof]
import SystemExts.rawSystem in mingw builds only
sof [Thu, 14 Feb 2002 07:52:05 +0000 (07:52 +0000)]
[project @ 2002-02-14 07:52:05 by sof]
Restructured / tidied a bit:
* Capability.grabReturnCapability() is now called by resumeThread().
It takes care of waiting on the (Capability.c-local) condition
variable, 'returning_worker_cond' (moved here from Schedule.c)
* If a worker notices upon entry to the Scheduler that there are
worker threads waiting to deposit results of external calls,
it gives up its capability by calling Capability.yieldCapability().
* Added Scheduler.waitForWork(), which takes care of blocking
on 'thread_ready_cond' (+ 'rts_n_waiting_tasks' book-keeping).
Note: changes haven't been fully tested, due to HEAD instability.
sof [Thu, 14 Feb 2002 07:40:17 +0000 (07:40 +0000)]
[project @ 2002-02-14 07:40:17 by sof]
win32: make it compile
sof [Thu, 14 Feb 2002 07:39:16 +0000 (07:39 +0000)]
[project @ 2002-02-14 07:39:16 by sof]
wibble
sof [Wed, 13 Feb 2002 20:14:42 +0000 (20:14 +0000)]
[project @ 2002-02-13 20:14:41 by sof]
The days of main/rawSystem.c and (its use in) main/SysTools.lhs are
almost up..for now, don't bother copying it in if we're booting
with 5.02 or later (which we are under mingw, which is the only
plat. where this hack matters).
sof [Wed, 13 Feb 2002 19:43:47 +0000 (19:43 +0000)]
[project @ 2002-02-13 19:43:46 by sof]
Use SGML_CATALOG_FILES, if defined
sof [Wed, 13 Feb 2002 19:42:38 +0000 (19:42 +0000)]
[project @ 2002-02-13 19:42:38 by sof]
FPTOOLS_DOCBOOK_CATALOG: check whether the SGML_CATALOG_FILES env var is
defined. If it is, treat it as gospel.
simonmar [Wed, 13 Feb 2002 15:57:19 +0000 (15:57 +0000)]
[project @ 2002-02-13 15:57:19 by simonmar]
print comes from System.IO these days
simonmar [Wed, 13 Feb 2002 15:56:18 +0000 (15:56 +0000)]
[project @ 2002-02-13 15:56:18 by simonmar]
Refer to stdout as IO.stdout, not PrelHandle.stdout, and similarly for stderr.
simonmar [Wed, 13 Feb 2002 15:48:03 +0000 (15:48 +0000)]
[project @ 2002-02-13 15:48:03 by simonmar]
Build $(GHCI_LIBRARY) whenever we build $(LIBRARY), not just when
$(PACAGE) is set.
simonmar [Wed, 13 Feb 2002 15:45:25 +0000 (15:45 +0000)]
[project @ 2002-02-13 15:45:25 by simonmar]
Packages that come in by way of -package-conf files override default
packages (requested by Manuel Chakravarty).
sof [Wed, 13 Feb 2002 15:29:27 +0000 (15:29 +0000)]
[project @ 2002-02-13 15:29:27 by sof]
Tweaks to the Windows section, in part. commented out
the InstallShield section as it is no longer used.
simonpj [Wed, 13 Feb 2002 15:19:21 +0000 (15:19 +0000)]
[project @ 2002-02-13 15:19:17 by simonpj]
----------------------------------
Do the Right Thing for TyCons where we
can't see all their constructors.
----------------------------------
Inside a TyCon, three things can happen
1. GHC knows all the constructors, and has them to hand.
(Nowadays, there may be zero constructors.)
2. GHC knows all the constructors, but has declined to slurp
them all in, to avoid sucking in more declarations than
necessary. All we remember is the number of constructors,
so we can get the return convention right.
3. GHC doesn't know anything. This happens *only* for decls
coming from .hi-boot files, where the programmer declines to
supply a representation.
Until now, these three cases have been conflated together. Matters
are worse now that a TyCon really can have zero constructors. In
fact, by confusing (3) with (1) we can actually generate bogus code.
With this commit, the dataCons field of a TyCon is of type:
data DataConDetails datacon
= DataCons [datacon] -- Its data constructors, with fully polymorphic types
-- A type can have zero constructors
| Unknown -- We're importing this data type from an hi-boot file
-- and we don't know what its constructors are
| HasCons Int -- In a quest for compilation speed we have imported
-- only the number of constructors (to get return
-- conventions right) but not the constructors themselves
This says exactly what is going on. There are lots of consequential small
changes.
simonpj [Wed, 13 Feb 2002 15:14:07 +0000 (15:14 +0000)]
[project @ 2002-02-13 15:14:06 by simonpj]
--------------------------------------------
Fix a bugs in type inference for rank-N types
--------------------------------------------
We discovered this bug when looking at type rules!
1. When type checking (e :: sigma-ty), we must specialise sigma-ty,
else we lose the invariant that tcMonoType has.
2. In tcExpr_id, we should pass in a Hole tyvar not an ordinary tyvar.
As usual, I moved some functions around in consequence.
simonmar [Wed, 13 Feb 2002 15:08:00 +0000 (15:08 +0000)]
[project @ 2002-02-13 15:07:59 by simonmar]
Don't translate out negative (boxed) literals too early.
simonmar [Wed, 13 Feb 2002 14:52:43 +0000 (14:52 +0000)]
[project @ 2002-02-13 14:52:43 by simonmar]
Catch up with Haskell 98 revisions: allow sections like (++ x ++ y)
and (3 + 4 +).
simonpj [Wed, 13 Feb 2002 14:14:09 +0000 (14:14 +0000)]
[project @ 2002-02-13 14:14:09 by simonpj]
------------------------------
Fix the "occurs check" so that
it handles unifying a type variable
with a type scheme
------------------------------
It's illegal to unify a type variable with a type scheme:
a :=: (forall b. b->b) -> Int
But I wasn't detecting that properly. Now, the same code
that does the occurs check also looks for foralls.
simonpj [Wed, 13 Feb 2002 14:06:00 +0000 (14:06 +0000)]
[project @ 2002-02-13 14:05:50 by simonpj]
Import wibbles
simonmar [Wed, 13 Feb 2002 12:17:48 +0000 (12:17 +0000)]
[project @ 2002-02-13 12:17:48 by simonmar]
Add {-# OPTIONS -fno-implicit-prelude #-} to the top of GHC/PrimopWrappers.hs
simonmar [Wed, 13 Feb 2002 11:51:40 +0000 (11:51 +0000)]
[project @ 2002-02-13 11:51:40 by simonmar]
- Detect presence of a POSIX-compatible regex interface in configure,
and omit Text.Regex.Posix (and hence Text.Regex) if it is missing.
ToDo: pull in a suitably-licensed implementation of POSIX regex
to be used in the event that the system doesn't supply one.
- Rename old HaveRegex to HaveGNURegex.
simonmar [Wed, 13 Feb 2002 10:45:28 +0000 (10:45 +0000)]
[project @ 2002-02-13 10:45:28 by simonmar]
Use --update-package rather than --remove-package followed by --add-package
simonmar [Wed, 13 Feb 2002 10:40:24 +0000 (10:40 +0000)]
[project @ 2002-02-13 10:40:24 by simonmar]
Fixes to SplitObjs: we now put the split object files in a
subdirectory M_split/ rather than just M/, because the latter
interacts badly with our hierarchical module structure.
simonpj [Wed, 13 Feb 2002 10:39:36 +0000 (10:39 +0000)]
[project @ 2002-02-13 10:39:36 by simonpj]
-------------------------------
dosifyPath before opening files
-------------------------------
If you call
hsc2hs foo/baz
you get the amazing response:
'foo' is not recognized as an internal or external command,
operable program or batch file.
On the other hand
hsc2hs foo\baz
works fine. Solution: call dosifyPath before opening or writing the file.
Somehow we should make it less easy to trip up when doing file I/O on
Windows. And provide a library of path-manipulation primitives.
sof [Wed, 13 Feb 2002 08:48:07 +0000 (08:48 +0000)]
[project @ 2002-02-13 08:48:06 by sof]
Revised implementation of multi-threaded callouts (and callins):
- unified synchronisation story for threaded and SMP builds,
following up on SimonM's suggestion. The following synchro
variables are now used inside the Scheduler:
+ thread_ready_cond - condition variable that is signalled
when a H. thread has become runnable (via the THREAD_RUNNABLE()
macro) and there are available capabilities. Waited on:
+ upon schedule() entry (iff no caps. available).
+ when a thread inside of the Scheduler spots that there
are no runnable threads to service, but one or more
external call is in progress.
+ in resumeThread(), waiting for a capability to become
available.
Prior to waiting on thread_ready_cond, a counter rts_n_waiting_tasks
is incremented, so that we can keep track of the number of
readily available worker threads (need this in order to make
an informed decision on whether or not to create a new thread
when an external call is made).
+ returning_worker_cond - condition variable that is waited
on by an OS thread that has finished executing and external
call & now want to feed its result back to the H thread
that made the call. Before doing so, the counter
rts_n_returning_workers is incremented.
Upon entry to the Scheduler, this counter is checked for &
if it is non-zero, the thread gives up its capability and
signals returning_worker_cond before trying to re-grab a
capability. (releaseCapability() takes care of this).
+ sched_mutex - protect Scheduler data structures.
+ gc_pending_cond - SMP-only condition variable for signalling
completion of GCs.
- initial implementation of call-ins, i.e., multiple OS threads
may concurrently call into the RTS without interfering with
each other. Implementation uses cheesy locking protocol to
ensure that only one OS thread at a time can construct a
function application -- stop-gap measure until the RtsAPI
is revised (as discussed last month) *and* a designated
block is used for allocating these applications.
- In the implementation of call-ins, the OS thread blocks
waiting for an RTS worker thread to complete the evaluation
of the function application. Since main() also uses the
RtsAPI, provide a separate entry point for it (rts_mainEvalIO()),
which avoids creating a separate thread to evaluate Main.main,
that can be done by the thread exec'ing main() directly.
[Maybe there's a tidier way of doing this, a bit ugly the
way it is now..]
There are a couple of dark corners that needs to be looked at,
such as conditions for shutting down (and how) + consider what
ought to happen when async I/O is thrown into the mix (I know
what will happen, but that's maybe not what we want).
Other than that, things are in a generally happy state & I hope
to declare myself done before the week is up.
sof [Wed, 13 Feb 2002 07:51:01 +0000 (07:51 +0000)]
[project @ 2002-02-13 07:51:01 by sof]
removed taskNotAvailable(), taskAvailable() and getTaskCount() - simplified away
sof [Wed, 13 Feb 2002 07:48:19 +0000 (07:48 +0000)]
[project @ 2002-02-13 07:48:18 by sof]
moved defn of RTS_SUPPORTS_THREADS from Rts.h to Stg.h
sof [Wed, 13 Feb 2002 07:47:41 +0000 (07:47 +0000)]
[project @ 2002-02-13 07:47:41 by sof]
uh, make that the StgTSOBlockReason enum
sof [Wed, 13 Feb 2002 07:46:42 +0000 (07:46 +0000)]
[project @ 2002-02-13 07:46:42 by sof]
Add BlockedOnCCall to StgTSOBlockInfo enum
njn [Tue, 12 Feb 2002 17:20:36 +0000 (17:20 +0000)]
[project @ 2002-02-12 17:20:36 by njn]
Added note about the mangler removing unneeded SRTs.
simonmar [Tue, 12 Feb 2002 16:55:22 +0000 (16:55 +0000)]
[project @ 2002-02-12 16:55:22 by simonmar]
Must add 'depend' before 'all' in the boot target so that we get
dependencies in time.
simonmar [Tue, 12 Feb 2002 16:52:37 +0000 (16:52 +0000)]
[project @ 2002-02-12 16:52:37 by simonmar]
This isn't needed any more
simonmar [Tue, 12 Feb 2002 15:45:46 +0000 (15:45 +0000)]
[project @ 2002-02-12 15:45:46 by simonmar]
Use LIBOBJS rather than OBJS when building the GHCi library.
sof [Tue, 12 Feb 2002 15:39:49 +0000 (15:39 +0000)]
[project @ 2002-02-12 15:39:49 by sof]
THREAD_RUNNABLE(): make available in threaded mode
sof [Tue, 12 Feb 2002 15:38:08 +0000 (15:38 +0000)]
[project @ 2002-02-12 15:38:08 by sof]
Snapshot (before heading into work):
- thread_ready_aux_mutex is no more; use sched_mutex instead.
- gc_pending_cond only used in SMP mode.
- document the condition that thread_ready_cond captures.
sof [Tue, 12 Feb 2002 15:34:25 +0000 (15:34 +0000)]
[project @ 2002-02-12 15:34:25 by sof]
- give rts_n_free_capabilities an interpretation
in threaded mode (possible values: 0,1)
- noFreeCapabilities() -? noCapabilities()
simonmar [Tue, 12 Feb 2002 15:17:36 +0000 (15:17 +0000)]
[project @ 2002-02-12 15:17:13 by simonmar]
Switch over to the new hierarchical libraries
---------------------------------------------
This commit reorganises our libraries to use the new hierarchical
module namespace extension.
The basic story is this:
- fptools/libraries contains the new hierarchical libraries.
Everything in here is "clean", i.e. most deprecated stuff has
been removed.
- fptools/libraries/base is the new base package
(replacing "std") and contains roughly what was previously
in std, lang, and concurrent, minus deprecated stuff.
Things that are *not allowed* in libraries/base include:
Addr, ForeignObj, ByteArray, MutableByteArray,
_casm_, _ccall_, ``'', PrimIO
For ByteArrays and MutableByteArrays we use UArray and
STUArray/IOUArray respectively now.
Modules previously called PrelFoo are now under
fptools/libraries/GHC. eg. PrelBase is now GHC.Base.
- fptools/libraries/haskell98 provides the Haskell 98 std.
libraries (Char, IO, Numeric etc.) as a package. This
package is enabled by default.
- fptools/libraries/network is a rearranged version of
the existing net package (the old package net is still
available; see below).
- Other packages will migrate to fptools/libraries in
due course.
NB. you need to checkout fptools/libraries as well as
fptools/hslibs now. The nightly build scripts will need to be
tweaked.
- fptools/hslibs still contains (almost) the same stuff as before.
Where libraries have moved into the new hierarchy, the hslibs
version contains a "stub" that just re-exports the new version.
The idea is that code will gradually migrate from fptools/hslibs
into fptools/libraries as it gets cleaned up, and in a version or
two we can remove the old packages altogether.
- I've taken the opportunity to make some changes to the build
system, ripping out the old hslibs Makefile stuff from
mk/target.mk; the new package building Makefile code is in
mk/package.mk (auto-included from mk/target.mk).
The main improvement is that packages now register themselves at
make boot time using ghc-pkg, and the monolithic package.conf
in ghc/driver is gone.
I've updated the standard packages but haven't tested win32,
graphics, xlib, object-io, or OpenGL yet. The Makefiles in
these packages may need some further tweaks, and they'll need
pkg.conf.in files added.
- Unfortunately all this rearrangement meant I had to bump the
interface-file version and create a bunch of .hi-boot-6 files :-(
simonmar [Tue, 12 Feb 2002 11:44:54 +0000 (11:44 +0000)]
[project @ 2002-02-12 11:44:54 by simonmar]
Fix bug in previous commit
simonmar [Tue, 12 Feb 2002 09:43:08 +0000 (09:43 +0000)]
[project @ 2002-02-12 09:43:08 by simonmar]
fromInt ==> fromIntegral
sof [Tue, 12 Feb 2002 05:01:26 +0000 (05:01 +0000)]
[project @ 2002-02-12 05:01:26 by sof]
bring stuff in parallel/ into scope when running 'mkdependC'
sof [Tue, 12 Feb 2002 04:49:13 +0000 (04:49 +0000)]
[project @ 2002-02-12 04:49:13 by sof]
comment wibble
chak [Tue, 12 Feb 2002 03:52:09 +0000 (03:52 +0000)]
[project @ 2002-02-12 03:52:08 by chak]
This fixes a problem with the recent clean up in the parsing of type
declarations. The cleaned up version was correct by H98 (I think), but
unfortunately won't compile the Prelude anymore.
I made the definition a little bit more liberal as follows:
- In `tycl_hdr' allow `gtycon' instead of just `tycon' for the defined type
constructor. This allows beyond H98 special syntax like "[]" etc as well as
tycon ops in parenthesis. Moreover, it allows qualified names, but the
renamer flags the latter as errors.
- Allow `gtycon' instead of only `qtycon' for the class name in definitions of
the form `Eq a => T a' to avoid a whole list of s/r conflicts. (I have *not*
checked that the renamer flags misuse, but I would expect that it does.)
ToDo: I think, the renamer should raise an error for all these additional
forms *unless* -fglasgow-exts is given.
In PrelBase, I needed to replace the infix notation by prefix notation in the
definition of `:+:' and `:*:'.
simonmar [Mon, 11 Feb 2002 16:03:36 +0000 (16:03 +0000)]
[project @ 2002-02-11 16:03:36 by simonmar]
- Addr ==> Ptr
- Don't directly import PrelIOBase & PrelBase
simonmar [Mon, 11 Feb 2002 15:48:58 +0000 (15:48 +0000)]
[project @ 2002-02-11 15:48:58 by simonmar]
fromInt ==> fromIntegral
simonpj [Mon, 11 Feb 2002 15:41:18 +0000 (15:41 +0000)]
[project @ 2002-02-11 15:41:18 by simonpj]
Wibble
simonmar [Mon, 11 Feb 2002 15:23:12 +0000 (15:23 +0000)]
[project @ 2002-02-11 15:23:12 by simonmar]
Fix lexer bug: we didn't look far enough ahead when parsing 1.0e+x
(i.e. the e+x shouldn't be treated as an exponent).
simonpj [Mon, 11 Feb 2002 15:21:20 +0000 (15:21 +0000)]
[project @ 2002-02-11 15:21:20 by simonpj]
Documentation for kinded declarations
simonpj [Mon, 11 Feb 2002 15:16:27 +0000 (15:16 +0000)]
[project @ 2002-02-11 15:16:25 by simonpj]
----------------------------------
Implement kinded type declarations
----------------------------------
This commit allows the programmer to supply kinds in
* data decls
* type decls
* class decls
* 'forall's in types
e.g. data T (x :: *->*) = MkT
type Composer c = forall (x :: * -> *) (y :: * -> *) (z :: * -> *).
(c y z) -> (c x y) -> (c x z);
This is occasionally useful.
It turned out to be convenient to add the form
(type :: kind)
to the syntax of types too, so you can put kind signatures in types as well.
simonmar [Mon, 11 Feb 2002 14:52:11 +0000 (14:52 +0000)]
[project @ 2002-02-11 14:52:11 by simonmar]
fromInt ==> fromIntegral
chak [Mon, 11 Feb 2002 14:42:54 +0000 (14:42 +0000)]
[project @ 2002-02-11 14:42:53 by chak]
Documentation for the parallel array extension merged earlier. (This
documents Milestone 1 as well as some of the basics of flattening.)
simonmar [Mon, 11 Feb 2002 13:59:01 +0000 (13:59 +0000)]
[project @ 2002-02-11 13:59:01 by simonmar]
Add a missing dependency (submitted by Volker Stolz; thanks)
simonpj [Mon, 11 Feb 2002 09:27:22 +0000 (09:27 +0000)]
[project @ 2002-02-11 09:27:21 by simonpj]
------------------------------
Towards kinded data type decls
------------------------------
Move towards being able to have 'kinded' data type decls.
The burden of this commit, though, is to tidy up the parsing
of data type decls. Previously we had
data ctype '=' constrs
where the 'ctype' is a completetely general polymorphic type.
forall a. (Eq a) => T a
Then a separate function checked that it was of a suitably restricted
form. The reason for this is the usual thing --- it's hard to tell
when looking at
data Eq a => T a = ...
whether you are reading the data type or the context when you have
only got as far as 'Eq a'.
However, the 'ctype' trick doesn't work if we want to allow
data T (a :: * -> *) = ...
So we have to parse the data type decl in a more serious way.
That's what this commit does, and it makes the grammar look much nicer.
The main new producion is tycl_hdr.
simonpj [Mon, 11 Feb 2002 09:21:52 +0000 (09:21 +0000)]
[project @ 2002-02-11 09:21:52 by simonpj]
Remove unused rules
chak [Mon, 11 Feb 2002 08:58:43 +0000 (08:58 +0000)]
[project @ 2002-02-11 08:58:43 by chak]
Updated to the use of [~N] in rules implementing foldr/build.
chak [Mon, 11 Feb 2002 08:20:50 +0000 (08:20 +0000)]
[project @ 2002-02-11 08:20:38 by chak]
*******************************
* Merging from ghc-ndp-branch *
*******************************
This commit merges the current state of the "parallel array extension" and
includes the following:
* (Almost) completed Milestone 1:
- The option `-fparr' activates the H98 extension for parallel arrays.
- These changes have a high likelihood of conflicting (in the CVS sense)
with other changes to GHC and are the reason for merging now.
- ToDo: There are still some (less often used) functions not implemented in
`PrelPArr' and a mechanism is needed to automatically import
`PrelPArr' iff `-fparr' is given. Documentation that should go into
the Commentary is currently in `ghc/compiler/ndpFlatten/TODO'.
* Partial Milestone 2:
- The option `-fflatten' activates the flattening transformation and `-ndp'
selects the "ndp" way (where all libraries have to be compiled with
flattening). The way option `-ndp' automagically turns on `-fparr' and
`-fflatten'.
- Almost all changes are in the new directory `ndpFlatten' and shouldn't
affect the rest of the compiler. The only exception are the options and
the points in `HscMain' where the flattening phase is called when
`-fflatten' is given.
- This isn't usable yet, but already implements function lifting,
vectorisation, and a new analysis that determines which parts of a module
have to undergo the flattening transformation. Missing are data structure
and function specialisation, the unboxed array library (including fusion
rules), and lots of testing.
I have just run the regression tests on the thing without any problems. So,
it seems, as if we haven't broken anything crucial.
simonmar [Fri, 8 Feb 2002 15:02:30 +0000 (15:02 +0000)]
[project @ 2002-02-08 15:02:30 by simonmar]
Remove dependency on package text.
simonmar [Fri, 8 Feb 2002 15:00:40 +0000 (15:00 +0000)]
[project @ 2002-02-08 15:00:40 by simonmar]
Avoid using findPS/packString where simple string matching will do.
simonmar [Fri, 8 Feb 2002 14:59:19 +0000 (14:59 +0000)]
[project @ 2002-02-08 14:59:19 by simonmar]
Don't use RegexString to parse OPTIONS pragmas, instead do the
matching by hand, thereby removing a dependency on RegexString (and
hence Regex).
sewardj [Fri, 8 Feb 2002 14:04:29 +0000 (14:04 +0000)]
[project @ 2002-02-08 14:04:29 by sewardj]
Back out rev 1.28. In retrospect saving the pre-messed-with %esp in a
global location is thread/reentrancy unsafe and a brain-dead thing to
do, and we can't think of a clean way to fix this. So am backing it out.
simonpj [Fri, 8 Feb 2002 08:42:05 +0000 (08:42 +0000)]
[project @ 2002-02-08 08:42:05 by simonpj]
Improve wording slightly
sof [Fri, 8 Feb 2002 08:26:01 +0000 (08:26 +0000)]
[project @ 2002-02-08 08:26:01 by sof]
naive script for preparing a binary-dist tree for the installer
sof [Fri, 8 Feb 2002 03:44:01 +0000 (03:44 +0000)]
[project @ 2002-02-08 03:44:01 by sof]
declare MainCapability + simplify releaseCapability()
sewardj [Thu, 7 Feb 2002 16:11:42 +0000 (16:11 +0000)]
[project @ 2002-02-07 16:11:42 by sewardj]
Describe ultrakludge^Hclever engineering which makes IO types work in the
interpreter.
sewardj [Thu, 7 Feb 2002 15:31:20 +0000 (15:31 +0000)]
[project @ 2002-02-07 15:31:20 by sewardj]
Add many details about bytecode generation, the interpreter, and
compiled/interpreted code interop.
simonpj [Thu, 7 Feb 2002 14:56:29 +0000 (14:56 +0000)]
[project @ 2002-02-07 14:56:29 by simonpj]
Remove duplication of CVS info, and improve Win32 notes
simonpj [Thu, 7 Feb 2002 14:06:01 +0000 (14:06 +0000)]
[project @ 2002-02-07 14:06:00 by simonpj]
-------------------------------------------
Improve the "stragely-kinded tyvar" problem
-------------------------------------------
When the type checker finds a type variable with no binding,
which means it can be instantiated with an arbitrary type, it
usually instantiates it to Void. Eg.
length []
===>
length Void (Nil Void)
But in really obscure programs, the type variable might have
a kind other than *, so we need to invent a suitably-kinded type.
This commit uses
Void for kind *
List for kind *->*
Tuple for kind *->...*->*
which deals with most cases. (Previously, it only dealt with
kind *.)
In the other cases, it just makes up a TyCon with a suitable
kind. If this gets into an interface file, anyone reading that
file won't understand it. This is fixable (by making the client
of the interface file make up a TyCon too) but it is tiresome and
never happens, so I am leaving it.
Most of the added lines are comments.
simonpj [Thu, 7 Feb 2002 12:51:47 +0000 (12:51 +0000)]
[project @ 2002-02-07 12:51:47 by simonpj]
--------------------------------------------------
Slurp in a few more instance decls with ghc --make
--------------------------------------------------
ghc --make wasn't slurping in quite enough instance decls.
The relevant comment is in RnIfaces; the new part is marked.
George Russel's Uniform showed this up.
We slurp in an instance decl from the gated instance pool iff
all its gates are either in the gates of the module,
or are a previously-loaded tycon or class.
The latter constraint is because there might have been an instance
decl slurped in during an earlier compilation, like this:
instance Foo a => Baz (Maybe a) where ...
In the module being compiled we might need (Baz (Maybe T)), where T
is defined in this module, and hence we need (Foo T). So @Foo@ becomes
a gate. But there's no way to 'see' that.
NEW: More generally, types might be involved as well:
NEW: instance Foo2 T a => Baz2 a where ...
NEW:
NEW: Now we must treat T as a gate too, as well as Foo. So the solution
NEW: we adopt is:
NEW:
NEW: we simply treat all previously-loaded
NEW: tycons and classes as gates.
NEW:
NEW: This gloss only affects ghc --make and ghc --interactive.
simonpj [Thu, 7 Feb 2002 12:51:35 +0000 (12:51 +0000)]
[project @ 2002-02-07 12:51:34 by simonpj]
----------------------------------------------------
Make TcType.match and TcUnify.uUnboundVar kind-aware
----------------------------------------------------
George Russel had apparently-overlapping (ha) instance decls like
instance .. => C (a b) where
instance .. => C (x y) where
But the a,b and x,y were different kinds! Turned out that TcType.unify
was kind-aware (so we didn't report a duplicate instance decl, but TcType.match
was not (so we simply selected the wrong one, and got a mis-kinded constraint
popping up from the ".." part. Very exciting to track down.
I also make the ordinary unification kind-aware in the same way. It's
quite legitimate to attempt to unify, say,
(a b) with (c d)
but the unification should fail if a's kind differs from c's.
(There was a kind of debug warning before, but it's actually not an error
in the compiler... so it should just make unification fail gracefully.)
simonpj [Thu, 7 Feb 2002 12:50:47 +0000 (12:50 +0000)]
[project @ 2002-02-07 12:50:00 by simonpj]
Better pretty printing
simonmar [Thu, 7 Feb 2002 10:20:05 +0000 (10:20 +0000)]
[project @ 2002-02-07 10:20:05 by simonmar]
clean $(HC_OBJS) too
simonmar [Thu, 7 Feb 2002 10:15:39 +0000 (10:15 +0000)]
[project @ 2002-02-07 10:15:39 by simonmar]
- update some comments
- split up DERIVED_SRCS into separate variables so we can refer to
them separately in the specification of the various CLEAN_FILES
variables.
- only clean happy-generated files in maintainer-clean mode
sof [Thu, 7 Feb 2002 06:33:20 +0000 (06:33 +0000)]
[project @ 2002-02-07 06:33:20 by sof]
Little bit more doc on suspended_ccalling_threads