summaryrefslogtreecommitdiff
path: root/compiler/ghci/Debugger.hs
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* Fixed a badly defined pattern match Pepe Iborra2007-05-091-1/+1
|
* use extendInteractiveContext instead of custom codeSimon Marlow2007-05-031-5/+2
|
* Refactoring, tidyup and improve layeringSimon Marlow2007-05-021-10/+6
| | | | | | | | | | | | | | | The stack of breakpoint resume contexts is now part of the InteractiveContext and managed by the GHC API. This prevents misuse of the resume context by the client (e.g. resuming a breakpoint that isn't the topmost, which would lead to a confused IC at the least). I changed the TypeEnv in the IC to a [Id]. It only contained Ids anyway, and this allows us to have shadowing, which removes an ugly and annoying restriction. The parts of the GHC API which deal with interactive evaluation are now in a module of their own, InteractiveEval.
* Add new skolem tyvars to the InteractiveContext after type reconstructionPepe Iborra2007-05-011-3/+8
| | | | | | | This was being done already for each binding added by :print, but :sprint does not add any new binding, so we take care of it separately
* Remove skolem tyvars from the InteractiveContext once they have been ↵Pepe Iborra2007-04-301-1/+5
| | | | instantiated by :print
* Restore tidying up of tyvars in :printPepe Iborra2007-04-301-3/+16
| | | | | It wasn't a good idea to disable it
* Give a better error message when we try to print a value of unknown typeSimon Marlow2007-04-261-1/+1
| | | | | | | | | | | | Stopped at ../Test3.hs:(1,0)-(2,30) _result :: [a] [../Test3.hs:(1,0)-(2,30)] *Main> _result <interactive>:1:0: Ambiguous type variable `a' in the constraint: `Show a' arising from a use of `print' at <interactive>:1:0-6 Cannot resolve unkonwn runtime types: a Use :print or :force to determine these types
* Drop newtypes before computing the refinement substitution after :print type ↵Pepe Iborra2007-04-251-4/+8
| | | | reconstruction
* Fix some corner cases in :print after the recent changesPepe Iborra2007-04-251-2/+6
|
* refactor: move pprintClosureCommand out of the GHCi monadSimon Marlow2007-04-251-12/+6
| | | | | Strictly speaking most of pprintClosureCommand should be exported by the GHC API, but this is a step in the right direction.
* Keep track of free type variables in the interactive bindingsSimon Marlow2007-04-251-10/+8
| | | | | | | | Now, the type checker won't attempt to generalise over the skolem variables in the interactive bindings. If we end up trying to show one of these types, there will be an unresolved predicate 'Show t' which causes a type error (albeit a strange one, I'll fix that later).