diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2017-07-31 10:49:16 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2017-07-31 13:36:49 +0100 |
commit | 46368868dc85fc7f0c95fe88af892ad850ed7bc6 (patch) | |
tree | 4e290b5580fa55e445712f5a0653bcb3c229c30b /utils | |
parent | 2535a6716202253df74d8190b028f85cc6d21b72 (diff) | |
download | haskell-46368868dc85fc7f0c95fe88af892ad850ed7bc6.tar.gz |
Improve the desugaring of -XStrict
Trac #14035 showed that -XStrict was generating some TERRIBLE
desugarings, espcially for bindings with INLINE pragmas. Reason: with
-XStrict, all AbsBinds (even for non-recursive functions) went via the
general-case deguaring for AbsBinds, namely "generate a tuple and
select from it", even though in this case there was only one variable
in the tuple. And that in turn interacts terribly badly with INLINE
pragmas.
This patch cleans things up:
* I killed off AbsBindsSig completely, in favour of a boolean flag
abs_sig in AbsBinds. See Note [The abs_sig field of AbsBinds]
This allowed me to delete lots of code; and instance-method
declarations can enjoy the benefits too. (They could have
before, but no one had changed them to use AbsBindsSig.)
* I refactored all the AbsBinds handling in DsBinds into a new
function DsBinds.dsAbsBinds. This allowed me to handle the
strict case uniformly
Diffstat (limited to 'utils')
-rw-r--r-- | utils/ghctags/Main.hs | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/utils/ghctags/Main.hs b/utils/ghctags/Main.hs index c4db3ca212..f74c7514db 100644 --- a/utils/ghctags/Main.hs +++ b/utils/ghctags/Main.hs @@ -284,7 +284,6 @@ boundThings modname lbinding = PatBind { pat_lhs = lhs } -> patThings lhs [] VarBind { var_id = id } -> [FoundThing modname (getOccString id) (startOfLocated lbinding)] AbsBinds { } -> [] -- nothing interesting in a type abstraction - AbsBindsSig { } -> [] PatSynBind PSB{ psb_id = id } -> [thing id] where thing = foundOfLName modname patThings lpat tl = |