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)
committerMatthew Pickering <matthewtpickering@gmail.com>
Fri, 24 May 2019 15:55:07 +0000 (16:55 +0100)
commitd9dfbde30aa11afc87f25b73dc2d154a46ca24d4
tree6a8172d4cbbbeb1533e3ca8146a107938e9ae173
parentc931f2561207aa06f1750827afbb68fbee241c6f
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
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