dynCompileExpr, #656
Esa Ilari Vuokko
eivuokko at gmail.com
Wed Aug 23 18:32:42 EDT 2006
Hi,
Here's my first try at implementing dynCompileExpr, request in
#656 [1]. Is the setting and restoring context done right, or
is there some other, cleaner, way? Other probs? I tested with
[2] and tried that stage1 compiler still builds.
I'm not sure how to generalise this for runStmt. I think I'd
create dynRunIO for expr :: (Typeable a) => IO a to complement
dynCompileExpr.
[1] http://hackage.haskell.org/trac/ghc/ticket/656
[2]
module Main where
import Data.Dynamic
import GHC
import PackageConfig
main = do
GHC.init (Just "d:/source/ghc/ghc-6.5/ghc/")
session <- newSession Interactive
setSessionDynFlags session =<< initPackages =<< getSessionDynFlags session
setContext session []
[ mkModule (stringToPackageId "base") (mkModuleName "Prelude")
]
(Just v) <- dynCompileExpr session "3"
let (Just v') = fromDynamic v
print (v'::Int)
return ()
Best regards,
--Esa
-------------- next part --------------
New patches:
[Add dynCompileExpr
Esa Ilari Vuokko <ei at vuokko.info>**20060823221828] {
hunk ./compiler/main/GHC.hs 81
- compileExpr, HValue,
+ compileExpr, HValue, dynCompileExpr,
hunk ./compiler/main/GHC.hs 178
+import Data.Dynamic ( Dynamic )
hunk ./compiler/main/GHC.hs 234
-import PackageConfig ( PackageId )
+import PackageConfig ( PackageId, stringToPackageId )
hunk ./compiler/main/GHC.hs 2024
+-- -----------------------------------------------------------------------------
+-- Compile an expression into a dynamic
+
+dynCompileExpr :: Session -> String -> IO (Maybe Dynamic)
+dynCompileExpr ses expr = do
+ (full,exports) <- getContext ses
+ setContext ses full $
+ (mkModule
+ (stringToPackageId "base") (mkModuleName "Data.Dynamic")
+ ):exports
+ let stmt = "let __dynCompileExpr = Data.Dynamic.toDyn (" ++ expr ++ ")"
+ res <- withSession ses (flip hscStmt stmt)
+ setContext ses full exports
+ case res of
+ Nothing -> return Nothing
+ Just (_, names, hvals) -> do
+ vals <- (unsafeCoerce# hvals :: IO [Dynamic])
+ case (names,vals) of
+ (_:[], v:[]) -> return (Just v)
+ _ -> panic "dynCompileExpr"
+
}
Context:
[Clean up coding style
Esa Ilari Vuokko <ei at vuokko.info>**20060823075822]
[Use stgMallc and stgFree instead of malloc/free
Esa Ilari Vuokko <ei at vuokko.info>**20060823002902]
[Remove wrong VirtualAlloc MEM_DECOMMITs on cleanup
Esa Ilari Vuokko <ei at vuokko.info>**20060821180332]
[Remove few format-warnings by adding casts
Esa Ilari Vuokko <ei at vuokko.info>**20060813111029]
[Remove warning: Correct includes for mingw
Esa Ilari Vuokko <ei at vuokko.info>**20060813002216]
[Add few more guesses where to find bits of mingw-gcc
Esa Ilari Vuokko <ei at vuokko.info>**20060812020901]
[in the GHCi prompt, print ModuleNames not Modules
Simon Marlow <simonmar at microsoft.com>**20060823095258]
[In the Compiling/Skipping message, print ModuleNames not Modules
Simon Marlow <simonmar at microsoft.com>**20060823095225
These modules are always home modules, by definition, so the package
name is redundant.
]
[Fix typo
Ian Lynagh <igloo at earth.li>**20060822163300]
[Fix typo
Ian Lynagh <igloo at earth.li>**20060822163212]
[FastString and StringBuffer need -funbox-strict-fields too
Simon Marlow <simonmar at microsoft.com>**20060822143337
For the benefit of old GHCs that don't understand {-# UNPACK #-}
]
[minor fix to the clashing export error message
Simon Marlow <simonmar at microsoft.com>**20060822112518
The ordering of items in the parsed export list is now correct, so we
have to compensate to get the right output again.
]
[findModule: add a fallthrough error case
Simon Marlow <simonmar at microsoft.com>**20060822112409]
[notes about which versions of GHC can be used to bootstrap
Simon Marlow <simonmar at microsoft.com>**20060822093554]
[disable .ident generation on darwin_TARGET_OS
Simon Marlow <simonmar at microsoft.com>**20060822090349]
[fix typo
Simon Marlow <simonmar at microsoft.com>**20060822073731]
[fixes to PPC version of cas(), from David Kirkman <dkirkman at gmail.com>
Simon Marlow <simonmar at microsoft.com>**20060821153136
From David's email:
The problem is that the inline assembler code was placing the result
of an operation in a register that is used as input later in the code.
At the bottom of this message I've extracted a short short code
fragment that you can run through gcc (on a powerpc machine) to see
the generated assembly output.
The changes to fix the problem are fairly simple. The first adds an
ampersand to the output list of the assembly fragment ("=r" (result)
--> "=&r" (result)) The ampersand just tells gcc that result can not
be placed in a register used for any of the input parameters (o, n, or
p). Otherwise, it feels free to place output parameters in the same
registers used by the inputs -- but because of the flow of control
here we need everything in a distinct register. This change fixes the
TVar program above.
The second change adds a clobber list (the :"cc", "memory"). This
tells gcc that the condition code (due to the compare) and memory (due
to the store) might be changed during the asm execution. The lack of
a clobber list did not seem to be causing any trouble, but without it
gcc is free to assume that no state is changed during the execution.
]
[Always use -funbox-strict-fields for Binary
Simon Marlow <simonmar at microsoft.com>**20060821152111
For some reason this was only enabled when $(bootstrapped)=YES. This
would be one reason why the stage1 compiler is slow. I guess we'll
find out if anything goes wrong.
]
[disable automagic building of GHCi in stage1
Simon Marlow <simonmar at microsoft.com>**20060821151957]
[remove ancient file with incorrect information
Simon Marlow <simonmar at microsoft.com>**20060821141946]
[new option -a (append) for hasktags
Martin Grabmueller <magr at cs.tu-berlin.de>**20060816091427]
[ugly hack to cause ghc_boot_platform.h to be built before primops.txt
Simon Marlow <simonmar at microsoft.com>**20060821120630]
[add libraries/cgi and libraries/xhtml
Simon Marlow <simonmar at microsoft.com>**20060821102908]
[(temp) #814 - More flexible memory allocation in Windows
Esa Ilari Vuokko <ei at vuokko.info>**20060820150720]
[fix export/import list parsing (allow (,)), and remove unnecessary reverses
Simon Marlow <simonmar at microsoft.com>**20060821102633]
[comply with Haskell 98 by not allowing extra commas in import/export lists
Simon Marlow <simonmar at microsoft.com>**20060821095912]
[Missing stage1's in hc-build
Ian Lynagh <igloo at earth.li>**20060821092226
Add mising stage1/ directories to object files touched by hc-build, and
give stage=1 as an argument to make install.
]
[remove spurious commas in imports
Ross Paterson <ross at soi.city.ac.uk>**20060819173423]
[whitespace cleanup only
Ross Paterson <ross at soi.city.ac.uk>**20060818224014]
[remove gcj libs from bin dist
sof at galois.com**20060818214155]
[I don't thing we want to add a call-context here; it just clutters the output
simonpj at microsoft.com**20060818160729]
[Avoid duplicate "In type ..." in error messages
simonpj at microsoft.com**20060818160611]
[Better pretty-printing for TvSubst
simonpj at microsoft.com**20060818160551]
[Fall over more gracefully when there's a Template Haskell error
simonpj at microsoft.com**20060818110702
For a long time, Template Haskell has fallen over in a very un-graceful
way (i.e. panic) even when it encounters a programmer error. In particular,
when DsMeta converts HsSyn to TH syntax, it may find Haskell code that
TH does not understand. This should be reported as a normal programmer
error, not with a compiler panic!
Originally the desugarer was supposed to never generate error
messages, but this TH desugaring thing does make it do so. And in
fact, for other reasons, the desugarer now uses the TcRnIf monad, the
common monad used by the renamer, typechecker, interface checker, and
desugarer.
This patch completes the job, by
- allowing the desugarer to generate errors
- re-plumbing the error handling to take account of this
- making DsMeta use the new facilities to report error gracefully
Quite a few lines of code are touched, but nothing deep is going on.
Fixes Trac# 760.
]
[Fix typo (fst --> head) in docs on implicit parameters
simonpj at microsoft.com**20060818075937]
[One last hs-boot update
simonpj at microsoft.com**20060817134216]
[Missing import for stage 2
simonpj at microsoft.com**20060817133247]
[One more hs-boot file
simonpj at microsoft.com**20060817133220]
[Refactoring for valid rule checking
simonpj at microsoft.com**20060817130141]
[Do not CSE in INLINE and NOINLINE things
simonpj at microsoft.com**20060817130005
See extensive comments with Note [INLINE and NOINLINE] in this file.
]
[Update lhs-boot files
simonpj at microsoft.com**20060817132003
A consequence of my recent meddling with hs-boot files is that GHC is
more picky about the correpondence between the hs-boot file and the hs file.
In particular, you must use the same type synonyms.
This patche fixes up GHC's own hs-boot files to match the restriction.
]
[Add ad-hoc typing checks for tagToEnum#
simonpj at microsoft.com**20060816203156
The problem with tagToEnum# is that it is not overloaded (in the
Haskell sense) but you are only supposed to apply it to a TyCon
that is an enumeration (isEnumerationTyCon).
The Real Way to do this is to have some special kind of type constraint
for the purpose, but that is wild overkill. So this patch adds a small
rather ad-hoc check to TcExpr.instFun. Crude, simple, but it works fine.
Fixes Trac #786
Test is tcfail164
]
[Get dead-ness right in knownCon
simonpj at microsoft.com**20060816164216]
[Tuning for argToPat
simonpj at microsoft.com**20060816164103
argToPat is a crucial function for SpecConstr, because it decides
what patterns are worth specialising. I was being much too gung-ho about
constants. This patch makes it much better.
]
[Re-factor mkAtomicArgs and completeNonRecX
simonpj at microsoft.com**20060816163645
This refactoring ensures that when mkAtomicArgs adds new bindings,
it does so using completeNonRecX, which adds unfoldings etc. More
modular, and saves passes too.
(This was important when getting rules to work right. We want tob
fire a rule as soon as possible, taking into account all inlinings,
else a less-good rule applies. That's what I found when doing
stream fusion anyway.)
Regardless, this is an improvement.
]
[Another try at the continuation-swapping stuff
simonpj at microsoft.com**20060816105042
I have spent altogether too long on my attempt to avoid case-of-case
in situations where it is a Bad Thing. All the action is in the
case for mkDupableAlt that handles cases with a single alternative.
I've added rather extensive comments, and it finally seems to be working
more or less right. If you compile (say) GHC/Real.o you'll see quite a
few case-of-cases remain (which didn't happen before), and they mostly look
pretty sensible to me.
]
[Don't build unnecessary lets in knownCon
simonpj at microsoft.com**20060816104831
Faced with
case x of y { (a,b) -> rhs }
where x is bound to (c,d), we were generating
let y = (c,d) in rhs
and thenn hoping to get rid of the y binding by CSE or some such. It's
better simply not to build it in the first place, by generating
let y = x in rhs
This patch does the job.
]
[Comments only
simonpj at microsoft.com**20060816104817]
[Refactoring, plus record recursive-function *components* as RecArg too
simonpj at microsoft.com**20060816085809]
[Record constructor arg occs correctly (bug-fix)
simonpj at microsoft.com**20060816085628
I was forgetting the non-pattern-matched type args of a constructor.
]
[Disable form-checking for rule LHSs
simonpj at microsoft.com**20060816085612
Previously we checked the form of the arguments of a RULE lhs, to
ensure that they were simple applications. There was no good reason
for that, save to prevent you writing LHSs that were unlikely to match.
And Don Stewart found he wanted to do something we didn't allow (a section,
I think). So I have just disabled the check.
]
[Allow class and instance decls in hs-boot files
simonpj at microsoft.com**20060815123402
For some reason, in 6.5 the manual said you could put a class decl in
an interface file, but not an instance decl; whereas the implementation
was exactly the othe way round.
This patch makes it possible to put *both* class and instance decls
in an interface file.
I also did a bit of re-factoring; comparing the declarations in the
hs-boot and hs file is now done by converting to IfaceSyn, because we
have good comparison operations for IfaceSyn already implemented.
This fixed a bug that previously let through an inconsistent declaration
of a data type.
The remaining infelicity concerns "abstract" TyCons. They are a bit
of a hack anyway; and Classes are not handled in the same way. Need
to think about this, but I think it's probably ok as it stands.
]
[Reject derivable type classes with higher-rank methods
simonpj at microsoft.com**20060815075928
Trac #864 suggested a derivable type class with a higher-rank method.
In principle this is quite do-able, but in practice the mechanism works
by generating source code and then doing type inference. To make this work
with higher-rank types would require impredicative polymorphism. And we
do have that, so it could probably be made to work by generating (source-level)
type annotations. But it's real work, so I'm settling for generating a
decent error message rather than crashing.
]
[SpecConstr now specialises on constants and lambdas
simonpj at microsoft.com**20060815162605
Roman inspired me to beef up SpecConstr to deal with
a) constant arguments
b) lambda arguments
This is described in elaborate comments in the file:
Note [Specialising for constant parameters]
Note [Specialising for lambda parameters]
I also took the opportunity to fix the usage analysis done by
SpecConstr, which was only handling the top-level correctly.
Now it does nesting too.
]
[Fix two bugs in rule-matching
simonpj at microsoft.com**20060815162030
These two typo-like bugs have been there for a long time!
One concerns the selection of overlapping rules,
which was back to front
The other was name-lining-up bug in the Case case of matching
This patch also arranges to export matchN.
(Not a good name, but still!)
]
[Moving list-length code from one place in the file to another
simonpj at microsoft.com**20060815161947]
[Make UniqSM into a proper monad
simonpj at microsoft.com**20060815161829]
[Typo in patch that dealt with duplicating continuations in Simplify
simonpj at microsoft.com**20060815070246]
[Be more conservative about duplicating continuations
simonpj at microsoft.com**20060814165424
Roman found that GHC was duplicating continuations that arose (essentially)
from uses of 'seq', or strict constructors. This fixes the problem;
see the comments mkDupableCont (the Select case with a single alternative).
I'm a little concerned that this may also miss useful case-of-case
tranformations, so I'd like to know if anyone finds that this patch
makes performance worse.
To make it a bit more gung-ho, one could check for all the binders
being dead, before choosing this new, conservative alternative.
]
[Inline into tail-called constructor args
simonpj at microsoft.com**20060814165127
Consider
x = case y of { True -> (p,q); ... }
The occurrence analyser was marking p,q as 'Many', because they args
of a constructor in an RhsCtxt. But actually they aren't in a RhsCtxt,
and in this case it's better to inline.
]
[Improve exprIsCheap
simonpj at microsoft.com**20060814165043
exprIsCheap is meant to return True iff it's ok to push the expression
inside a lambda. But the previous version would return True of a nested
construtor application like (1:2:3:[]), which isn't right.
This patch re-factors the code somewhat, and fixes the bug.
]
[Added xhtml and cgi as default libraries.
bringert at cs.chalmers.se**20060814113242]
[Improve error message in TcHsType
simonpj at microsoft.com**20060814095617
Fixes Trac #863.
Test is tcfail162
]
[Warning police: Removed overlapped pattern warnings
sven.panne at aedion.de**20060811151353]
[Complete -fmono-pat-binds patch
simonpj at microsoft.com**20060811142842
When adding the experimental -fmono-pat-binds, I forgot to check
for type signatures of the now-monomorphic patterns. This patch
completes the job.
I documented the design too:
http://haskell.galois.com/cgi-bin/haskell-prime/trac.cgi/wiki/MonomorphicPatternBindings
]
[Avoid warning about overlapped pattern for Linux target
sven.panne at aedion.de**20060811140512]
[Improve error message layouts
simonpj at microsoft.com**20060811133317]
[Add type signature
simonpj at microsoft.com**20060811133302]
[Improve the "could not find module" error message
Simon Marlow <simonmar at microsoft.com>**20060811132135
In particular, if we're searching for the profiling version of a
module in another package, then suggest that perhaps it might not have
been installed.
]
[On FreeBSD, use -lthr instead of -pthread for now (see comments)
Simon Marlow <simonmar at microsoft.com>**20060811113453]
[Two more error message indendations
simonpj at microsoft.com**20060811110435]
[Go back to calling type veriables t
simonpj at microsoft.com**20060811110412]
[Indent an error message
simonpj at microsoft.com**20060811110347]
[Improve error message (imported from Prelude at Implicit import declaration)
simonpj at microsoft.com**20060811110301]
[don't qualify module name for importedSrcLoc
Simon Marlow <simonmar at microsoft.com>**20060811101327]
[use "Defined in" rather than "Imported from" when printing ImportedSrcLoc
Simon Marlow <simonmar at microsoft.com>**20060811101159]
[Now that we have an "html" package, put the Haddock docs somewhere else
sven.panne at aedion.de**20060811092609]
[Nuked hschooks.h in favour of cutils.h, which has the prototypes we need
sven.panne at aedion.de**20060810154225]
[Match format strings and arguments for printf-like functions
sven.panne at aedion.de**20060810153624]
[Warning police: Make prototype for LDV_recordDead_FILL_SLOP_DYNAMIC visible
sven.panne at aedion.de**20060810144837]
[Warning police: Make strlen and friends known
sven.panne at aedion.de**20060810144729]
[Tweak GCC's inlining parameters to get thread_obj inlined
sven.panne at aedion.de**20060810144505]
[Add an IAmDead case to postInlineUnconditionally, and comments
simonpj at microsoft.com**20060810142034]
[Do not repeatedly simplify an argument more than once
simonpj at microsoft.com**20060810141526
A very important invariant of the simplifier is that we do not simplify
an arbitrarily large expression more than once in a single pass. If this
can happen, then we can get exponential behaviour, when the large expression
itself has a large sub-expression which is simplified twice, and so on.
GHC has a long-standing bug which allows this repeated simplification to
happen. It shows up when we have a function like this
f d BIG
where f's unfolding looks like
\x -> case x of (a,b) -> a
Of course this is v common for overloaded functions.
Before this patch we simplified all the args (d and BIG) before
deciding to unfold f. Then we push back the simplified BIG onto the
continuation stack, inline f, so now we have
(case d of (a,b) -> a) BIG
After we reduce the case a bit, we'll simplify BIG a second time. And
that's the problem.
The quick-and-dirty solution is to keep a flag in the ApplyTo continuation
to say whather the arg has already been simplified. An alternative would
be to simplify it when first encountered, but that's a bigger change.
]
[Do not call preInlineUnconditionally in simplNonRecX
simonpj at microsoft.com**20060810141340
This looks to me like a long-standing bug. simplNonRecX was calling
preInlineUnconditionally, even though it was given an already-simplified
expression. Exponential behaviour beckons.
]
[Make postInlineUnconditaionally more conservative
simonpj at microsoft.com**20060810141145
I'm being more paranoid about repeatedly simplifying things (to avoid
exponential behaviour.) postInlineUnconditionally looks as if it
could repeated simplify the same expression; this patch stops it doing
so.
The extra lines are all comments!
]
[Control.Exception.unblock wasn't unblocking exceptions
Simon Marlow <simonmar at microsoft.com>**20060810132307]
[remove out of date comment
Simon Marlow <simonmar at microsoft.com>**20060810130154]
[move html before network, for now
Simon Marlow <simonmar at microsoft.com>**20060810121930]
[add html package
Simon Marlow <simonmar at microsoft.com>**20060810113719]
[Egregious bug in tcLHsConResTy
simonpj at microsoft.com**20060810120828
This terrible bug in tcLHsConTy is pretty much guaranteed to show up
on an program involving a GADT with more than one type parameter.
This bug isn't present in the STABLE branch.
Manuel: it is *not* necesary to merge this patch into the FC branch;
just ignore it.
]
[Comments about improvements to SpecConstr
simonpj at microsoft.com**20060810120759]
[Remove HasBounds-instance and implement MArray.getBounds instead
Esa Ilari Vuokko <ei at vuokko.info>**20060809163012]
[Fix Array imports
Esa Ilari Vuokko <ei at vuokko.info>**20060809161341]
[Where we use $(GhcHcOpts), also add $(GhcStage1HcOpts)
Simon Marlow <simonmar at microsoft.com>**20060809144845
This fixes building the compiler with -prof in $(GhcStage1HcOpts)
]
[fixes to the stage2 build following removal of old FFI syntax
Simon Marlow <simonmar at microsoft.com>**20060809143153]
[fix bug in task freeing
Simon Marlow <simonmar at microsoft.com>**20060809141225]
[add some more options to stage 2
Simon Marlow <simonmar at microsoft.com>**20060809141058]
[remove debugging code accidentally left in
Simon Marlow <simonmar at microsoft.com>**20060809102936]
[remember that old FFI syntax has been dropped
Simon Marlow <simonmar at microsoft.com>**20060809101655]
[only define GHCI if $(GhcWithInterpreter)=YES, also add -threaded
Simon Marlow <simonmar at microsoft.com>**20060809101634]
[move altzone test to base package
Ross Paterson <ross at soi.city.ac.uk>**20060809124215]
[remove unused FPTOOLS_CHECK_HTYPE macro
Ross Paterson <ross at soi.city.ac.uk>**20060809124036]
[Remove the artifical cap on the number of workers
Simon Marlow <simonmar at microsoft.com>**20060809095908
See #805. This was here to catch bugs that resulted in an infinite
number of worker threads being created. However, we can't put a
reasonable bound on the number of worker threads, because legitimate
programs may need to create large numbers of (probably blocked) worker
threads. Furthermore, the OS probably has a bound on the number of
threads that a process can create in any case.
]
[Remove old FFI syntax
Simon Marlow <simonmar at microsoft.com>**20060809095201
See #815
]
[make exit() overridable, for use in DLLs
Simon Marlow <simonmar at microsoft.com>**20060809092439
See #753
]
[More fixes to pre-matching and pre-subsumption
simonpj at microsoft.com**20060808224924
Actually this patch fixes two errors. one was a trivial typo in
tha last patch (b_ty should be b_tau), which led to an infinite loop
when compiling Data.Generic.Twins.
Fixing that revealed a more serious error in the same function.
I was sloppy about dealing robsutly with name-capture for nested
quantifiers in pre-subsumption and pre-matching; and sure enough
I got bitten. Sigh. I think it is right now.
]
[Group exports so that all length functions are together; no semantic change
simonpj at microsoft.com**20060808224808]
[Check that lazy patterns are for lifted types
simonpj at microsoft.com**20060808135910
A lazy pattern match must be for a lifted type. This is illegal:
f x = case g x of
~(# x,y #) -> ...
This commit fixes the problem. Trac #845, test is tcfail159
]
[Spelling in a comment
simonpj at microsoft.com**20060808123514]
[Remove srcSpanStartLine/srcSpanEndLine crash
simonpj at microsoft.com**20060808123211
srcSpanStartLine/srcSpanEndLine panic on UnhelpfulLoc. They should not
really be exported by SrcLoc at all, but unfortunately they are used in
Lexer.x, which knows enough to avoid the panic.
However the call in RnEnv didn't know, and the panic was triggered
by Template Haskell spliced code. This patch fixes it by exporting
the predicate RnEnv wanted, namely isOneLineSpan.
]
[Replace deprecated AC_TRY_COMPILE macro with the reccomended replcament
Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060706114902
See: http://www.gnu.org/software/autoconf/manual/html_node/Obsolete-Macros.html
]
[Add ghc and version number in .ident directive in NCG
Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060706114712
Just because we can and because every other compiler does,
lets stick in an identifier directive: .ident "GHC x.y.z"
into the assembly output of the NCG.
]
[Support the GNU non-exec stack annotation system
Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060706114331
On recent GNU ELF systems one can mark an object file as not
requiring an executable stack. If all objects- linked into a
program have this note then the program will not use an executable
stack, which is good for security (and some distros have it as a
QA policy). GHC generated code does not need an executable stack
so add the note to the assembly output of the native code
generator (conditional on a configure test).
]
[Complain more loudly if any of the hsc2hs phases fail
Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060703234356
previously hsc2hs just exits with a non-zero exit code, now if any of
the compilation, linking or runing phases fail then we get a message
saying so and the failing command is printed.
]
[Remember to free() memory on exit
Simon Marlow <simonmar at microsoft.com>**20060808103110
Patch mostly from Lennart Augustsson in #803, with additions to
Task.c by me.
]
[Fix pre-subsumption and pre-matching
simonpj at microsoft.com**20060808091108
The pre-subsuption and pre-matching functions should NEVER make bogus
bindings of type variables, although they are free to bale out and make
too few bindings.
I hadn't been thiking carefully enough about this, and there were two
separate bugs.
- Firstly, in pre-subsumption we must ignore the 'theta'
part of any overloaded type.
- Second, in pre-matching, we must return the empty subustition
on a mis-match, rather than returning the substitution so far.
This bug showed up when compiling Data.Generics.Schemes.hs, and is
imortalised in test tc206
]
[Improve error message
simonpj at microsoft.com**20060808080255
Improve a little-used error message. Given
f :: a -> a
f x y = e
the error says
The equations for f have two arguments
but its type `a -> a' has only one
(Before, it said "its type `a' has only one" which is bogus.
]
[Pull out common removal code, and detect does-not-exist correctly
Ian Lynagh <igloo at earth.li>**20060710214308]
[Create our own directory in the temporary directory to avoid various races
Ian Lynagh <igloo at earth.li>**20060710204424]
[Merge SysTools import declarations
Ian Lynagh <igloo at earth.li>**20060709183850]
[Don't freeze the dynamic flags used for filename generation before the pipeline starts
Ian Lynagh <igloo at earth.li>**20060709145101]
[#807: Removed double fclose of prof_file
Ian Lynagh <igloo at earth.li>**20060708152424
prof_file was being fclose'd in both gen_XML_logfile and hs_exit, leading
to glibc complaining of a double free.
]
[Add -fextended-default-rules and -fmono-pat-binds
simonpj at microsoft.com**20060807112107
Add -fextended-deafult-rules (in response to Don Stewart's message below),
and document them.
Also doucument -fmono-pat-binds/-fno-mono-pat-binds, which has been in
GHC a few weeks now.
(The two are in one patch because the diffs were so close together
that Darcs combined them.)
Simon
From: Donald Bruce Stewart [mailto:dons at cse.unsw.edu.au]
Sent: 07 August 2006 10:52
While we're thinking about defaulting, I have a question..
ghci uses an extended defaulting system, to allow things like:
Prelude> reverse []
[]
to work, and to have the right instance of Show found. The manual says:
"..it is tiresome for the user to have to specify the type, so GHCi extends
Haskell's type-defaulting rules (Section 4.3.4 of the Haskell 98 Report
(Revised)) as follows. If the expression yields a set of type constraints
that are all from standard classes (Num, Eq etc.), and at least one is
either a numeric class or the Show, Eq, or Ord class, GHCi will try to use
one of the default types, just as described in the Report. The standard
defaulting rules require that one of the classes is numeric; the difference
here is that defaulting is also triggered at least one is Show, Eq, or Ord."
Currently, there is no way to get at this "extended" defaulting for compiled
modules. However, I have a use case for in fact doing this.
With runtime evaluated Haskell, embedding 'interpreters' (over hs-plugins) is
easy. lambdabot, for example, implements a sandboxed haskell eval system. But
it doesn't have access to the defaulting mechanism of ghci, so we have:
dons:: > reverse []
lambdabot:: Add a type signature
dons:: > reverse [] :: [()]
lambdabot:: []
Which is annoying -- newbies wonder why they have to add these extra
constraints to get a Show instance.
I'm wondering, since the extended defaulting mechanisms are already
implemented, could they be made available to compiled modules as well,
perhaps using a flag, -fextended-defaulting?
]
[add a comment
Simon Marlow <simonmar at microsoft.com>**20060807143102]
[Do pre-subsumption in the main subsumption check
simonpj at microsoft.com**20060804214942
This patch improves the subsumption check (in TcUnify.tc_sub) so that
it does pre-subsumption first. The key code is in the case with
guard (isSigmaTy actual_ty); note the new call to preSubType.
Shorn of details, the question is this. Should this hold?
forall a. a->a <= Int -> (forall b. Int)
Really, it should; just instantiate 'a' to Int. This is just what
the pre-subsumption phase (which used in function applications),
will do.
I did a bit of refactoring to achieve this.
Fixes Trac #821. Test tc205 tests.
]
[Make unification robust to a boxy type variable meeting itself
simonpj at microsoft.com**20060801214302
Previously, the implicit assumption in unification is that a boxy
type variable could never occur on both sides of the unification,
so that we'd never find
bx5 :=: bx5
But the pre-subsumption stuff really means that the same variable
can occur on both sides. Consider
forall a. a->Int <= bx5->Int
Then pre-subumption will find a->bx5; and the full subsumption step
will find bx5:=bx5.
However, I think there is still no possiblity of a full occurs-check
failure; that is,
bx5 :=: Tree bx5
Although I can't quite see how to prove it! So I've added a
DEBUG test in uMetaVar to check for this case.
]
[Added cabal-setup
sven.panne at aedion.de**20060804142149]
[Don't include the package name in a cost centre's module name
Simon Marlow <simonmar at microsoft.com>**20060803093337
This is mainly to restore the old behaviour, but also we shouldn't
normally need the package name in a cost centre because only the
"main" package normally has cost centres.
]
[Add a new section "Getting the Source" to both HACKING and README. But what about win32 users?
shae at ScannedInAvian.com**20060720152929]
[savingOldConfig: add Exception.block for extra paranoia
Simon Marlow <simonmar at microsoft.com>**20060801131027
]
[Refactor ghc-pkg
Ian Lynagh <igloo at earth.li>**20060729192946
This patch fixes a couple of issues with the
Be lazier in user config creation, and don't fail on missing configs.
patch. It puts the createDirectoryIfMissing back in and removes assumptions
that the package.conf file already exists.
]
[No functionality changes
Ian Lynagh <igloo at earth.li>**20060730105256
Consistently used spaces rather than tabs.
Removed trailing whitespace.
Wrapped comments to fit in a standard terminal.
]
[Add notes about unsafeCoerce
simonpj at microsoft.com**20060731080922]
[.hi-boot-5 is obsolete; the earliest GHC we support uses .hi-boot-6
Simon Marlow <simonmar at microsoft.com>**20060728140809
]
[update to match .lhs-boot
Simon Marlow <simonmar at microsoft.com>**20060728140607]
[get ReadP from the right place.
Simon Marlow <simonmar at microsoft.com>**20060728140444
]
[Improve error message for deriving
simonpj at microsoft.com**20060727160832]
[Lazy patterns are like wild-cards for overlap warnings
simonpj at microsoft.com**20060727155009
MERGE TO STABLE
Fixes Trac #827
Test is should_compiler/ds058
]
[fix some problems with wired-in packages
Simon Marlow <simonmar at microsoft.com>**20060727153802]
[oops, remove old packages when updating
Simon Marlow <simonmar at microsoft.com>**20060727150650]
[fix symbols for GHC.PrimopWrappers
Simon Marlow <simonmar at microsoft.com>**20060727134755]
[a couple more symbols need package names
Simon Marlow <simonmar at microsoft.com>**20060727102129]
[Add missing import
simonpj at microsoft.com**20060727085605]
[Make -fcontext-stack into a dynamic flag
simonpj at microsoft.com**20060727080422
This allows you to put -fcontext-stack into an options pragma,
as requested by Trac #829
While I was at it, I added OptIntPrefix to the forms allowed
in CmdLineParser.
]
[Deal correctly with infix type constructors in GADT decls
simonpj at microsoft.com**20060726225304]
[Improve pretty printing of ConDecl
simonpj at microsoft.com**20060726225223]
[fix parse error (merge-o, I think)
Simon Marlow <simonmar at microsoft.com>**20060726103526]
[fix DEBUG build
Simon Marlow <simonmar at microsoft.com>**20060726103433]
[missed one symbol that needs a package name
Simon Marlow <simonmar at microsoft.com>**20060726085844]
[change wired-in Haskell symbols to include the package name
Simon Marlow <simonmar at microsoft.com>**20060726084659]
[Unbox the Unique stored in a Name
Simon Marlow <simonmar at microsoft.com>**20060725141747
I measured that this makes the comiler allocate a bit more, but it
might also make it faster and reduce residency. The extra allocation
is probably just because we're not inlining enough somewhere, so I
think this change is a step in the right direction.
]
[optimisations to newUnique
Simon Marlow <simonmar at microsoft.com>**20060725140816
It turned out that newUnique was wasting one node of the splittable
uniq supply per invocation: it took the current supply, split it, used
the unique from one half and stored the other half in the monad. In
other words, the unique in the supply stored in the monad was never
used.
This optimisation fixes that and adds a bit of strictness, which
together lead to small reduction in allocations by the compiler, and
possibly an improvement in residency (hard to tell for sure when GCs
move around).
]
[tiny bit of extra strictness
Simon Marlow <simonmar at microsoft.com>**20060725131201]
[Make a SplitUniqSupply contain an Int# rather than an Int
Simon Marlow <simonmar at microsoft.com>**20060725120252
The I# constructor is always removed when we make a unique later
anyway, so this just saves a bit of time and allocation.
]
[Use -package-name rather than -ignore-package
Simon Marlow <simonmar at microsoft.com>**20060725130913]
[Remove most of the conflict checking and auto-hiding
Simon Marlow <simonmar at microsoft.com>**20060725130850
Now that the module restriction has been lifted, the auto-hiding is
mostly not required. GHC itself automatically hides old versions of a
package.
]
[Generalise Package Support
Simon Marlow <simonmar at microsoft.com>**20060725130154
This patch pushes through one fundamental change: a module is now
identified by the pair of its package and module name, whereas
previously it was identified by its module name alone. This means
that now a program can contain multiple modules with the same name, as
long as they belong to different packages.
This is a language change - the Haskell report says nothing about
packages, but it is now necessary to understand packages in order to
understand GHC's module system. For example, a type T from module M
in package P is different from a type T from module M in package Q.
Previously this wasn't an issue because there could only be a single
module M in the program.
The "module restriction" on combining packages has therefore been
lifted, and a program can contain multiple versions of the same
package.
Note that none of the proposed syntax changes have yet been
implemented, but the architecture is geared towards supporting import
declarations qualified by package name, and that is probably the next
step.
It is now necessary to specify the package name when compiling a
package, using the -package-name flag (which has been un-deprecated).
Fortunately Cabal still uses -package-name.
Certain packages are "wired in". Currently the wired-in packages are:
base, haskell98, template-haskell and rts, and are always referred to
by these versionless names. Other packages are referred to with full
package IDs (eg. "network-1.0"). This is because the compiler needs
to refer to entities in the wired-in packages, and we didn't want to
bake the version of these packages into the comiler. It's conceivable
that someone might want to upgrade the base package independently of
GHC.
Internal changes:
- There are two module-related types:
ModuleName just a FastString, the name of a module
Module a pair of a PackageId and ModuleName
A mapping from ModuleName can be a UniqFM, but a mapping from Module
must be a FiniteMap (we provide it as ModuleEnv).
- The "HomeModules" type that was passed around the compiler is now
gone, replaced in most cases by the current package name which is
contained in DynFlags. We can tell whether a Module comes from the
current package by comparing its package name against the current
package.
- While I was here, I changed PrintUnqual to be a little more useful:
it now returns the ModuleName that the identifier should be qualified
with according to the current scope, rather than its original
module. Also, PrintUnqual tells whether to qualify module names with
package names (currently unused).
Docs to follow.
]
[comment formatting
Simon Marlow <simonmar at microsoft.com>**20060725110519
]
[unused import
Simon Marlow <simonmar at microsoft.com>**20060706141349]
[unused import
Simon Marlow <simonmar at microsoft.com>**20060706141205]
[remove more Addr bits
Simon Marlow <simonmar at microsoft.com>**20060704151217]
[unused import
Simon Marlow <simonmar at microsoft.com>**20060704141319]
[add default cases
Simon Marlow <simonmar at microsoft.com>**20060704135444]
[redundant import
Simon Marlow <simonmar at microsoft.com>**20060704135435]
[unused imports
Simon Marlow <simonmar at microsoft.com>**20060704135117]
[unused import
Simon Marlow <simonmar at microsoft.com>**20060704134557]
[remove unused bits, mostly to do with the Addr type
Simon Marlow <simonmar at microsoft.com>**20060704124912]
[In interface files, store FastStrings rather than OccNames where possible
Simon Marlow <simonmar at microsoft.com>**20060724154826
In all cases the namespace is known from the context, so this saves 1
byte per variable binding/occurrence (a few percent per iface file).
]
[Add -fmono-pat-binds, and make it the default
simonpj at microsoft.com**20060722102245
In Haskell 98, pattern bindings are generalised. Thus in
(f,g) = (\x->x, \y->y)
both f and g will get polymorphic types. I have become convinced
that generalisation for pattern-bound variables is just a bridge
toof far. It is (I claim) almost never needed, and it adds significant
complication. (All the more so if we add bang patterns.)
So the flag -fmono-pat-binds switches off generalisation for pattern
bindings. (A single variable is treated as a degnerate funtction
binding.)
Furthremore, as an experiment, I'm making it the default. I want
to see how many progarms fail with monomorphic pattern bindings.
You can recover the standard behaviour with -fno-mono-pa-binds.
]
[Fix RULES lossage
simonpj at microsoft.com**20060722101756
Don Stewart and Duncan Coutts encountered the following situation.
f = <rhs>
{-# RULES f ... #-}
where f is not exported, but appears in the inlinings of other
functions that are exported. Then what happened was that the desugarer
produced this:
M.f = f
f = <rhs>
where the rules get attached to the M.f. But since M.f's RHS is trivial
(just f) it was unconditionally inlinined at all its call sites,
thereby losing the RULES attached to it.
This *is* a fragile aspect of rules. However this fix solves the
problem by instead generating
f = M.f
M.f = <rhs>
A pretty small chanage to the desugarer does the job. It still feels
a little fragile, bt it's certainly more robust than before.
]
[Fix broken regex
Simon Marlow <simonmar at microsoft.com>**20060721111144
Don't know how I managed to use this before... maybe a different regex
library.
]
[fix bug in sample code
Simon Marlow <simonmar at microsoft.com>**20060721083200]
[fix eran error message by reordering a couple of tests
simonmar at microsoft.com**20060719111638]
[Use a recursive error handler in case the exception causes more exceptions.
Lemmih <lemmih at gmail.com>**20060717232553]
[Check for overlap-flag differences in hi files
simonpj at microsoft.com**20060714163843
MERGE TO STABLE
I'd forgotten to compare the per-instance overlap flag when
comparing interface files, and that meant that consequential
recompilations weren't being triggered when the only change
was to add -fallow-overlapping-instances
Fixes Trac bug #824
]
[Add a clarification about overlapping instances in the manual
simonpj at microsoft.com**20060714143220]
[Comments and import trimming
simonpj at microsoft.com**20060712153306]
[Experimental flag -fdicts-cheap
simonpj at microsoft.com**20060712153204
This experimental flag, -fdicts-cheap, makes a let-binding that bind a
value of dictionary type look cheap. That in turn leads to more
eta expansion. Instead of
f = /\a. \(d1:Ord a). let d2:Ord [a] = dfOrd a d1 in
\(x:a). <stuff>
which has arity 1, you get
f = /\a. \(d1:Ord a). \(x:a).
let d2:Ord [a] = dfOrd a d1 in <stuff>
Now f has arity 2.
This can cretainly waste dictionary-construction work, if f is
partially applied to its dictionary argument. However it has knock-on
effects. Because f has arity 2, we won't float (f Int d) out of
\x. h (f Int d)
Floating f out of this lambda makes it impossible for an h/f fusion
rule to fire; and this unexpected loss of RULE application was the
immediate reason for implementing this flag. (Roman Leshchinskiy came
across this when working on array fusion.)
I've implemented the change only in CoreUtils.arityType, which
only affects eta expansion. I thought of putting the change in
exprIsCheap, which is a more systematic place (the former calls
the latter) but
a) I wanted this under flag control, and the flags
are not readily available to all callers of exprIsCheap
b) I'm not 100% convinced that this change is a good
idea, so it's reasonable to do the narrowest change
that solves the immediate problem.
]
[document that -fglasgow-exts is needed for RULES to work
Malcolm.Wallace at cs.york.ac.uk**20060712093907]
[do a better job of ignoring unrecognised pragmas
Simon Marlow <simonmar at microsoft.com>**20060712083550]
[Don't z-encode module names in external-core output
Jan Rochel <jan.rochel at stud.uka.de>**20060706131109]
[re-add -fvia-C
Simon Marlow <simonmar at microsoft.com>**20060710081522
There are still some fixes required to get the threaded RTS compilable
with the NCG, and apparently there are problems on 32-bit archs too.
]
[Be lazier in user config creation, and don't fail on missing configs.
Ian Lynagh <igloo at earth.li>**20060624230800]
[Z-Encode external-core output
Jan Rochel <jan.rochel at stud.uka.de>**20060702214438
HEAD doesn't z-encode external-core output (unlike 6.4). I suppose, that
this is unwanted behaviour. It probably results from this patch:
========================================================================
Fri Jan 6 17:30:19 CET 2006 simonmar
* [project @ 2006-01-06 16:30:17 by simonmar]
Add support for UTF-8 source files
[...]
Z-encoding has been moved right to the back end. Previously we
used to Z-encode every identifier on the way in for simplicity,
and only decode when we needed to show something to the user.
Instead, we now keep every string in its UTF-8 encoding, and
Z-encode right before printing it out.
[...]
========================================================================
Greetings
Jan
]
[Add %local-tag to external core output
Jan Rochel <jan.rochel at stud.uka.de>**20060702204559
Hello, this is my first patch contributed to GHC. If there are any
inadequacies about it (maybe like this introductory disclaimer), please
let me know about it.
So, the need for this patch arose, while I was involved with processing
hcr files (external core output) and I noticed, that the output didn't
fully conform to the specification [1].
No %local-tags were used, which turned out to be a real nuisance as it
was not possible to determine which VDEFs can be erased in a further
optimization process and which ones are exported by the module.
Since the specification does not define the meaning of the %local-tag, I
assume, it makes sense, that it tags all functions, that are not
exported by the module.
The patch does not fully comply to the specification, as in my
implementation a local tag may appear before a VDEF but not before a
VDEFG.
[1] An External Representation for the GHC Core Language
(DRAFT for GHC5.02), page 3, line 1
Greetings
Jan
]
[Remove bashisms from darcs-all
Alec Berryman <alec at thened.net>**20060703012911
darcs-all may now be run with any POSIX-compatible /bin/sh.
]
[Fix for warning message (bug #812)
Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060704163413
say "{-# SOURCE #-}" rather than "{- SOURCE -}" in warning message.
Fixes http://hackage.haskell.org/trac/ghc/ticket/812
]
[The dict-bindings in an IPBinds need not be in dependency order
simonpj at microsoft.com**20060703151517
This appears to be a long-standing bug, discovered by BlueSpec
(ravi at bluespec.com), Trac bug #795
The problem was that in an IP binding group, the dict bindings
aren't necessarily in dependency order; and if they aren't
we get a core-lint error.
Test tc203 checks this case. (Though whether it shows up at
all depends a bit on accidental factors of binding ordering.)
]
[x86 needs -fno-unit-at-a-time too
Simon Marlow <simonmar at microsoft.com>**20060704083308
Fixes #809
]
[x86-64: fix a problem exposed by negative offsets in vector tables
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060629135836]
[Replace inline C functions with C-- macros in .cmm code
Simon Marlow <simonmar at microsoft.com>**20060629134726
So that we can build the RTS with the NCG.
]
[remove conditionals from definition of StgRegTable
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060629120526]
[fix some problems with the fixup block code
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060629120029]
[new syntax: "prim %OP (args)" for using CallishMachOps in .cmm
Simon Marlow <simonmar at microsoft.com>**20060629115949
]
[add MO_WriteBarrier to CallishMachOps
Simon Marlow <simonmar at microsoft.com>**20060629115837
This will let us express write barriers in C--
]
[Use -fno-strict-aliasing for *all* C files in the runtime
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060623152626]
[fix a lint-o
Simon Marlow <simonmar at microsoft.com>**20060620151901]
[fix sloppy conditionals
Simon Marlow <simonmar at microsoft.com>**20060620151758]
[fix sloppy conditionals
Simon Marlow <simonmar at microsoft.com>**20060620151039]
[fix a few sloppy conditionals caught by new test in CmmLint
Simon Marlow <simonmar at microsoft.com>**20060620150618]
[flattenCgStmts: fix a case of empty code blocks being generated
Simon Marlow <simonmar at microsoft.com>**20060620150520]
[improve a panic message
Simon Marlow <simonmar at microsoft.com>**20060620141219]
[check that the argument to CmmCondBranch is really a conditional
Simon Marlow <simonmar at microsoft.com>**20060620141204]
[Generate a new unique for each label
Simon Marlow <simonmar at microsoft.com>**20060620140106]
[Remove long-redundant FieldLabel.lhs
simonpj at microsoft.com**20060629105321]
[Add comments to SpecConstr
simonpj at microsoft.com**20060627161520]
[fix up slop-overwriting for THUNK_SELECTORS in DEBUG mode
Simon Marlow <simonmar at microsoft.com>**20060627123951]
[Make SpecConstr work better for nested functions
simonpj at microsoft.com**20060627094742
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
simonpj at microsoft.com**20060626201709
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
simonpj at microsoft.com**20060626100034
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
simonpj at microsoft.com**20060626095952]
[Improve location info when typechecking interface fiels
simonpj at microsoft.com**20060614114813]
[Fix a bug in the pretty printing of class declarations
davve at dtek.chalmers.se**20060625160826]
[Improve RULE matching a bit more
simonpj at microsoft.com**20060624160421
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 <simonmar at microsoft.com>**20060623113303
Happy, Alex and Haddock are built separately using Cabal now.
]
[fix a couple of bugs in markSparkQueue (#799)
Simon Marlow <simonmar at microsoft.com>**20060623092044]
[pull in STABLE(!) tweaks
sof at galois.com**20060622202734]
[fix for when path to GHC contains spaces, from #695
Simon Marlow <simonmar at microsoft.com>**20060622131700]
[Comment only
simonpj at microsoft.com**20060621223940]
[Transfer INLINE to specialised functions
simonpj at microsoft.com**20060621223637
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
simonpj at microsoft.com**20060621205855
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 <simonmar at microsoft.com>**20060621112523]
[Allow Template Haskell to be used with -prof
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060620083410]
[comment out a non-true assertion
Simon Marlow <simonmar at microsoft.com>**20060616140750]
[make compilation a little less noisy
Simon Marlow <simonmar at microsoft.com>**20060616140652]
[allow the max number of workers to scale with +RTS -N
Simon Marlow <simonmar at microsoft.com>**20060616140633]
[fix one-character error in stack check
Simon Marlow <simonmar at microsoft.com>**20060616135621]
[add STM support to the new throwTo mechanism
Simon Marlow <simonmar at microsoft.com>**20060616111937]
[remove duplicate way names (-debug -debug didn't work)
Simon Marlow <simonmar at microsoft.com>**20060616110258]
[Asynchronous exception support for SMP
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060616102311]
[__compat_long_path_size(): have proto and defn agree on return type
sof at galois.com**20060614164650]
[call wakeUpRts() in the correct place
Simon Marlow <simonmar at microsoft.com>**20060614134728]
[readerProc: split up text output using host's line termination convention
sof at galois.com**20060613232605]
[Improve pretty-printing for bags
simonpj at microsoft.com**20060612114020]
[Make scoped type variables work for default methods
simonpj at microsoft.com**20060612113855
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 <dons at cse.unsw.edu.au>**20060612084656]
[Emit 'linking not required' messages only with -v 2 or above.
Don Stewart <dons at cse.unsw.edu.au>**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 <dons at cse.unsw.edu.au>**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 <simonmar at microsoft.com>**20060612084114]
[oops, undo accidental commit of version number
Simon Marlow <simonmar at microsoft.com>**20060612083520]
[Move readline configuration into the readline package
Simon Marlow <simonmar at microsoft.com>**20060609135840]
[fix possible ^C problems
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060608143635]
[fix warnings
Simon Marlow <simonmar at microsoft.com>**20060608143520]
[Make it so that StgWord/StgInt are longs
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060608142844]
[fix a warning
Simon Marlow <simonmar at microsoft.com>**20060608141903]
[fix some warnings
Simon Marlow <simonmar at microsoft.com>**20060608140201]
[Add new RTS flags for tracing:
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060607145848]
[add 'const' modifiers to types where appropriate
Simon Marlow <simonmar at microsoft.com>**20060607145800]
[rearrange casts to avoid gcc warnings
Simon Marlow <simonmar at microsoft.com>**20060607145626]
[warning fix
Simon Marlow <simonmar at microsoft.com>**20060607141013]
[remove //@ stuff
Simon Marlow <simonmar at microsoft.com>**20060607134553]
[Gather timing stats for a Task when it completes.
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060607115105
]
[fix a warning
Simon Marlow <simonmar at microsoft.com>**20060427130048]
[re-enable time package on Windows
simonmar at microsoft.com**20060606124656]
[fix a case of "naughty I386 byte reg"
Simon Marlow <simonmar at microsoft.com>**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
simonmar at microsoft.com**20060606085805
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.
sof at galois.com**20060605165125]
[Remove one more IfaceInlineCall
simonpj at microsoft.com**20060605154305]
[Remove InlinePlease and add inline function and RULE
simonpj at microsoft.com**20060605114900
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
simonpj at microsoft.com**20060605114719]
[fix type of allocateExec
Simon Marlow <simonmar at microsoft.com>**20060601125406]
[stgMallocBytesRWX --> allocateExec
Simon Marlow <simonmar at microsoft.com>**20060601123314]
[fix non-Windows build
Simon Marlow <simonmar at microsoft.com>**20060601121435]
[Win32: set up the console code pages
simonmar at microsoft.com**20060601115423
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
simonmar at microsoft.com**20060601115335]
[improvements to lexical error reporting
simonmar at microsoft.com**20060601115306]
[commented-out debugging code
simonmar at microsoft.com**20060601115247]
[understand Latin-1 symbols
simonmar at microsoft.com**20060601115149]
[stgMallocBytesRWX --> allocateExec
Simon Marlow <simonmar at microsoft.com>**20060531091202
Not sure how I left this out of the previous patch, oh well.
]
['time' depends on 'Win32' when Windows=YES; mirror that
sof at galois.com**20060530223009
when setting up SUBDIRS.
]
[Win32: add _imp__tzname
simonmar at microsoft.com**20060530101452]
[fix Win32 build
simonmar at microsoft.com**20060530101418]
[replace stgMallocBytesRWX() with our own allocator
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060530070721]
[Make rule-matching robust to lets
simonpj at microsoft.com**20060525154447
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
simonpj at microsoft.com**20060525094545]
[Fix egregious and long-standing tidying bug
simonpj at microsoft.com**20060525094300
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
simonpj at microsoft.com**20060525094251]
[performGC_(): don't use the existing Task, always grab a new one
Simon Marlow <simonmar at microsoft.com>**20060525090035]
[Better control of the IO manager thread; improvements to deadlock checking
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060524122103]
[fix a _TARGET_ARCH that should be _HOST_ARCH
Simon Marlow <simonmar at microsoft.com>**20060524122022]
[we don't need OutOfHeapHook(), and the version in the RTS has a better message
Simon Marlow <simonmar at microsoft.com>**20060524112007]
[Bug-fix to patch "Run simplifier before SpecConstr"
simonpj at microsoft.com**20060523130022]
[Run simplifier before SpecConstr
simonpj at microsoft.com**20060523085546
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
simonpj at microsoft.com**20060522192532]
[Add deShadowBinds
simonpj at microsoft.com**20060522192404
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
simonpj at microsoft.com**20060522163255
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
simonpj at microsoft.com**20060522163109
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
simonpj at microsoft.com**20060522110256
*** 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
simonpj at microsoft.com**20060519103433
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)
simonpj at microsoft.com**20060519095022
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
simonpj at microsoft.com**20060519094936]
[Fix a nasty continuation-duplication bug
simonpj at microsoft.com**20060518163617
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
simonpj at microsoft.com**20060518163448]
[Comments only
simonpj at microsoft.com**20060518163425]
[take parsec out of $(GhcBootLibs)
Simon Marlow <simonmar at microsoft.com>**20060518131506]
[Improve documentation of INLINE pragmas
simonpj at microsoft.com**20060518113212]
[a couple of additions
Simon Marlow <simonmar at microsoft.com>**20060518104025]
[#define _REENTRANT 1 (needed to get the right errno on some OSs)
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060518074415]
[Newtype data constructors get a compulsory unfolding
simonpj at microsoft.com**20060517155009
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
simonpj at microsoft.com**20060517154936]
[Retain InlinePragInfo on wrappers
simonpj at microsoft.com**20060517154725
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
simonpj at microsoft.com**20060517154710]
[Retain INLINE pragma information during indirection-shorting
simonpj at microsoft.com**20060517154449
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
simonpj at microsoft.com**20060517154349]
[Comments only
simonpj at microsoft.com**20060517154304]
[Improve pretty-printing slightly
simonpj at microsoft.com**20060517154204]
[Let GHCi work with with Sparc32+/V8+ .o files
Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**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 <simonmar at microsoft.com>**20060515090031
In particular, add -fno-builtin to x86 and x86_64, which was missing.
]
[set $(GhcVersion) and $(GhcPatchLevel) correctly when $(UseStage1)==YES
Simon Marlow <simonmar at microsoft.com>**20060510124621]
[.raw_s and .s live in $(odir), not the source dir
Simon Marlow <simonmar at microsoft.com>**20060510121524]
[additions from Reilly Hayes
Simon Marlow <simonmar at microsoft.com>**20060510120000]
[some tweaks to the HC bootstrapping instructions
Simon Marlow <simonmar at microsoft.com>**20060510115236]
[Ignore unboxed values in breakpoints.
Lemmih <lemmih at gmail.com>**20060510072722]
[Don't read ~/.ghci on breakpoints.
Lemmih <lemmih at gmail.com>**20060509223455]
[make it possible to define an alias for :quit
Simon Marlow <simonmar at microsoft.com>**20060509083124]
[Do not put wired-in things in interface files
simonpj at microsoft.com**20060508142946
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
simonpj at microsoft.com**20060508142834
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
simonpj at microsoft.com**20060508141804]
[Trim imports
simonpj at microsoft.com**20060508141713]
[GHC_MANGLER-->MANGLER
Simon Marlow <simonmar at microsoft.com>**20060508111206]
[Fix bug #763: Breakpoint mechanism crashes when there's a type error.
Lemmih <lemmih at gmail.com>**20060505232158]
[breakpointCond
Lemmih <lemmih at gmail.com>**20060502174340]
[Preserve type variable names during type inference
simonpj at microsoft.com**20060505153753
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
simonpj at microsoft.com**20060505150506]
[fixup for new source tree layout
Simon Marlow <simonmar at microsoft.com>**20060505114100]
[FPTOOLS_TOP-->GHC_TOP, and remove some references to "fptools"
Simon Marlow <simonmar at microsoft.com>**20060505110520]
[$(FPTOOLS_TOP) is now known as $(GHC_TOP)
Simon Marlow <simonmar at microsoft.com>**20060505110127
I kept $(FPTOOLS_TOP) as an alias for $(GHC_TOP) while we switch
]
[update the build system documentation
Simon Marlow <simonmar at microsoft.com>**20060505105843]
[update for new source tree layout
Simon Marlow <simonmar at microsoft.com>**20060505102903]
[partial update for new source tree layout
Simon Marlow <simonmar at microsoft.com>**20060505030218]
[update for new source tree layout (untested)
Simon Marlow <simonmar at microsoft.com>**20060505081549]
[Print a more helpful error for find_thing
simonpj at microsoft.com**20060504153337]
[Fix a bug in rule matching
simonpj at microsoft.com**20060504112430
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
simonpj at microsoft.com**20060504112131
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
simonpj at microsoft.com**20060504111804
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
simonpj at microsoft.com**20060504111500
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
simonpj at microsoft.com**20060504111429]
[small clarification
Simon Marlow <simonmar at microsoft.com>**20060504103414]
[small fix to booting instructions from #762
Simon Marlow <simonmar at microsoft.com>**20060504083104]
[$(ProjectNameShort) => ghc
Simon Marlow <simonmar at microsoft.com>**20060503102419]
[only pass -fno-unit-at-a-time to gcc if it is supported
Simon Marlow <simonmar at microsoft.com>**20060503093614]
[Arrange that -fth is no longer implied by -fglasgow-exts
simonpj at microsoft.com**20060426182114
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 <simonmar at microsoft.com>**20060502114235]
[move "compat" earlier in the build for .hc bootstrapping
Simon Marlow <simonmar at microsoft.com>**20060502112001]
[fix ctime_r problem on Solaris (I hope)
Simon Marlow <simonmar at microsoft.com>**20060502111231]
[fix whitespace problem that shows up on Solaris (x86)
Simon Marlow <simonmar at microsoft.com>**20060502110001]
[libraries/time is boring
Simon Marlow <simonmar at microsoft.com>**20060502105524]
[add time package to libraries Makefile
Ashley Yakeley <ashley at semantic.org>**20060501092241]
[add time package to default-packages
Ashley Yakeley <ashley at semantic.org>**20060426070445]
[Fix stage2 segfault on openbsd.
dons at cse.unsw.edu.au**20060428074811
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 <simonmar at microsoft.com>**20060428085252]
[Fix bug shown in the mod77 test.
Lemmih <lemmih at gmail.com>**20060427113313]
[Don't init root pointers if they aren't gonna be used.
Lemmih <lemmih at gmail.com>**20060426111143]
[Fix recompilation checking.
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060425082823]
[fix problem with binary-dist docs
Simon Marlow <simonmar at microsoft.com>**20060424090159]
[Enable breakpoint support.
Lemmih <lemmih at gmail.com>**20060421113112]
[Fixing some lexer errors with extcore
Josef Svenningsson <josef.svenningsson at gmail.com>**20060420222625]
[Extcore can now handle data types without constructors
Josef Svenningsson <josef.svenningsson at gmail.com>**20060420213622]
[Comments only
Josef Svenningsson <josef.svenningsson at gmail.com>**20060420213555]
[Resurrect ProjectName
sven.panne at aedion.de**20060421085125]
[Remove the section on platform support, link to the wiki page
Simon Marlow <simonmar at microsoft.com>**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
rl at cse.unsw.edu.au**20060420044223]
[hslibs is dead, Jim...
sven.panne at aedion.de**20060419144609]
[Synched .spec file with reality
sven.panne at aedion.de**20060419143138]
[Add .spec file to source distribution
sven.panne at aedion.de**20060419103725]
[remove paragraph about mutable objects that doesn't apply now
Simon Marlow <simonmar at microsoft.com>**20060419082038]
[HsBool should be HsInt, not StgBool
Simon Marlow <simonmar at microsoft.com>**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 <simonmar at microsoft.com>**20060418143936
Fixes #746
]
[update commentry for foreign import "wrapper" handling
Simon Marlow <simonmar at microsoft.com>**20060418143714]
[remove vestiges of ByteArray and MutableByteArray, which are no more
Simon Marlow <simonmar at microsoft.com>**20060418143641]
[Comment only
simonpj at microsoft.com**20060418125624]
[Fix rank-validity testing
simonpj at microsoft.com**20060418125350
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 <lemmih at gmail.com>**20060418023606]
[Fix minor bug in Linker.withExtendedLinkEnv
Lemmih <lemmih at gmail.com>**20060418023518]
[Export 'insertSymbol' and 'insertStableSymbol'.
Lemmih <lemmih at gmail.com>**20060418021806
'insertStableSymbol' is used for exporting closures that are affected by the GC.
]
[Allow $x, as well as $(x), at top level in TH
simonpj at microsoft.com**20060414121907
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)
simonpj at microsoft.com**20060414120411]
[Comments only
simonpj at microsoft.com**20060414120359]
[Recover gracefully from a Template Haskell programmers error
simonpj at microsoft.com**20060414115831
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
simonpj at microsoft.com**20060414105212]
[Cosmetics in SpecConstr
simonpj at microsoft.com**20060412152721
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
simonpj at microsoft.com**20060412152327
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 <simonmar at microsoft.com>**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
simonpj at microsoft.com**20060411135334]
[remove a trace
Simon Marlow <simonmar at microsoft.com>**20060411131531]
[Allow IO to be wrapped in a newtype in foreign import/export
simonpj at microsoft.com**20060411120441
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
simonpj at microsoft.com**20060402215911
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 <simonmar at microsoft.com>**20060411090131]
[avoid versionitis in Numeric.showHex (should fix tcrun007)
Simon Marlow <simonmar at microsoft.com>**20060411085009]
[add a note about full-laziness
Simon Marlow <simonmar at microsoft.com>**20060410093824]
[robustify the test for the top of the tree a little
Simon Marlow <simonmar at microsoft.com>**20060410082224]
[Make darcs-all work without a ghc toplevel directory
Josef Svenningsson <josef.svenningsson at gmail.com>**20060407161738]
[Fix typo in darcsall warning
Josef Svenningsson <josef.svenningsson at gmail.com>**20060407161335]
[fix source dists
Simon Marlow <simonmar at microsoft.com>**20060407150045]
[add a README for binary dists
Simon Marlow <simonmar at microsoft.com>**20060407143832]
[fix binary dists
Simon Marlow <simonmar at microsoft.com>**20060407143822]
[remove the last bits of the ghc/ subdir
Simon Marlow <simonmar at microsoft.com>**20060407085219]
[TAG 07.04.06
Lemmih <lemmih at gmail.com>**20060407130411]
Patch bundle hash:
ac61d27949716304359d440c1b317cab140514ed
More information about the Cvs-ghc
mailing list