Add PlainPanic for throwing exceptions without depending on pprint
authorMichael Sloan <mgsloan@gmail.com>
Thu, 14 Mar 2019 22:47:44 +0000 (15:47 -0700)
committerBen Gamari <ben@well-typed.com>
Tue, 4 Jun 2019 03:42:46 +0000 (23:42 -0400)
commit7258f41bdf8c6a981cb64452d83ac9bdd9b9e38e
treebd42554d6bddbc9a306ebc9e5e39d047c3dcdacf
parentf8d24178f30b7837b35a9ea328bc6f520092ff08
Add PlainPanic for throwing exceptions without depending on pprint

This commit splits out a subset of GhcException which do not depend on
pretty printing (SDoc), as a new datatype called
PlainGhcException. These exceptions can be caught as GhcException,
because 'fromException' will convert them.

The motivation for this change is that that the Panic module
transitively depends on many modules, primarily due to pretty printing
code.  It's on the order of about 130 modules.  This large set of
dependencies has a few implications:

1. To avoid cycles / use of boot files, these dependencies cannot
throw GhcException.

2. There are some utility modules that use UnboxedTuples and also use
`panic`. This means that when loading GHC into GHCi, about 130
additional modules would need to be compiled instead of
interpreted. Splitting the non-pprint exception throwing into a new
module resolves this issue. See #13101

(cherry picked from commit fe9034e9b4820214a8c703bd8a3146ce6eed37b8)
compiler/basicTypes/UniqSupply.hs
compiler/ghc.cabal.in
compiler/iface/BinFingerprint.hs
compiler/utils/Binary.hs
compiler/utils/FastString.hs
compiler/utils/Panic.hs
compiler/utils/PlainPanic.hs [new file with mode: 0644]
compiler/utils/Pretty.hs
compiler/utils/StringBuffer.hs
compiler/utils/Util.hs
includes/CodeGen.Platform.hs