- 11 Mar, 2010 2 commits
-
-
Simon Marlow authored
This replaces some complicated locking schemes with message-passing in the implementation of throwTo. The benefits are - previously it was impossible to guarantee that a throwTo from a thread running on one CPU to a thread running on another CPU would be noticed, and we had to rely on the GC to pick up these forgotten exceptions. This no longer happens. - the locking regime is simpler (though the code is about the same size) - threads can be unblocked from a blocked_exceptions queue without having to traverse the whole queue now. It's a rare case, but replaces an O(n) operation with an O(1). - generally we move in the direction of sharing less between Capabilities (aka HECs), which will become important with other changes we have planned. Also in this patch I replaced several STM-specific closure types with a generic MUT_PRIM closure type, which allowed a lot of code in the GC and other places to go away, hence the line-count reduction. The message-passing changes resulted in about a net zero line-count difference.
-
Simon Marlow authored
-
- 23 Nov, 2009 1 commit
-
-
Simon Marlow authored
-
- 09 Mar, 2010 12 commits
-
-
simonpj@microsoft.com authored
We were getting a bogus claim that a newtype "data constructor" was unused. The fix is easy, although I had to add a field to the constructor TcEnv.NewTypeDerived See Note [Newtype deriving and unused constructors] in TcDeriv
-
simonpj@microsoft.com authored
While I was looking at the rule binders generated in DsBinds for specialise pragmas, I also looked at Specialise. It too was "cloning" the dictionary binders including their IdInfo. In this case they should not have any, but its seems better to make them completely fresh rather than substitute in existing (albeit non-existent) IdInfo.
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
When DsBinds deals with a SPECIALISE pragma, it makes up the binders for a RULE. These binders should be very vanilla: no IdInfo of any sort. But the way it was before they could have DFun pragmas, which led to Bad Joss downstream. (Actually to cause a downstream *error* was itself a bug, which I've fixed, but it's clearly wrong for them to be DFuns!)
-
simonpj@microsoft.com authored
isClosedUnfolding should say False for DFUnUnfolding!
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
We were getting "INLINEALWAYS" printed out here and there. Now there are always brackets around the activation, thus "INLINE[ALWAYS]"
-
Simon Marlow authored
The idea is that this leaves Tasks and OSThread in one-to-one correspondence. The part of a Task that represents a call into Haskell from C is split into a separate struct InCall, pointed to by the Task and the TSO bound to it. A given OSThread/Task thus always uses the same mutex and condition variable, rather than getting a new one for each callback. Conceptually it is simpler, although there are more types and indirections in a few places now. This improves callback performance by removing some of the locks that we had to take when making in-calls. Now we also keep the current Task in a thread-local variable if supported by the OS and gcc (currently only Linux).
-
Simon Marlow authored
-
Simon Marlow authored
This fixes occasional failures of ffi002(threaded1) on a loaded machine.
-
- 05 Mar, 2010 2 commits
-
-
simonpj@microsoft.com authored
(and similarly for PS and PDF) The previous setup nuked the rules for making the documentation when BUILD_DOCBOOK_HTML=NO. This meant that "make html" didn't work. There isn't any reason to nuke the rules (so far as Simon and I know).
-
simonpj@microsoft.com authored
preInlineUnconditionally was, in effect, nuking an INLINE pragma, with very bad effect on runtime in this program. Fortunately the fix is very simple. See Note [InlineRule and preInlineUnconditionally] in SimplUtils.
-
- 04 Mar, 2010 9 commits
-
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
This one was bigger than I anticipated! The problem was that were were gathering the binders from a pattern before renaming -- but with record wild-cards we don't know what variables are bound by C {..} until after the renamer has filled in the "..". So this patch does the following * Change all the collect-X-Binders functions in HsUtils so that they expect to only be called *after* renaming. That means they don't need to return [Located id] but just [id]. Which turned out to be a very worthwhile simplification all by itself. * Refactor the renamer, and in ptic RnExpr.rnStmt, so that it doesn't need to use collectLStmtsBinders on pre-renamed Stmts. * This in turn required me to understand how GroupStmt and TransformStmts were renamed. Quite fiddly. I rewrote most of it; result is much shorter. * In doing so I flattened HsExpr.GroupByClause into its parent GroupStmt, with trivial knock-on effects in other files. Blargh.
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
-
simonpj@microsoft.com authored
a) Even with -dsuppress-uniques, don't suppress them when outputing code, else the assembler falls over bleating b) Do suppress uniques in names generated by TH. It's a bit grungy to do this: see Note [Suppressing uniques in OccNames]. But it's only needed for test de-wobblification so the grunge isn't really important.
-
Simon Marlow authored
-
- 03 Mar, 2010 2 commits
-
-
simonpj@microsoft.com authored
-
Simon Marlow authored
This makes things more consistent, and avoids a strange "Prelude is not loaded" error when there is a Prelude.hs on the search path.
-
- 02 Mar, 2010 6 commits
-
-
Simon Marlow authored
-
Simon Marlow authored
-
Ian Lynagh authored
-
Ian Lynagh authored
Now not only is if/then a bracketting pair, but then/else is too
-
Ian Lynagh authored
If enabled, these accept more layout, but give warnings
-
Ian Lynagh authored
It used to break on let {x = 'a'} in x as the 'in' token would keep closing contexts looking for an implicit 'let' layout.
-
- 01 Mar, 2010 1 commit
-
-
Simon Marlow authored
-
- 27 Feb, 2010 1 commit
-
-
ich@christoph-bauer.net authored
-
- 01 Mar, 2010 4 commits
-
-
simonpj@microsoft.com authored
This just ensures that an unsafe coercion is as localised as possible. For example, instead of UnsafeCo (Int -> t1) (Int -> t2) use Int -> UnsafeCo t1 t2
-
simonpj@microsoft.com authored
If we can't derive a type, but it's a reasonable possibility that newtype deriving would do the job, suggest it. A little refactoring too, moving non_iso_class to top level, and putting it with std_class_via_iso.
-
simonpj@microsoft.com authored
If we find ourselves making up an AnyTyCon of kind '??', say, then default it to liftedTypeKind. And similarly for any sub-kind of LiftedTypeKind. This is just a tidy-up.
-
simonpj@microsoft.com authored
The panic message in ifaceTyConName on IfaceAnyTc called the pretty-printer, called ifaceTyConName again, which caused an infinite regress. Stupid. See * Note [The Name of an IfaceAnyTc], and * The Outputable instance for IfaceTyCon
-