Clean up handling of known-key Names in interface files
authorBen Gamari <bgamari.foss@gmail.com>
Fri, 14 Oct 2016 01:53:13 +0000 (21:53 -0400)
committerBen Gamari <ben@smart-cactus.org>
Fri, 14 Oct 2016 02:57:13 +0000 (22:57 -0400)
commit34d933d6a821edf5abfcbee76d9325362fc28a13
treec371fe1f7d1b6ea6d8b3fb9185d10bf4115fb2e6
parent1cccb646e2e4bcf3bbb1f2ad01737f7e745b5f1b
Clean up handling of known-key Names in interface files

Previously BinIface had some dedicated logic for handling tuple names in
the symbol table. As it turns out, this logic was essentially dead code
as it was superceded by the special handling of known-key things. Here
we cull the tuple code-path and use the known-key codepath for all
tuple-ish things.

This had a surprising number of knock-on effects,

 * constraint tuple datacons had to be made known-key (previously they
   were not)

 * IfaceTopBndr was changed from being a synonym of OccName to a
   synonym of Name (since we now need to be able to deserialize Names
   directly from interface files)

 * the change to IfaceTopBndr complicated fingerprinting, since we need
   to ensure that we don't go looking for the fingerprint of the thing
   we are currently fingerprinting in the fingerprint environment (see
   notes in MkIface). Handling this required distinguishing between
   binding and non-binding Name occurrences in the Binary serializers.

 * the original name cache logic which previously lived in IfaceEnv has
   been moved to a new NameCache module

 * I ripped tuples and sums out of knownKeyNames since they introduce a
   very large number of entries. During interface file deserialization
   we use static functions (defined in the new KnownUniques module) to
   map from a Unique to a known-key Name (the Unique better correspond
   to a known-key name!) When we need to do an original name cache
   lookup we rely on the parser implemented in isBuiltInOcc_maybe.

 * HscMain.allKnownKeyNames was folded into PrelInfo.knownKeyNames.

 * Lots of comments were sprinkled about describing the new scheme.

Updates haddock submodule.

Test Plan: Validate

Reviewers: niteria, simonpj, austin, hvr

Reviewed By: simonpj

Subscribers: simonmar, niteria, thomie

Differential Revision: https://phabricator.haskell.org/D2467

GHC Trac Issues: #12532, #12415
33 files changed:
compiler/backpack/RnModIface.hs
compiler/basicTypes/Name.hs
compiler/basicTypes/Name.hs-boot
compiler/basicTypes/NameCache.hs [new file with mode: 0644]
compiler/basicTypes/Unique.hs
compiler/ghc.cabal.in
compiler/ghc.mk
compiler/iface/BinFingerprint.hs [new file with mode: 0644]
compiler/iface/BinIface.hs
compiler/iface/FlagChecker.hs
compiler/iface/IfaceEnv.hs
compiler/iface/IfaceSyn.hs
compiler/iface/LoadIface.hs
compiler/iface/MkIface.hs
compiler/iface/TcIface.hs
compiler/main/HscMain.hs
compiler/main/HscTypes.hs
compiler/main/TidyPgm.hs
compiler/prelude/KnownUniques.hs [new file with mode: 0644]
compiler/prelude/KnownUniques.hs-boot [new file with mode: 0644]
compiler/prelude/PrelInfo.hs
compiler/prelude/PrelNames.hs
compiler/prelude/TysWiredIn.hs
compiler/simplCore/CoreMonad.hs
compiler/typecheck/TcRnDriver.hs
compiler/utils/Binary.hs
compiler/utils/Fingerprint.hsc
ghc/Main.hs
libraries/base/GHC/Fingerprint.hs
testsuite/tests/perf/compiler/all.T
testsuite/tests/perf/space_leaks/all.T
testsuite/tests/typecheck/should_fail/T12035j.stderr
utils/haddock