1. 28 Apr, 2005 6 commits
    • simonpj's avatar
      [project @ 2005-04-28 16:05:54 by simonpj] · 91944423
      simonpj authored
      Re-plumb the connections between TidyPgm and the various
      code generators.  There's a new type, CgGuts, to mediate this,
      which has the happy effect that ModGuts can die earlier.
      
      The non-O route still isn't quite right, because default methods
      are being lost.  I'm working on it.
      91944423
    • simonmar's avatar
      [project @ 2005-04-28 15:44:16 by simonmar] · 69ccf53d
      simonmar authored
      calcAllocated: fix small mis-calculation in the SMP case
      69ccf53d
    • simonmar's avatar
      [project @ 2005-04-28 15:28:05 by simonmar] · c84e392e
      simonmar authored
      Small code-size optimisation: I forgot to add a specialised case for
      functions with no argument words (which might happen if the function
      takes a void argument, for example).
      c84e392e
    • simonpj's avatar
      [project @ 2005-04-28 13:13:27 by simonpj] · 344d961b
      simonpj authored
      Instance for wired-in tycons wibble
      344d961b
    • simonpj's avatar
      [project @ 2005-04-28 10:09:41 by simonpj] · dd313897
      simonpj authored
      This big commit does several things at once (aeroplane hacking)
      which change the format of interface files.  
      
      	So you'll need to recompile your libraries!
      
      1. The "stupid theta" of a newtype declaration
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Retain the "stupid theta" in a newtype declaration.
      For some reason this was being discarded, and putting it
      back in meant changing TyCon and IfaceSyn slightly.
         
      
      2. Overlap flags travel with the instance
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Arrange that the ability to support overlap and incoherence
      is a property of the *instance declaration* rather than the
      module that imports the instance decl.  This allows a library
      writer to define overlapping instance decls without the
      library client having to know.  
      
      The implementation is that in an Instance we store the
      overlap flag, and preseve that across interface files
      
      
      3. Nuke the "instnce pool" and "rule pool"
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      A major tidy-up and simplification of the way that instances
      and rules are sucked in from interface files.  Up till now
      an instance decl has been held in a "pool" until its "gates" 
      (a set of Names) are in play, when the instance is typechecked
      and added to the InstEnv in the ExternalPackageState.  
      This is complicated and error-prone; it's easy to suck in 
      too few (and miss an instance) or too many (and thereby be
      forced to suck in its type constructors, etc).
      
      Now, as we load an instance from an interface files, we 
      put it straight in the InstEnv... but the Instance we put in
      the InstEnv has some Names (the "rough-match" names) that 
      can be used on lookup to say "this Instance can't match".
      The detailed dfun is only read lazily, and the rough-match
      thing meansn it is'nt poked on until it has a chance of
      being needed.
      
      This simply continues the successful idea for Ids, whereby
      they are loaded straightaway into the TypeEnv, but their
      TyThing is a lazy thunk, not poked on until the thing is looked
      up.
      
      Just the same idea applies to Rules.
      
      On the way, I made CoreRule and Instance into full-blown records
      with lots of info, with the same kind of key status as TyCon or 
      DataCon or Class.  And got rid of IdCoreRule altogether.   
      It's all much more solid and uniform, but it meant touching
      a *lot* of modules.
      
      
      4. Allow instance decls in hs-boot files
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Allowing instance decls in hs-boot files is jolly useful, becuase
      in a big mutually-recursive bunch of data types, you want to give
      the instances with the data type declarations.  To achieve this
      
      * The hs-boot file makes a provisional name for the dict-fun, something
        like $fx9.
      
      * When checking the "mother module", we check that the instance
        declarations line up (by type) and generate bindings for the 
        boot dfuns, such as
      	$fx9 = $f2
        where $f2 is the dfun generated by the mother module
      
      * In doing this I decided that it's cleaner to have DFunIds get their
        final External Name at birth.  To do that they need a stable OccName,
        so I have an integer-valued dfun-name-supply in the TcM monad.
        That keeps it simple.
      
      This feature is hardly tested yet.
      
      
      5. Tidy up tidying, and Iface file generation
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      main/TidyPgm now has two entry points:
      
        simpleTidyPgm is for hi-boot files, when typechecking only
        (not yet implemented), and potentially when compiling without -O.
        It ignores the bindings, and generates a nice small TypeEnv.
      
        optTidyPgm is the normal case: compiling with -O.  It generates a
        TypeEnv rich in IdInfo
      
      MkIface.mkIface now only generates a ModIface.  A separate
      procedure, MkIface.writeIfaceFile, writes the file out to disk.
      dd313897
    • simonmar's avatar
      [project @ 2005-04-28 09:46:25 by simonmar] · 89d6434a
      simonmar authored
      Run each nofib program multiple times, tunable by the $(NoFibRuns)
      variable.  nofib-analyse already knows how to average the times from
      multiple runs.
      89d6434a
  2. 27 Apr, 2005 15 commits
  3. 26 Apr, 2005 5 commits
    • simonmar's avatar
      [project @ 2005-04-26 15:44:48 by simonmar] · 68ded3ed
      simonmar authored
      resetStaticObjectForRetainerProfiling: catch up changes in ClosureMacros.h
      68ded3ed
    • simonmar's avatar
      [project @ 2005-04-26 15:08:16 by simonmar] · f6aa7ddc
      simonmar authored
      When chasing explicit imports, we now look for the module in both the
      home package and external packages, and complain if it is found in
      both:
      
      Chasing modules from: Overlap
      Cannot import `List':
        it was found in both overlap/List.hs and package haskell98-1.0.
        Possible fix: -ignore-package haskell98-1.0
        (imported from overlap/Overlap.hs)
      
      Previously the home module would have been ignored in favour of the
      package module.  It means we're doing a bit more searching, but the
      behaviour is less obscure.
      f6aa7ddc
    • simonmar's avatar
      [project @ 2005-04-26 14:43:31 by simonmar] · ff75ee77
      simonmar authored
      Back out previous revision.
      
      It appears that passing -g to the assembly phase of C compilation
      results in an object file with broken debug info, that gdb can't
      read.  This is probably a bug in gcc and/or binutils, but this change
      means that I can't avoid it (unless we were to hack the pipeline to
      do .c->.s->.o in one stage instead of two).
      ff75ee77
    • simonmar's avatar
      [project @ 2005-04-26 12:00:48 by simonmar] · 23951581
      simonmar authored
      Add entry about non-blocking stdin and System.Cmd.{system,rawSystem}.
      23951581
    • sof's avatar
      [project @ 2005-04-26 00:08:17 by sof] · 136861d1
      sof authored
      runSomething: 'rawSystem' might raise an exception to indicate that
      'pgm' couldn't be executed, so catch this here & report.
      
      Merge to STABLE.
      136861d1
  4. 25 Apr, 2005 8 commits
    • simonmar's avatar
      [project @ 2005-04-25 15:56:19 by simonmar] · 17118d27
      simonmar authored
      scavenge_one: fix reversed PAP/AP cases
      17118d27
    • simonmar's avatar
      [project @ 2005-04-25 15:36:28 by simonmar] · b050008e
      simonmar authored
      Partial support for deadlock detection in the threaded/SMP RTS.
      
      The idea is to wait until a complete time slice has gone by without
      running any Haskell code, and then try doing a GC to detect deadlocked
      threads.
      
      This kind of works: but we can only wake up a worker thread from the
      signal handler if there's another worker running - we can't wake up the
      current thread, it seems.
      b050008e
    • simonmar's avatar
      [project @ 2005-04-25 14:22:29 by simonmar] · 8974a27f
      simonmar authored
      interruptStgRts: call threadRunnable().  This might not work properly
      from a signal handler, but it's all we can do (and seems to do
      something reasonable on Linux).
      8974a27f
    • simonmar's avatar
      [project @ 2005-04-25 14:13:23 by simonmar] · e343c124
      simonmar authored
      atomicModifyMutVarzh_fast: move the sm_mutex acquisition *after* the
      heap check
      e343c124
    • simonmar's avatar
      [project @ 2005-04-25 13:45:40 by simonmar] · 6d6a9574
      simonmar authored
      Yet another StgClosure that should be StgThunk
      6d6a9574
    • simonmar's avatar
      [project @ 2005-04-25 13:17:59 by simonmar] · c63c56c2
      simonmar authored
      stg_raise: we should by using StgThunk_payload(), not StgClosure_payload()
      c63c56c2
    • simonmar's avatar
      [project @ 2005-04-25 13:02:31 by simonmar] · 50b971bd
      simonmar authored
      Requested by Duncan Coutts: -optc flags get passed to the assembler
      phase too.  It's not obvious, when using GHC to compile a .c file,
      that options need to be passed both with -optc and -opta - gcc doesn't
      need this, for example.
      
      This is an experimental change - if it breaks anything we can back it
      out.  If anyone needs to pass flags to the .c->.s phase *only*, then
      we will need to add another flag for that purpose.  It seems unlikely,
      though (there aren't many flags that affect the assembler only, and
      those that do don't conflict with flags for the C phase).
      50b971bd
    • simonmar's avatar
      [project @ 2005-04-25 09:32:23 by simonmar] · c03e133e
      simonmar authored
      daVinci is now called uDraw(Graph)
      c03e133e
  5. 24 Apr, 2005 4 commits
  6. 23 Apr, 2005 2 commits