summaryrefslogtreecommitdiff
path: root/compiler/ghci/Debugger.hs
Commit message (Collapse)AuthorAgeFilesLines
* Some refactoring around endPass and debug dumpingSimon Peyton Jones2014-11-041-0/+1
| | | | | I forget all the details, but I spent some time trying to understand the current setup, and tried to simplify it a bit
* Extend `Foldable` class with `length` and `null` methodsHerbert Valerio Riedel2014-09-281-1/+1
| | | | | | | | | | | | | This completes the `Foldable` class by two important operations which this way can be optimised for the underlying structure more easily. A minor fix for the `containers` submodule was needed to due name clash Addresses #9621 Reviewed By: ekmett, dfeuer, austin Differential Revision: https://phabricator.haskell.org/D250
* Add LANGUAGE pragmas to compiler/ source filesHerbert Valerio Riedel2014-05-151-0/+2
| | | | | | | | | | | | | | | | | | In some cases, the layout of the LANGUAGE/OPTIONS_GHC lines has been reorganized, while following the convention, to - place `{-# LANGUAGE #-}` pragmas at the top of the source file, before any `{-# OPTIONS_GHC #-}`-lines. - Moreover, if the list of language extensions fit into a single `{-# LANGUAGE ... -#}`-line (shorter than 80 characters), keep it on one line. Otherwise split into `{-# LANGUAGE ... -#}`-lines for each individual language extension. In both cases, try to keep the enumeration alphabetically ordered. (The latter layout is preferable as it's more diff-friendly) While at it, this also replaces obsolete `{-# OPTIONS ... #-}` pragma occurences by `{-# OPTIONS_GHC ... #-}` pragmas.
* Improve pretty-printing of typesunknown2013-10-011-3/+2
| | | | | | | | | | | | | | | * The main change is to suppress printing (in types) of kind for-alls kind applications The new flag -fprint-explicit-kinds prints them as before (by analogy with the existing -fprint-explicit-foralls) * I also took advantage of the fact that SDoc now has access to DynFlags, to tidy up the way in which explicit for-alls are printed. Instead of passing a boolean flag around, we now simply consult the DynFlags. Much neater. I still need to add documentation for the flag
* Pure refactoringSimon Peyton Jones2013-01-281-2/+3
| | | | | | | | | | | | | * Move tidyType and friends from TcType to TypeRep (It was always wrong to have it in TcType.) * Move mkCoAxBranch and friends from FamInst to Coercion * Move pprCoAxBranch and friends from FamInstEnv to Coercion No change in functionality, though there might be a little wibble in error message output, because I combined two different functions both called pprCoAxBranch!
* Refactor the way dump flags are handledIan Lynagh2012-10-181-2/+2
| | | | | | | | | | | | | We were being inconsistent about how we tested whether dump flags were enabled; in particular, sometimes we also checked the verbosity, and sometimes we didn't. This lead to oddities such as "ghc -v4" printing an "Asm code" section which didn't contain any code, and "-v4" enabled some parts of "-ddump-deriv" but not others. Now all the tests use dopt, which also takes the verbosity into account as appropriate.
* Some alpha renamingIan Lynagh2012-10-161-4/+4
| | | | | Mostly d -> g (matching DynFlag -> GeneralFlag). Also renamed if* to when*, matching the Haskell if/when names
* Rename DynFlag to GeneralFlagIan Lynagh2012-10-161-1/+1
| | | | | This avoids confusion due to [DynFlag] and DynFlags being completely different types.
* Pass DynFlags down to showSDocIan Lynagh2012-06-121-1/+1
|
* Pass DynFlags to the LogActionIan Lynagh2012-06-111-1/+1
| | | | | | | A side-effect is that we can no longer use the LogAction in defaultErrorHandler, as we don't have DynFlags at that point. But all that defaultErrorHandler did is to print Strings as SevFatal, so now it takes a 'FatalMessager' instead.
* Remove more uses of stdout and stderrIan Lynagh2012-05-291-3/+4
|
* fix bug in :show bindings when a variable is bound to an exceptionSimon Marlow2011-09-211-2/+8
|
* Add support for all top-level declarations to GHCiSimon Marlow2011-09-211-14/+11
| | | | | | | | | | | | | | | | This is work mostly done by Daniel Winograd-Cort during his internship at MSR Cambridge, with some further refactoring by me. This commit adds support to GHCi for most top-level declarations that can be used in Haskell source files. Class, data, newtype, type, instance are all supported, as are Type Family-related declarations. The current set of declarations are shown by :show bindings. As with variable bindings, entities bound by newer declarations shadow earlier ones. Tests are in testsuite/tests/ghci/scripts/ghci039--ghci054. Documentation to follow.
* Formatting fixesDavid Terei2011-08-241-4/+3
|
* Fix tracking of what RdrNames are used (fixes Trac #5211)Simon Peyton Jones2011-06-111-1/+0
| | | | | | | | | | | | | | | | | The issue here was: what import declaration brings into scope the 'op here import qualified Foo( op ) import Bar( C(op) ) instance C Int where op = ... Well, the import of Bar, obviously. But what if the import Bar had been import Bar( C ) Then the instance is still supposed to work, getting op from the Foo.op imported from Foo. (I'm assuming its the same op, of course.)
* Refactoring and tidyup of HscMain and related things (also fix #1666)Simon Marlow2010-10-271-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While trying to fix #1666 (-Werror aborts too early) I decided to some tidyup in GHC/DriverPipeline/HscMain. - The GhcMonad overloading is gone from DriverPipeline and HscMain now. GhcMonad is now defined in a module of its own, and only used in the top-level GHC layer. DriverPipeline and HscMain use the plain IO monad and take HscEnv as an argument. - WarnLogMonad is gone. printExceptionAndWarnings is now called printException (the old name is deprecated). Session no longer contains warnings. - HscMain has its own little monad that collects warnings, and also plumbs HscEnv around. The idea here is that warnings are collected while we're in HscMain, but on exit from HscMain (any function) we check for warnings and either print them (via log_action, so IDEs can still override the printing), or turn them into an error if -Werror is on. - GhcApiCallbacks is gone, along with GHC.loadWithLogger. Thomas Schilling told me he wasn't using these, and I don't see a good reason to have them. - there's a new pure API to the parser (suggestion from Neil Mitchell): parser :: String -> DynFlags -> FilePath -> Either ErrorMessages (WarningMessages, Located (HsModule RdrName))
* Clean up the debugger codesimonpj@microsoft.com2010-10-191-21/+17
| | | | | | In particular there is much less fiddly skolemisation now Things are not *quite* right (break001 and 006 still fail), but they are *much* better than before.
* Trim unused imports detected by new unused-import codesimonpj@microsoft.com2009-07-061-4/+4
|
* Support for -fwarn-unused-do-bind and -fwarn-wrong-do-bind, as per #3263Max Bolingbroke2009-07-011-1/+1
|
* Make record selectors into ordinary functionssimonpj@microsoft.com2009-01-021-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This biggish patch addresses Trac #2670. The main effect is to make record selectors into ordinary functions, whose unfoldings appear in interface files, in contrast to their previous existence as magic "implicit Ids". This means that the usual machinery of optimisation, analysis, and inlining applies to them, which was failing before when the selector was somewhat complicated. (Which it can be when strictness annotations, unboxing annotations, and GADTs are involved.) The change involves the following points * Changes in Var.lhs to the representation of Var. Now a LocalId can have an IdDetails as well as a GlobalId. In particular, the information that an Id is a record selector is kept in the IdDetails. While compiling the current module, the record selector *must* be a LocalId, so that it participates properly in compilation (free variables etc). This led me to change the (hidden) representation of Var, so that there is now only one constructor for Id, not two. * The IdDetails is persisted into interface files, so that an importing module can see which Ids are records selectors. * In TcTyClDecls, we generate the record-selector bindings in renamed, but not typechecked form. In this way, we can get the typechecker to add all the types and so on, which is jolly helpful especially when GADTs or type families are involved. Just like derived instance declarations. This is the big new chunk of 180 lines of code (much of which is commentary). A call to the same function, mkAuxBinds, is needed in TcInstDcls for associated types. * The typechecker therefore has to pin the correct IdDetails on to the record selector, when it typechecks it. There was a neat way to do this, by adding a new sort of signature to HsBinds.Sig, namely IdSig. This contains an Id (with the correct Name, Type, and IdDetails); the type checker uses it as the binder for the final binding. This worked out rather easily. * Record selectors are no longer "implicit ids", which entails changes to IfaceSyn.ifaceDeclSubBndrs HscTypes.implicitTyThings TidyPgm.getImplicitBinds (These three functions must agree.) * MkId.mkRecordSelectorId is deleted entirely, some 300+ lines (incl comments) of very error prone code. Happy days. * A TyCon no longer contains the list of record selectors: algTcSelIds is gone The renamer is unaffected, including the way that import and export of record selectors is handled. Other small things * IfaceSyn.ifaceDeclSubBndrs had a fragile test for whether a data constructor had a wrapper. I've replaced that with an explicit flag in the interface file. More robust I hope. * I renamed isIdVar to isId, which touched a few otherwise-unrelated files.
* Fix a couple of issues with :printpepe2008-09-181-13/+26
| | | | | | | | | | | | - Ticket #1995: Unsoundness with newtypes - Ticket #2475: "Can't unify" error when stopped at an exception In addition this patch adds the following: - Unfailingness: RTTI cannot panic anymore. In case of failure, it recovers gracefully by returning the "I know nothing" type - A -ddump-rtti flag
* Use 'GhcMonad' in ghci/Debugger.Thomas Schilling2008-09-151-55/+59
|
* Split the Id related functions out from Var into Id, document Var and some of IdMax Bolingbroke2008-07-311-1/+1
|
* Follow extensible exception changesIan Lynagh2008-07-301-1/+1
|
* Fix #2044 (:printing impredicatively typed things)pepe2008-04-211-2/+3
| | | | Switching to boxyUnify should be enough to fix this.
* Fix rendering of references in :print under -fprint-evld-with-show flagPepe Iborra2007-12-191-1/+0
|
* Refactoring onlyPepe Iborra2007-12-081-5/+4
| | | | | | | Suspensions in the Term datatype used for RTTI always get assigned a Type, so there is no reason to juggle around with a (Maybe Type) anymore.
* Prevent the binding of unboxed things by :printPepe Iborra2007-12-081-2/+4
|
* Teach :print to follow references (STRefs and IORefs)Pepe Iborra2007-12-041-1/+5
| | | | | | | | | | | | | | | Prelude Data.IORef> :p l l = (_t4::Maybe Integer) : (_t5::[Maybe Integer]) Prelude Data.IORef> p <- newIORef l Prelude Data.IORef> :p p p = GHC.IOBase.IORef (GHC.STRef.STRef {((_t6::Maybe Integer) : (_t7::[Maybe Integer]))}) Prelude Data.IORef> :sp p p = GHC.IOBase.IORef (GHC.STRef.STRef {(_ : _)}) I used braces to denote the contents of a reference. Perhaps there is a more appropriate notation?
* refactoring onlyPepe Iborra2007-12-021-1/+1
|
* Try to manage the size of the text rendered for ':show bindings'Pepe Iborra2007-11-141-5/+18
|
* Fix Trac 1865: GHCi debugger crashes with :printPepe Iborra2007-11-131-1/+1
|
* Better modelling of newtypes in the Term datatypePepe Iborra2007-09-121-4/+12
| | | | | | | This helps to get pretty printing right, nested newtypes were not being shown correctly by :print
* GHCi debugger: Added a -fprint-evld-with-show flagPepe Iborra2007-09-121-1/+6
| | | | | | The flag enables the use of Show instances in :print. By default they are not used anymore
* Refactoring & documenting the Term pprinter used by :printPepe Iborra2007-09-111-4/+3
|
* Custom printer for the Term datatype that won't output TypeRep valuesPepe Iborra2007-09-111-27/+5
| | | | | The term pretty printer used by :print shouldn't output the contents of TypeRep values, e.g. inside Dynamic values
* Custom printer for the Term datatype that won't output TypeRep valuesPepe Iborra2007-09-111-5/+27
| | | | | The term pretty printer used by :print shouldn't output the contents of TypeRep values, e.g. inside Dynamic values
* warning policePepe Iborra2007-09-061-18/+11
|
* Fix CodingStyle#Warnings URLsIan Lynagh2007-09-041-1/+1
|
* Use OPTIONS rather than OPTIONS_GHC for pragmasIan Lynagh2007-09-031-2/+2
| | | | | | | Older GHCs can't parse OPTIONS_GHC. This also changes the URL referenced for the -w options from WorkingConventions#Warnings to CodingStyle#Warnings for the compiler modules.
* Add {-# OPTIONS_GHC -w #-} and some blurb to all compiler modulesIan Lynagh2007-09-011-0/+7
|
* Warning policePepe Iborra2007-08-291-9/+2
|
* Style: remove trailing spacesPepe Iborra2007-08-261-23/+23
|
* Print contents of bindings when stopping at a breakpointPepe Iborra2007-08-261-23/+28
|
* Automatic RTTI for ghci bindings Pepe Iborra2007-07-141-41/+8
| | | | | | | | | | With this patch, ghci runs rtti (bounded in the term treewith a max. depth of 10) automatically after evaluating any expression in the interactive env. In addition, a rtti step is performed on the local bindings in a breakpoint, before returning control to the user Let's see how well this works in practice
* Teach :print to not panic when the DataCon for a closure is not exposed by ↵Pepe Iborra2007-07-121-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | the .hi file Previously the behaviour was to panic. Now it will print an approximated representation, using the names (enclosed in keys, i.e. "<...>") and the pointed subterms. Non pointed subterms cannot be included in this representation: Prelude> let se = Data.Sequence.fromList (map Just "abc") Prelude> :eval se () Prelude> :p se se = <Data.Sequence.Deep> (<Data.Sequence.One> (_t1::t)) () (<Data.Sequence.Two> (_t2::t) (_t3::t)) Prelude> :eval _t2 () Prelude> :p se se = <Data.Sequence.Deep> (<Data.Sequence.One> (_t4::t1)) () (<Data.Sequence.Two> (Just 'b') (_t5::t1)) Prelude> This patch also includes some fixes in the pretty printer for the Term datatype
* Ask for a HscEnv instead of a Session in InteractiveEval.obtainTermPepe Iborra2007-07-111-5/+5
| | | | This does a better job of showing that obtainTerm does not alter the Session
* Clean up for code conventions & add some comment Pepe Iborra2007-05-231-2/+4
|
* Store a SrcSpan instead of a SrcLoc inside a NameSimon Marlow2007-05-111-1/+1
| | | | This has been a long-standing ToDo.
* FIX: Linker.getHValue should be linking in any dependencies it requiresSimon Marlow2007-05-091-2/+1
| | | | | Otherwise :print only works for local identifiers, not global ones. In fact it was silently failing, so I fixed that too.