diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2016-07-20 12:34:54 +0200 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2016-07-20 15:58:02 +0200 |
commit | 9513fe6bdeafd35ca1a04e17b5f94732516766aa (patch) | |
tree | 7a18f5beb24e31e1b0af71d2450f9228685e6ad5 /compiler/prelude/PrelNames.hs | |
parent | ed4809813fa51524ae73a4475afe33018a67f87d (diff) | |
download | haskell-9513fe6bdeafd35ca1a04e17b5f94732516766aa.tar.gz |
Clean up interaction between name cache and built-in syntax
This cleans up various aspects of the handling of built-in syntax in the
original name cache (hopefully resulting in a nice reduction in compiler
allocations),
* Remove tuple types from original name cache: There is really no
reason for these to be in the name cache since we already handle
them specially in interface files to ensure that we can resolve them
directly to Names, avoiding extraneous name cache lookups.
* Sadly it's not possible to remove all traces of tuples from the
name cache, however. Namely we need to keep the tuple type
representations in since otherwise they would need to be wired-in
* Remove the special cases for (:), [], and (##) in isBuiltInOcc_maybe
and rename it to isTupleOcc_maybe
* Split lookupOrigNameCache into two variants,
* lookupOrigNameCache': Merely looks up an OccName in the original
name cache, making no attempt to resolve tuples
* lookupOrigNameCache: Like the above but handles tuples as well.
This is given the un-primed name since it does the "obvious"
thing from the perspective of an API user, who knows nothing of
our special treatment of tuples.
Arriving at this design took a significant amount of iteration. The
trail of debris leading here can be found in #11357.
Thanks to ezyang and Simon for all of their help in coming to this
solution.
Test Plan: Validate
Reviewers: goldfire, simonpj, austin
Reviewed By: simonpj
Subscribers: thomie, ezyang
Differential Revision: https://phabricator.haskell.org/D2414
GHC Trac Issues: #11357
Diffstat (limited to 'compiler/prelude/PrelNames.hs')
-rw-r--r-- | compiler/prelude/PrelNames.hs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/prelude/PrelNames.hs b/compiler/prelude/PrelNames.hs index 5ed31519e9..483006f638 100644 --- a/compiler/prelude/PrelNames.hs +++ b/compiler/prelude/PrelNames.hs @@ -87,7 +87,8 @@ This is accomplished through a combination of mechanisms: b) The known infinite families of names are specially serialised by BinIface.putName, with that special treatment detected when we read back to ensure that we get back to the - correct uniques. + correct uniques. See Note [Symbol table representation of names] + in BinIface. Most of the infinite families cannot occur in source code, so mechanisms (a,b) sufficies to ensure that they always have |