Skip to content
  • Julian Seward's avatar
    [project @ 2000-03-22 18:14:22 by sewardj] · 73be9570
    Julian Seward authored
    Initial commit of major changes to module chasing and storage management:
    
    * Total reimplementation of module chasing (see achieveTargetModules
      in hugs.c).  Build, maintain and use module dependency graphs
      to decide what needs reloading when.  The old mechanism with a
      stack of scripts, etc, is gone forever.  All the rest of these points
      are in support of the module-chasing change:
    
    * The result of parsing a module is now a parse tree, rather than a
      half-baked parse tree and a bunch of side-effects.  Hooray!
    
    * Redo symbol tables for Names, Tycons, Classes, Instances and
      Modules.  They are now dynamically expandable, doubling in size
      automatically when full, and use a freelist system to keep track
      of available slots.
    
    * Allow arbitrary modules to be deleted from the system.  The
      main honcho here is nukeModule().
    
    * Not strictly necessary, but ... unify the address space for all
      compile-time entities.  See revised whatIs().  Text is part of
      the unified address space.  This is very convenient for debugging.
      print() can now print practically anything.  Generally simplify
      storage management as much as possible, and zap the years of
      elaborate hacks needed to make Hugs work well in 16-bit systems.
      Added a load of sanity-checking support to storage.[ch].
    
    * We don't support project files any more.  They were useful for a
      while, but no longer seem relevant.
    
    * Nuked a large bunch of irrelevant options in rts/options.h.
    
    As of this commit, the system can load and chase modules, both in
    standalone and combined modes.  The :l (load), :a (also), :r (refresh),
    :i (info), :t (show type) and :m (set eval module) commands appear
    to work.  There are also several temporary limitations which will
    be fixed soon:
    
    * Anything to do with external editors, etc, doesn't work.
    
    * The downward-closure-of-object-code (if M is object, all
      modules below M must be too) is not enforced nor checked for.
      It needs to be.
    
    * Module M _must_ reside in M.hs/M.o (sigh).  To be fixed.
    
    * Error handling is probably flaky, and interrupt handling
      very likely is.
    
    * Error messages don't have line numbers.  (A 5-minute fix).
    
    * Progress messages are all at sea; needs re-thinking now that
      the order in which things are done is radically different.
    
    * Compile-time GC is temporarily disabled whilst I figure out how
      to stress-test the GC.
    
    * Freed-up symbol table entries are never re-entered on the free
      lists -- a debugging measure.
    
    * :% is given a bad type in combined mode.  To be investigated.
    73be9570