summaryrefslogtreecommitdiff
path: root/compiler/main/InteractiveEval.hs
Commit message (Collapse)AuthorAgeFilesLines
...
* Use UserInterrupt rather than our own Interrupted exception (#4100)Simon Marlow2010-06-021-2/+2
|
* Remove LazyUniqFM; fixes trac #3880Ian Lynagh2010-03-201-1/+1
|
* Substantial improvements to coercion optimisationsimonpj@microsoft.com2010-01-041-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | The main purpose of this patch is to add a bunch of new rules to the coercion optimiser. They are documented in the (revised) Appendix of the System FC paper. Some code has moved about: - OptCoercion is now a separate module, mainly because it now uses tcMatchTy, which is defined in Unify, so OptCoercion must live higehr up in the hierarchy - Functions that manipulate Kinds has moved from Type.lhs to Coercion.lhs. Reason: the function typeKind now needs to call coercionKind. And in any case, a Kind is a flavour of Type, so it builds on top of Type; indeed Coercions and Kinds are both flavours of Type. This change required fiddling with a number of imports, hence the one-line changes to otherwise-unrelated modules - The representation of CoTyCons in TyCon has changed. Instead of an extensional representation (a kind checker) there is now an intensional representation (namely TyCon.CoTyConDesc). This was needed for one of the new coercion optimisations.
* Make the types we use when creating GHCi bytecode better match realityIan Lynagh2009-07-291-1/+1
| | | | | We were keeping things as Int, and then converting them to Word16 at the last minute, when really they ought to have been Word16 all along.
* Trim unused imports detected by new unused-import codesimonpj@microsoft.com2009-07-061-1/+1
|
* Support for -fwarn-unused-do-bind and -fwarn-wrong-do-bind, as per #3263Max Bolingbroke2009-07-011-1/+1
|
* FIX #2845: Allow breakpoints on expressions with unlifted typeSimon Marlow2009-04-201-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | It turns out we can easily support breakpoints on expressions with unlifted types, by translating case tick# of _ -> e into let f = \s . case tick# of _ -> e in f realWorld# instead of just a plain let-binding. This is the same trick that GHC uses for abstracting join points of unlifted type. In #2845, GHC has eta-expanded the tick expression, changing the result type from IO a to (# State#, a #), which was the reason the tick was suddenly being ignored. By supporting ticks on unlifted expressions we can make it work again, although some confusion might arise because _result will no longer be available (it now has unboxed-tuple type, so we can't bind it in the environment). The underlying problem here is that GHC does transformations like eta-expanding the tick expressions, and there's nothing we can do to prevent that.
* :steplocal and :stepmodule should not polute trace historyPeter Hercek2009-02-221-7/+9
|
* #2973: we should virtualise the CWD inside the GHC API, not in the clientSimon Marlow2009-01-271-0/+25
| | | | | | | The problem is that we install the client's CWD before calling runStmt, but runStmt has to load modules before running the code. We need to install the CWD just before running the code instead, which means it has to be done inside runStmt (and resume).
* validate fix: InteractiveEval no longer needs to import IdInfoIan Lynagh2009-01-031-1/+0
|
* Make record selectors into ordinary functionssimonpj@microsoft.com2009-01-021-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Use an extensible-exceptions package when bootstrappingIan Lynagh2008-10-031-22/+2
| | | | | | | Ifdefs for whether we had extensible exceptions or not were spreading through GHC's source, and things would only have got worse for the next 2-3 years, so instead we now use an implementation of extensible exceptions built on top of the old exception type.
* Fix a couple of issues with :printpepe2008-09-181-33/+51
| | | | | | | | | | | | - 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 InteractiveEval.Thomas Schilling2008-09-141-169/+166
|
* Document InteractiveEval and follow OccName changeMax Bolingbroke2008-07-311-2/+2
|
* Split the Id related functions out from Var into Id, document Var and some of IdMax Bolingbroke2008-07-311-1/+1
|
* Follow changes in the base libraryIan Lynagh2008-07-311-3/+19
| | | | | TopHandler now uses the new extensible exceptions module, so we need to interact with it using the new types.
* Follow extensible exception changesIan Lynagh2008-07-301-7/+7
|
* Fix Haddock errors.Thomas Schilling2008-07-201-11/+10
|
* Fix buildIan Lynagh2008-04-221-0/+2
|
* (F)SLIT -> (f)sLit in InteractiveEvalIan Lynagh2008-04-121-6/+4
|
* Fix #2044 (:printing impredicatively typed things)pepe2008-04-211-3/+8
| | | | Switching to boxyUnify should be enough to fix this.
* Fix warnings in main/InteractiveEvalIan Lynagh2008-03-251-17/+27
|
* Fix a space leak in :trace (trac #2128)Ian Lynagh2008-03-161-1/+1
| | | | | We were doing lots of cons'ing and tail'ing without forcing the tails, so were building up lots of thunks.
* Convert more UniqFM's back to LazyUniqFM'sIan Lynagh2008-02-071-1/+1
| | | | | | | | | | | | | | | These fix these failures: break008(ghci) break009(ghci) break026(ghci) ghci.prog009(ghci) ghci025(ghci) print007(ghci) prog001(ghci) prog002(ghci) prog003(ghci) at least some of which have this symptom: Exception: expectJust prune
* refactoring onlyPepe Iborra2007-12-021-1/+1
|
* fix race conditions in sandboxIO (#1583, #1922, #1946)Simon Marlow2007-12-041-19/+23
| | | | using the new block-inheriting forkIO (#1048)
* Fix Trac 1865: GHCi debugger crashes with :printPepe Iborra2007-11-131-1/+1
|
* View patterns, record wildcards, and record punsDan Licata2007-10-101-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch implements three new features: * view patterns (syntax: expression -> pat in a pattern) * working versions of record wildcards and record puns See the manual for detailed descriptions. Other minor observable changes: * There is a check prohibiting local fixity declarations when the variable being fixed is not defined in the same let * The warn-unused-binds option now reports warnings for do and mdo stmts Implementation notes: * The pattern renamer is now in its own module, RnPat, and the implementation is now in a CPS style so that the correct context is delivered to pattern expressions. * These features required a fairly major upheaval to the renamer. Whereas the old version used to collect up all the bindings from a let (or top-level, or recursive do statement, ...) and put them into scope before renaming anything, the new version does the collection as it renames. This allows us to do the right thing with record wildcard patterns (which need to be expanded to see what names should be collected), and it allows us to implement the desired semantics for view patterns in lets. This change had a bunch of domino effects brought on by fiddling with the top-level renaming. * Prior to this patch, there was a tricky bug in mkRecordSelId in HEAD, which did not maintain the invariant necessary for loadDecl. See note [Tricky iface loop] for details.
* FIX #1681: withBreakAction had too large a scope in runStmtSimon Marlow2007-10-101-4/+4
|
* FIX #1743, create a fresh unique for each Id we bind at a breakpointSimon Marlow2007-10-091-1/+8
|
* Fix type signaturesPepe Iborra2007-09-111-2/+2
|
* GHCi debugger: new flag -fbreak-on-errorPepe Iborra2007-09-111-8/+20
| | | | | This flag works like -fbreak-on-exception, but only stops on uncaught exceptions.
* warning policePepe Iborra2007-09-061-4/+4
|
* FIX #1650: ".boot modules interact badly with the ghci debugger"Simon Marlow2007-09-051-5/+15
| | | | | | | | | | | | | | | | | | | In fact hs-boot files had nothing to do with it: the problem was that GHCi would forget the breakpoint information for a module that had been reloaded but not recompiled. It's amazing that we never noticed this before. The ModBreaks were in the ModDetails, which was the wrong place. When we avoid recompiling a module, ModDetails is regenerated from ModIface by typecheckIface, and at that point it has no idea what the ModBreaks should be, so typecheckIface made it empty. The right place for the ModBreaks to go is with the Linkable, which is retained when compilation is avoided. So now I've placed the ModBreaks in with the CompiledByteCode, which also makes it clear that only byte-code modules have breakpoints. This fixes break022/break023
* 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.
* comments onlySimon Marlow2007-08-311-1/+4
| | | | | I had planned to do findEnclosingDecl a different way, so add a ToDo as a reminder.
* Add {-# OPTIONS_GHC -w #-} and some blurb to all compiler modulesIan Lynagh2007-09-011-0/+7
|
* Warning policePepe Iborra2007-08-291-10/+2
|
* Use a version of obtainTerm that takes a max depth boundPepe Iborra2007-08-271-3/+8
| | | | when printing the contents of binding at a breakpoint
* Be more careful when calculating the enclosing top level declaration of a ↵Pepe Iborra2007-08-271-7/+10
| | | | srcspan
* Print contents of bindings when stopping at a breakpointPepe Iborra2007-08-261-1/+1
|
* A partial attempt to improve :stepoverPepe Iborra2007-08-241-15/+0
| | | | | | | | | | | | | | With this patch, :stepover can effectively appear to step over recursive calls and calls to locally bound functions (in a where clause). However, when we run out of ticks in the current expression, the illusion vanishes and laziness brings us to the body of the last function we "stepped over". This is not desired at all, it is potentially very confusing. As a countermeasure, when this happens :stepover emits a warning "Warning: no more breakpoints in this function body, switching to :step"
* Build fix: modBreaks -> modBreaks_decls modbreaksMichael D. Adams2007-08-221-1/+1
|
* A partial attempt to improve :stepoverPepe Iborra2007-08-221-0/+15
| | | | | | | | | | | | | | With this patch, :stepover can effectively appear to step over recursive calls and calls to locally bound functions (in a where clause). However, when we run out of ticks in the current expression, the illusion vanishes and laziness brings us to the body of the last function we "stepped over". This is not desired at all, it is potentially very confusing. As a countermeasure, when this happens :stepover emits a warning "Warning: no more breakpoints in this function body, switching to :step"
* Small rearrangementsPepe Iborra2007-08-211-2/+3
|
* Teach :history to show the name of the enclosing declaration Pepe Iborra2007-08-151-13/+42
| | | | | | together with src locs Purely for convenience and user friendliness
* A new :stepover command for the debuggerPepe Iborra2007-08-091-0/+4
| | | | | | | | | | | | | | | | | | | Step from statement to statement without leaving the block. Tries to do the sensible thing when used on expressions. The idea is to: 1 - Step to the next breakpoint and examine the srcloc 2 - If it is contained in the same statement block as we were, then stop and give control to the user, else continue to the next breakpoint 3 - Repeat from 1. If we reach the end of the statement block, i.e. no more ticks in this expression after the current one, then step normally. Replace statement block with 'declaration block' (of an expression) in the pseudo algo. above. Let's see how well this idea works in practice...
* :step does not delete the :history anymore, and now it logs like :tracePepe Iborra2007-08-091-4/+10
|