1. 26 Apr, 2007 2 commits
  2. 25 Apr, 2007 3 commits
  3. 24 Apr, 2007 4 commits
  4. 20 Apr, 2007 2 commits
  5. 19 Apr, 2007 2 commits
  6. 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
  7. 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
  8. 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
  9. 04 Apr, 2007 1 commit
  10. 27 Mar, 2007 1 commit
  11. 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
  12. 02 Feb, 2007 1 commit
  13. 31 Jan, 2007 1 commit
  14. 20 Jan, 2007 1 commit
  15. 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
  16. 18 Dec, 2006 1 commit
  17. 11 Dec, 2006 2 commits
  18. 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
  19. 16 Oct, 2006 1 commit
  20. 11 Oct, 2006 2 commits
    • Simon Marlow's avatar
      ab22f4e6
    • Simon Marlow's avatar
      Interface file optimisation and removal of nameParent · b00b5bc0
      Simon Marlow authored
      This large commit combines several interrelated changes:
      
        - IfaceSyn now contains actual Names rather than the special
          IfaceExtName type.  The binary interface file contains
          a symbol table of Names, where each entry is a (package,
          ModuleName, OccName) triple.  Names in the IfaceSyn point
          to entries in the symbol table.
      
          This reduces the size of interface files, which should
          hopefully improve performance (not measured yet).
      
          The toIfaceXXX functions now do not need to pass around
          a function from Name -> IfaceExtName, which makes that
          code simpler.
      
        - Names now do not point directly to their parents, and the
          nameParent operation has gone away.  It turned out to be hard to
          keep this information consistent in practice, and the parent info
          was only valid in some Names.  Instead we made the following
          changes:
      
          * ImportAvails contains a new field 
                imp_parent :: NameEnv AvailInfo
            which gives the family info for any Name in scope, and
            is used by the renamer when renaming export lists, amongst
            other things.  This info is thrown away after renaming.
      
          * The mi_ver_fn field of ModIface now maps to
            (OccName,Version) instead of just Version, where the
            OccName is the parent name.  This mapping is used when
            constructing the usage info for dependent modules.
            There may be entries in mi_ver_fn for things that are not in
            scope, whereas imp_parent only deals with in-scope things.
      
          * The md_exports field of ModDetails now contains
            [AvailInfo] rather than NameSet.  This gives us
            family info for the exported names of a module.
      
      Also:
      
         - ifaceDeclSubBinders moved to IfaceSyn (seems like the
           right place for it).
      
         - heavily refactored renaming of import/export lists.
      
         - Unfortunately external core is now broken, as it relied on
           IfaceSyn.  It requires some attention.
      b00b5bc0
  21. 06 Oct, 2006 1 commit
  22. 05 Oct, 2006 1 commit
  23. 28 Sep, 2006 1 commit
  24. 20 Sep, 2006 1 commit
    • chak@cse.unsw.edu.au.'s avatar
      Extended TyCon and friends to represent family declarations · e8a591c1
      chak@cse.unsw.edu.au. authored
      Mon Sep 18 18:50:35 EDT 2006  Manuel M T Chakravarty <chak@cse.unsw.edu.au>
        * Extended TyCon and friends to represent family declarations
        Tue Aug 15 16:52:31 EDT 2006  Manuel M T Chakravarty <chak@cse.unsw.edu.au>
          * Extended TyCon and friends to represent family declarations
      e8a591c1
  25. 19 Sep, 2006 1 commit
    • Simon Marlow's avatar
      Packages cleanup, and allow new packages to be loaded with :set again · ee565d46
      Simon Marlow authored
      This cleans up the package subsystem a little.  There are some
      changes to the GHC API as a result.
      
        - GHC.init and GHC.initFromArgs are no longer necessary.
      
        - GHC.newSession takes the root of the GHC tree as an argument
          (previously passed to GHC.init).
      
        - You *must* do GHC.setSessionDynFlags after GHC.newSession,
          this is what loads the package database.
      
        - Several global vars removed from SysTools
      
        - The :set command in GHCi can now cause new packages to be loaded,
          or can hide/ignore existing packages.
      ee565d46