summaryrefslogtreecommitdiff
path: root/ghc
Commit message (Collapse)AuthorAgeFilesLines
* [project @ 2001-03-13 14:58:25 by simonpj]simonpj2001-03-1337-392/+387
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ---------------- Nuke ClassContext ---------------- This commit tidies up a long-standing inconsistency in GHC. The context of a class or instance decl used to be restricted to predicates of the form C t1 .. tn with type ClassContext = [(Class,[Type])] but everywhere else in the compiler we used type ThetaType = [PredType] where PredType can be any sort of constraint (= predicate). The inconsistency actually led to a crash, when compiling class (?x::Int) => C a where {} I've tidied all this up by nuking ClassContext altogether, and using PredType throughout. Lots of modified files, but all in more-or-less trivial ways. I've also added a check that the context of a class or instance decl doesn't include a non-inheritable predicate like (?x::Int). Other things * rename constructor 'Class' from type TypeRep.Pred to 'ClassP' (makes it easier to grep for) * rename constructor HsPClass => HsClassP HsPIParam => HsIParam
* [project @ 2001-03-13 14:18:47 by simonmar]simonmar2001-03-131-1/+1
| | | | re-instate an ASSERT that was temporarily commented out.
* [project @ 2001-03-13 14:17:16 by simonmar]simonmar2001-03-131-21/+25
| | | | Fix let-no-escapes again.
* [project @ 2001-03-13 12:50:29 by simonmar]simonmar2001-03-1330-1339/+1280
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some rearrangements that Simon & I have been working on recently: - CoreSat is now CorePrep, and is a general "prepare-for-code- generation" pass. It does cloning, saturation of constructors & primops, A-normal form, and a couple of other minor fiddlings. - CoreTidy no longer does cloning, and minor fiddlings. It doesn't need the unique supply any more, so that's removed. - CoreToStg now collects CafInfo and the list of CafRefs for each binding. The SRT pass is much simpler now. - IdInfo now has a CgInfo field for "code generator info". It currently contains arity (the actual code gen arity which affects the calling convention as opposed to the ArityInfo which is a measure of how many arguments the Id can be applied to before it does any work), and CafInfo. Previously we overloaded the ArityInfo field to contain both codegen arity and simplifier arity. Things are cleaner now. - CgInfo is collected by CoreToStg, and passed back into CoreTidy in a loop. The compiler will complain rather than going into a black hole if the CgInfo is pulled on too early. - Worker info in an interface file now comes with arity info attached. Previously the main arity info was overloaded for this purpose, but it lead to a few hacks in the compiler, this tidies things up somewhat. Bottom line: we removed several fragilities, and tidied up a number of things. Code size should be smaller, but we'll see...
* [project @ 2001-03-12 16:33:56 by simonpj]simonpj2001-03-121-3/+17
| | | | Make a better CPR wrapper when profiling is in use
* [project @ 2001-03-12 14:59:32 by sewardj]sewardj2001-03-121-0/+1
| | | | Fix overenthusiatic import GCing, I presume.
* [project @ 2001-03-12 14:06:46 by simonpj]simonpj2001-03-1211-456/+473
| | | | | | | | | | | | | | ---------------- First cut at ILX ---------------- This commit puts the ILX .NET code generator into the head. It's entirely untested, mind you. Some changes to the Module/Package strutures, mainly of a naming variety. In particular: Package ===> PackageConfig
* [project @ 2001-03-12 14:06:38 by simonpj]simonpj2001-03-121-4/+1
| | | | Remove -funfolding-interface-threshold
* [project @ 2001-03-09 14:44:15 by simonmar]simonmar2001-03-092-0/+5
| | | | | infix declarations for unknown identifiers aren't allowed (contrary to what GHC thinks).
* [project @ 2001-03-08 18:05:31 by qrczak]qrczak2001-03-081-2/+2
| | | | s/setIdGlobalDetails/sedGlobalIdDetails/, and import it.
* [project @ 2001-03-08 18:03:34 by qrczak]qrczak2001-03-081-2/+2
| | | | Fix names imported from Id.
* [project @ 2001-03-08 13:42:17 by simonmar]simonmar2001-03-081-0/+1
| | | | add expected output
* [project @ 2001-03-08 13:41:31 by simonmar]simonmar2001-03-081-6/+12
| | | | update for blocking putMVar
* [project @ 2001-03-08 13:33:23 by simonpj]simonpj2001-03-081-0/+66
| | | | Add NameEnv!
* [project @ 2001-03-08 12:07:38 by simonpj]simonpj2001-03-0853-783/+711
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -------------------- A major hygiene pass -------------------- 1. The main change here is to Move what was the "IdFlavour" out of IdInfo, and into the varDetails field of a Var It was a mess before, because the flavour was a permanent attribute of an Id, whereas the rest of the IdInfo was ephemeral. It's all much tidier now. Main places to look: Var.lhs Defn of VarDetails IdInfo.lhs Defn of GlobalIdDetails The main remaining infelicity is that SpecPragmaIds are right down in Var.lhs, which seems unduly built-in for such an ephemeral thing. But that is no worse than before. 2. Tidy up the HscMain story a little. Move mkModDetails from MkIface into CoreTidy (where it belongs more nicely) This was partly forced by (1) above, because I didn't want to make DictFun Ids into a separate kind of Id (which is how it was before). Not having them separate means we have to keep a list of them right through, rather than pull them out of the bindings at the end. 3. Add NameEnv as a separate module (to join NameSet). 4. Remove unnecessary {-# SOURCE #-} imports from FieldLabel.
* [project @ 2001-03-08 11:59:02 by simonpj]simonpj2001-03-081-101/+135
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ------------------------- Remove function coercions ------------------------- (coerce (T1->T2) (S1->S2) F) E ===> coerce T2 S2 (F (coerce S1 T1 E)) This is a generally good transformation, but it still doesn't solve the problem I was after. Consider newtype T = MkT (Int -> Int) p :: T->T; p = ... q :: T; q = ... foo :: T {-# INLINE foo #-} foo = p $ q f = \y -> ...((coerce (Int->Int) foo) 3)... Trouble is, foo doesn't see the argument because of the coerce, so it thinks it's a lone variable and doesn't inline. Another problem is that since $ ins't inlined into foo's RHS, foo looks like a redex, which we are reluctant to inline inside a lambda, even with an INLINE pragma. Maybe we should be bolder? Anyway, this commit is an improvement to Simplify, but the story is not over!
* [project @ 2001-03-08 11:44:16 by simonmar]simonmar2001-03-081-5/+4
| | | | remove cyclic dependency
* [project @ 2001-03-08 09:50:18 by simonmar]simonmar2001-03-084-32/+34
| | | | rearrange slightly to make this compile again.
* [project @ 2001-03-07 12:35:50 by simonpj]simonpj2001-03-071-740/+740
| | | | Remove DOS Ctrl-Ms
* [project @ 2001-03-07 10:28:40 by rrt]rrt2001-03-071-1/+2
| | | | Import v_TmpDir.
* [project @ 2001-03-07 10:27:43 by rrt]rrt2001-03-071-0/+1
| | | | | | On mingwin, remove CRs from input file, to prevent problems when reading from unmounted partitions. (This shouldn't be a problem, but it is; this fix makes the mangler a bit more robust anyway.)
* [project @ 2001-03-06 15:59:11 by simonmar]simonmar2001-03-061-2/+1
| | | | undo accidental change
* [project @ 2001-03-06 15:58:47 by simonmar]simonmar2001-03-061-12/+10
| | | | changes to build new ParsePkgConf module
* [project @ 2001-03-06 15:00:25 by rrt]rrt2001-03-063-6/+7
| | | | Use TMPDIR, not /tmp.
* [project @ 2001-03-06 11:23:46 by simonmar]simonmar2001-03-064-20/+129
| | | | | | | | | | | | - Add a Happy parser for the package config file. This is faster and compiles to less code than the derived Read instance we had before. - Add a source_dirs field to the package spec. This isn't used by GHC, because we currently assume all packages are compiled. It could be used by Hugs, though. - Make unspecified fields of type [String] default to the empty list in a package spec.
* [project @ 2001-03-06 10:13:35 by simonmar]simonmar2001-03-061-4/+4
| | | | import wibbles
* [project @ 2001-03-06 07:58:43 by simonpj]simonpj2001-03-061-3/+7
| | | | Fix minor bug in SpecConstr; failed to deal with DEFAULT case
* [project @ 2001-03-05 15:37:25 by simonpj]simonpj2001-03-051-16/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Exploit the 1-shot lambda HACK in etaExpandArity We often find code like f :: Int -> IO () f = \ x -> case ... of p1 -> \s -> ...rhs1... p2 -> \s -> ...rhs2... where the \s is a state transformer lambda. Almost invariably these \s things are one-shot; that is, we virtually never say let h = f 3 in h >> h >> h In this case we'd be much better off eta-expanding f, to f :: Int -> IO () f = \ x \ s -> case ... of p1 -> ...rhs1... p2 -> ...rhs2... GHC already has a MAJOR HACK in Id.isOneShotLambda which declares that any \s::State# T is a one-shot lambda. It's almost always true, and it makes a big difference. This commit simply makes use of isOneShotLambda to improve the results of CoreUtils.etaExpandArity. Which has the desired effect. There isn't a flag to control the MAJOR HACK yet. Maybe there should be. Anyway, some of Manuel's array code should improve a lot.
* [project @ 2001-03-05 12:46:16 by simonpj]simonpj2001-03-051-1/+1
| | | | Print debug uniques consistently in base64
* [project @ 2001-03-05 12:45:45 by simonpj]simonpj2001-03-052-67/+161
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Improve SpecConstr This commit fixes SpecConstr so that it can see the effect of enclosing case expressions properly. That's what the "cons" field in ScEnv is for. As a result, consider this function: data AccessPath = Cont AccessPath | Value Int demandAll n ap@(Cont (Value (I# i1))) = case n of 0 -> i1 other -> i1 +# demandAll (n-1) ap SpecConstr now successfully compiles it to this: $s$wdemandAll = \ i1 :: PrelGHC.Int# sc :: PrelGHC.Int# -> case sc of ds { 0 -> i1; __DEFAULT -> PrelGHC.+# i1 (Foo.$s$wdemandAll i1 (PrelGHC.-# ds 1)) } with the rule "SC:$wdemandAll1" __forall i1 :: PrelGHC.Int# , sc :: PrelGHC.Int# . Foo.$wdemandAll sc (Foo.$wCont (Foo.$wValue (PrelBase.$wI# i1))) = Foo.$s$wdemandAll i1 sc ;
* [project @ 2001-03-05 12:19:37 by simonpj]simonpj2001-03-051-6/+9
| | | | Better dump of transformation rules
* [project @ 2001-03-05 12:18:43 by simonpj]simonpj2001-03-051-1/+0
| | | | Remove debug trace
* [project @ 2001-03-05 12:18:21 by simonpj]simonpj2001-03-051-2/+2
| | | | Make error message more helpful
* [project @ 2001-03-05 12:18:05 by simonpj]simonpj2001-03-051-8/+1
| | | | Remove dead isSysOcc
* [project @ 2001-03-05 10:34:44 by simonpj]simonpj2001-03-052-0/+55
| | | | Add a test that Hugs-Feb-2001 fails
* [project @ 2001-03-05 10:29:00 by simonmar]simonmar2001-03-051-7/+1
| | | | remove cruft
* [project @ 2001-03-05 10:06:27 by simonmar]simonmar2001-03-051-7/+7
| | | | small rearrangement
* [project @ 2001-03-05 10:05:58 by simonmar]simonmar2001-03-051-2/+2
| | | | fix -fgenerics
* [project @ 2001-03-05 00:07:23 by qrczak]qrczak2001-03-052-141/+335
| | | | | | | | | | | | | | Use custom parser monad instead of Parsec. It remembers the text which has been parsed, so it needs not to be reconstructed after parsing. Operators containing '--' are now handled correctly. '#' triggers special processing only if it's not a part of an operator, i.e. if a varsym token is exactly a single '#'. Backslash-newline pairs in C lexical world are now handled correctly (removed at an early stage). Option --keep replaced with --no-compile (stop after writing *.hs_make.c).
* [project @ 2001-03-04 11:18:03 by qrczak]qrczak2001-03-041-6/+6
| | | | Fix #{stuff} parsing when stuff contains end of line.
* [project @ 2001-03-04 08:31:13 by qrczak]qrczak2001-03-041-1/+3
| | | | Properly clean PrelPrimopWrappers for all ways.
* [project @ 2001-03-03 02:50:04 by chak]chak2001-03-031-9/+9
| | | | Slightly more compact ppr for Core (makes it easier to read large functions).
* [project @ 2001-03-02 17:35:20 by simonmar]simonmar2001-03-023-40/+147
| | | | | Fix :type again, by resurrecting typecheckExpr. Now the expression doesn't get the monomorphism restriction applied to it.
* [project @ 2001-03-02 16:15:53 by simonmar]simonmar2001-03-023-9/+31
| | | | | | | | | | | | | | ASSERT in updateWithIndirection() that we haven't already updated this object with an indirection, and fix two places in the RTS where this could happen. The problem only occurs when we're in a black-hole-style loop, and there are multiple update frames on the stack pointing to the same object (this is possible because of lazy black-holing). Both stack squeezing and asynchronous exception raising walk down the stack and remove update frames, updating their contents with indirections. If we don't protect against multiple updates, the mutable list in the old generation may get into a bogus state.
* [project @ 2001-03-02 16:12:18 by simonmar]simonmar2001-03-022-73/+75
| | | | Add a new closure flag, IND, to identify indirections.
* [project @ 2001-03-02 14:36:16 by simonmar]simonmar2001-03-021-4/+7
| | | | Add some ASSERT()s so we can catch updates where updatee==target.
* [project @ 2001-03-02 14:28:44 by simonmar]simonmar2001-03-021-2/+5
| | | | | | | | | | | Yet another good bug (I'm on a roll today! :-) When squeezing update frames, make sure the updatee pointers aren't identical before updating one to point to the other. This is mostly harmless, but in one example I have caused the program to go into an infinite loop rather than fall down a black hole. To be merged into the 4.08 branch.
* [project @ 2001-03-02 14:26:40 by simonmar]simonmar2001-03-021-2/+2
| | | | | | | Another good bug: the stack check in the AP_UPD entry code was wrong. This one is a definite source of crashes. To be merged into the 4.08 branch.
* [project @ 2001-03-02 14:25:04 by simonmar]simonmar2001-03-021-1/+6
| | | | | | | | A good bug: detectBlackHoles wasn't checking for ThreadRelocated, which is why we sometimes get "no threads to run: infinite loop or deadlock?" when we should get a NonTermination exception. To be merged into the 4.08 branch.
* [project @ 2001-03-02 10:52:15 by simonmar]simonmar2001-03-021-5/+7
| | | | | | | Don't context switch on the timer if the flag +RTS -C0 is given. This gives us reliable/repeatable runs with -C0 (I've been running with a similar change for months now, debugging is virtually impossible without it).