1. 07 May, 2007 1 commit
  2. 03 May, 2007 2 commits
  3. 02 May, 2007 1 commit
    • Simon Marlow's avatar
      Refactoring, tidyup and improve layering · 86bec429
      Simon Marlow authored
      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.
      86bec429
  4. 30 Apr, 2007 1 commit
  5. 27 Apr, 2007 2 commits
  6. 26 Apr, 2007 3 commits
  7. 25 Apr, 2007 3 commits
  8. 24 Apr, 2007 4 commits
  9. 20 Apr, 2007 2 commits
  10. 19 Apr, 2007 2 commits
  11. 18 Apr, 2007 3 commits
    • Simon Marlow's avatar
      Restore the interactive context when resuming a breakpoint · 6645c011
      Simon Marlow authored
      So that we don't accumulate bindings from previous breakpoints, which
      could lead to a space leak.
      6645c011
    • Simon Marlow's avatar
      remove dead code · 0de47da8
      Simon Marlow authored
      0de47da8
    • Simon Marlow's avatar
      Various cleanups and improvements to the breakpoint support · 38e7ac3f
      Simon Marlow authored
        - move parts of the debugger implementation below the GHC API where
          they belong.  There is still more in Debugger that violates the
          layering, hopefully I'll get to that later.
      
        - instead of returning an IO action from runStmt for resuming,
          return a ResumeHandle that is passed to GHC.resume.
      
        - breakpoints now return [Name] which is displayed in the same
          way as when a binding statement is executed.
      
        - :load, :add, :reload now clear the active breakpoints and context
      
        - :break gives a sensible error when used on a non-interpreted module
      
        - export breakpoint-related types from GHC
      
        - remove a bunch of layer-violating imports from InteractiveUI
      
        - remove some more vestiges of the old breakpoint code (topLevel in
          the GHCi state).
      
        - remove TickTree and use a simple array instead, cached per module
      38e7ac3f
  12. 17 Apr, 2007 1 commit
    • Simon Marlow's avatar
      Re-working of the breakpoint support · cdce6477
      Simon Marlow authored
      This is the result of Bernie Pope's internship work at MSR Cambridge,
      with some subsequent improvements by me.  The main plan was to
      
       (a) Reduce the overhead for breakpoints, so we could enable 
           the feature by default without incurrent a significant penalty
       (b) Scatter more breakpoint sites throughout the code
      
      Currently we can set a breakpoint on almost any subexpression, and the
      overhead is around 1.5x slower than normal GHCi.  I hope to be able to
      get this down further and/or allow breakpoints to be turned off.
      
      This patch also fixes up :print following the recent changes to
      constructor info tables.  (most of the :print tests now pass)
      
      We now support single-stepping, which just enables all breakpoints.
      
        :step <expr>     executes <expr> with single-stepping turned on
        :step            single-steps from the current breakpoint
      
      The mechanism is quite different to the previous implementation.  We
      share code with the HPC (haskell program coverage) implementation now.
      The coverage pass annotates source code with "tick" locations which
      are tracked by the coverage tool.  In GHCi, each "tick" becomes a
      potential breakpoint location.
      
      Previously breakpoints were compiled into code that magically invoked
      a nested instance of GHCi.  Now, a breakpoint causes the current
      thread to block and control is returned to GHCi.
      
      See the wiki page for more details and the current ToDo list:
      
        http://hackage.haskell.org/trac/ghc/wiki/NewGhciDebugger
      cdce6477
  13. 11 Apr, 2007 1 commit
    • Simon Marlow's avatar
      Rationalise GhcMode, HscTarget and GhcLink · 3c22606b
      Simon Marlow authored
      This patch cleans up the GHC API, and adds some functionality: we can
      now compile to object code inside GHCi.
      
      Previously we had:
      
        data GhcMode
          = BatchCompile
          | Interactive
          | OneShot
          | JustTypecheck
          | MkDepend
        
        data HscTarget
          = HscC
          | HscAsm
          | HscJava
          | HscInterpreted
          | HscNothing
      
      There was redundancy here; if GhcMode is Interactive, then only
      HscInterpreted makes sense, and JustTypecheck required HscNothing.
      Now we have:
      
        data GhcMode
          = CompManager       -- ^ --make, GHCi, etc.
          | OneShot           -- ^ ghc -c Foo.hs
          | MkDepend          -- ^ ghc -M, see Finder for why we need this
      
      and HscTarget remains as before.
      
      Previously GhcLink looked like this:
      
        data GhcLink = NoLink | StaticLink
      
      Now we have:
      
        data GhcLink = NoLink | LinkBinary | LinkInMemory
      
      The idea being that you can have an HscTarget of HscAsm (for example)
      and still link in memory.
      
      There are two new flags:
      
        -fobject-code selects object code as the target (selects
                      either -fasm or -fvia-C, whichever is the default)
                      This can be usd with ':set' in GHCi, or on the command line.
      
        -fbyte-code   sets byte-code as the target.  Only works in GHCi.
                      One day maybe this could save the byte code in a file
                      when used outside GHCi.
      
        (names chosen for consistency with -fno-code).
      
      Changes to the GHC API: newSession no longer takes the GhcMode
      argument.  The GhcMode defaults to CompManager, which is usually what
      you want.  To do JustTypecheck now, just set hscTarget to HscNothing.
      3c22606b
  14. 04 Apr, 2007 1 commit
  15. 27 Mar, 2007 1 commit
  16. 21 Feb, 2007 1 commit
    • mnislaih's avatar
      Improving the performance of breakpoints up to 50% (by playing with laziness) · 2bbec92e
      mnislaih authored
      This patch performs several optimizations with the goal of minimizing the cost of building the arguments to breakpointJump:
        - Group them all in a single tuple, to minimize closure creation in heap
        - Wrap this with the GHC.Base.lazy combinator, to induce max laziness
        - Remove as many literal strings as possible 
          * injecting a module-local CAF to store the module name and use that 
          * eliminating the package string (not needed).
      2bbec92e
  17. 02 Feb, 2007 1 commit
  18. 31 Jan, 2007 1 commit
  19. 20 Jan, 2007 1 commit
  20. 11 Jan, 2007 2 commits
    • mnislaih's avatar
      Added the new :breakpoint continue option · 025733b8
      mnislaih authored
      Previously, when in a breakpoint, :quit was used to continue execution.
      This is not the right thing to do, so this patch restores :quit to its
      original meaning whether or not ghci is in an inferior session.
      
      The continue behavior is now provided by ":breakpoint continue".
      I added a synonim command in :continue because it is much shorter,
      but this is optional
      025733b8
    • simonpj@microsoft.com's avatar
      Add the function TypeRep.pprTypeApp, and use it · cd290fc8
      simonpj@microsoft.com authored
        pprTypeApp :: SDoc -> [Type] -> SDoc
        pprTypeApp pp tys = hang pp 2 (sep (map pprParendType tys))
      cd290fc8
  21. 18 Dec, 2006 1 commit
  22. 11 Dec, 2006 2 commits
  23. 10 Dec, 2006 3 commits
    • mnislaih's avatar
      Breakpoint code instrumentation · 37610105
      mnislaih authored
      Instrumentation gets activated by the '-fdebugging' dynflag.
      
      All the instrumentation occurrs in the desugarer; it consists of inserting 'breakpoint' combinators at a number of places in the AST, namely: 
       - Binding sites
       - Do-notation statements 
      These 'breakpoint' combinators will later be further desugared (at DsExpr) into ___Jump functions.
      For more info about this and all the ghci.debugger see the page at the GHC wiki:
      
      http://hackage.haskell.org/trac/ghc/wiki/GhciDebugger
      37610105
    • mnislaih's avatar
      Extend the GHC API with breakpoints and breakpoint handlers · ead42435
      mnislaih authored
      The entry point is:
      setBreakpointHandler :: Session -> BkptHandler Module -> IO ()
      
      ead42435
    • mnislaih's avatar
      Playing with closures · 2c92736e
      mnislaih authored
      RtClosureInspect includes a bunch of stuff for playing with closures:
      
      - the datatype Closure is the low level representation type
      - the datatype Term is the high level representation type
      - cvObtainTerm is the main entry point, providing the Term representation of an arbitrary closure
      2c92736e