
13-Aug-2001 (MND)
 -- rewrite optimiser using SSA
 -- rewrite typecheck to deal with bug 1308 etc

31-Jul-2000 (MND)
 -- iterative inlining (to inline inlined closures: TextWriter ought to
    be inlined down to fputs/fputc calls)
 -- optimiser phase to eliminate repeated EEnsure
 -- optimiser phase to renumber/merge identical record formats
 -- collapse big-integer literals from genc so that we don't get lots of
    GAxx statics all having the value 0x0 or 0x1. See the trick with
    rrfmts for a way of doing this.
 -- optimiser phase for specialising functions (foo(x:SI, y:String) with
    call foo(42, "yo") is turned into fooxy42yo() in which the body of
    foo has x everywhere replaced by 42 and y by "yo". Check with SMW
    first (type-tower fusing).
 -- better jflow (no repeated tests, no staggered jumps after inlining
    just to reach the "return")
 -- dependent-types: (A:aType, aType:Type) is not supported yet because
    we examine the comma left-to-right.
 -- fixed-width/bitsize integers
 -- want delta-equality for maps and multis
 -- inlining of conditional exports with multiple implementations
 -- fix category/domain detection (too easily fooled with domains that
    are defined w/out with or add which causes bad inlining of defaults)
 -- inlining of implicit (compiler-generated) exports
 -- raw maps
 -- fix type inference so that we can decorate types with exceptions
 -- debugger support for tracing value assignments
 -- allow functions to be given better names (e.g. bar_foo0 for the first
    bar in foo.as instead of CF0_bar). This solves profiling problems and
    helps users identify generated code with Aldor source
 -- proper support for "where": we ought to be able to use it in the same
    way as we can in AXIOM.
 -- Do we get a warning if ALDORROOT is unset?
 -- allow users to over-ride the system axiomxl.conf: we could read from
    $ALDORROOT/include/axiomxl.conf first and then (under UNIX) read
    from ~/.axiomxl.conf as well
 -- make the names of magic types user-configurable (either by adding
    sections to axiomxl.conf or by allowing a config file to be placed
    in library .al files)
 -- if we have a spare foam instruction, add one so that comments can be
    generated by the compiler and squirted into .c files. Ideal for
    debugging purposes.
 -- runtime support for threads (with garbage collector)
 -- support for dynamic libraries (.so)
 -- allow the interpreter to call any foreign function via dynamic linking
 -- better support for loading obsolete foam files: adding foam instructions
    or new magic types ought not to invalidate existing libraries
 -- consider support for user-defined embeddings:

      import {
         foo: (FixedArray(DF, 3) as (Vector DF)) -> DF;
      } from Foreign Fortran;

    We could allow renaming as well:

      import {
         foo: FixedArray(DF, 3) -> DF; --*** Fortran type used for rep.
      } as {
         fortranFoo: Vector DF -> DF;  --*** Aldor type used in our program
      } from Foreign Fortran;

    Note that "as" would be an-infix domain constructor just like "->":

      (S:Type) as (T:Equivalent S):with == add;

      define Equivalent(T:Type):Category == with {
         coerce: % -> T;
         coerce: T -> %;
      }

--------------------------------------------------------------------------

-- axlmain.c : verify that -Fc does not imply it withut -Faxlmain

-- AXIOM-XL interpreter 
-- -T for tmpdir
-- -m for "main"
-- Warn about -R not writable
-- Doc
-- .as -> .ax
-- CLib.as

-- Examples using Object + subtype
-- Make top-level not be a domain/package.
-- Fix kwd args arcross files
-- .h  -> .as conversion
-- UnixLib.as
-- BInt$Builtin
-- Raw types
-- Code gen for defaults
-- Code gen for cond ops
-- Inline defaults
-- Dataflow
-- Finish conversion to output port.
-- Expression type

-- Clean up comsg initialization.  Too many are doing it, just to be sure.
-- propagate type info for yields (i.e. yield(1) in function of type
   Iterator Integer)
-- bug: the following doesn't compile (it complains about using a loop
   as a value)
  treePrint(i: SI):Cross() ==
    local k: SI
    for k in treeIter(i) repeat 
      PRINT(k)
   
-- srcpos argument for ccoNew and foamNew macros?
-- Handle long identifiers in genlisp && genc.  (e.g. when id > N chars clip)
-- Get rid of dead code from old handling of lexicals in genlisp + genc.
-- Free popped trees on syntax error
-- Type analyze C/Fortran/Lisp in "from XXX"
-- Bind macros according to scope
-- Modify storeN-t.sh and unport-t.sh so the output is consistent for testing.
-- Allow full path names for -M xxx option.
-- Parser tests
-- freeing of tokens, srcline list, etc.
-- Careful use of FileName throughout.
-- Clean linting.
-- beef up scope binding
-- control scanner from a single state variable
-- merge absyn/sefo structures by always having sem fields in absyn
-- convert type poss sets to bit vectors
-- report to DOS.
-- Beef up srcpos.
-- Robustify btreeX functions to check for 0 return from allocator.

-- Foam: not have to allocate bint values just to get place counts.
-- Foam: Data representation for Bit data to have 2 forms 
-- Foam: Rename BitTrue and BitFalse as Bit0 and Bit1?
-- Foam: Type specific representations for byte coded  and tree forms of 
	  bit arrays, byte arrays, hint arrays etc.
-- Foam: More operations e.g. Int->SInt
-- Foam: Mutable integers, Boxed DFlos, Complex?
-- Foam: Foam interpreter in C
-- Foam: foam functions and samprogs?  for side-effecting and non-sideeffecting.
-- Foam: More specific side effect info about sam progs (e.g. modifies arg,
	 modifies env, depends on env, ...)

-- Parser: f: a -> b ! foo, bar, baz
-- Parser: ! a
-- Make abDocuments in parser.

-- Scanner: Fold down relation ops etc. 
-- Scanner: Hanlde quotes of ops.  3 '**  `binomial('a `- b,4)
-- Scanner: Handle YTK_Error in scanby.
-- Scanner: scanning of floats:  should we back out? 
        E.g.  +->  generates |+->|  but     +-[  generates |+| |-| |[|
        and   88e5 generates |88e5| so shd  88e[ generate  |88| |e| |[| ???
        Now it generates a "no digits in exponent" error. 

-- Store.c: Audits for BTree node and DLL node pages
-- Store.c: Sort DLLs by address
-- Store.c: Think about using SLLs instead of DLLs
-- Store.c: Function to return unused pages to OS
-- Store.c: Ask for only as many pages as needed at once.
-- Store.c: If adjacent mixed pieces are gc-ed, merge before adding to BTree.
-- Store.c: Merge returned free pieces to mixed frontier, if possible.
-- Store.c: Check alginment in stoGcMarkRange
-- Store.c: Multiple passes in stoGcMarkRange if pointers are not word aligned.
-- Store.c: More sophisticated sweep phase for gc.  
-- Store.c: Optimizations using *info++.

-- CCode: ccoId instances shared.
-- CCode: ccoTypedefId as leaves.
-- CCode: ccoString/Char/Integer/Float with appropriate data types in nodes.
-- CCode: Option to either put #line-s from SrcPos or to pretty print (as now)
-- CCode: SrcPos at each node, rather than ccoLine nodes.

-- SExpr: copy symbols from "uses" list on package creation
-- SExpr: sxSvref macros
-- SExpr: calculate only once the info for output width of symbols
-- SExpr: have reading and peeking macros use local var rather than global.
-- SExpr: complete #nn= to allow cyclic structures, rather than just DAGs.
-- SExpr: free partially created value when error in read
-- SExpr: clearing shared values (e.g. symbols)
-- SExpr: _ word separation rather than bicaps

==============================================================================
-- New strings. (NO)
-- revive Chee Kai pretty printer (NO)
-- Modify mixedFrontier to be truly busy. (NO)
-- use %> %< rather than addmargin (DONE -- NO. UNDONE)
==============================================================================

-- Fix where parsing (DONE)
-- Environment variable for initial cmdline options (DONE)
-- -Wfast (DONE)
-- Make error msg for no meanings point to smallest possible expression (DONE)
-- Carry srcpos info through gensam and genc. (DONE)
-- Parameterized macros (DONE)
-- Foam: revise foam-to-lisp translator (DONE)
-- Foam: Generate correct code for foam statements (eg. explicit returns) (DONE)
-- Store.c: Different byte patterns for fresh new store and free store.  (DONE)
-- Store.c: Function to sort free lists (have stoGc do it even if !TAGS) (DONE)
-- Store.c: New case for stoError: out of book keeping memory. (DONE)
-- Store.c: Allow for osAllocBytes returning a pointer before heapStart! (DONE)
-- robust handling of fatal errors (DONE)
-- port to CMS.  (DONE)
-- Split TK_Integer to TK_Integer TK_Zero etc (DONE)
-- Put label on body of lambda in abNormal (DONE)
-- Abnorm: Copy absyn trees which are reused in return types. (DONE)
-- Correct return types in curried lambdas. (DONE)
-- lambdas as closures, when appropriate. (DONE)
-- Store.c: Allow osAllocBytes to return memory at arbitrary addresses. (DONE)
-- Foam: Generate non-nested sam progs. (DONE)
-- Foam: samFree (DONE)
-- Allow individual tests to be compiled in test.c using #defines. (DONE)
-- How to handle own defective std....h files? (DONE)
-- Test empty file (DONE)
-- SAM Offset compaction (DONE)
-- SAM Representation of true big integers (DONE)
-- Break out various gen0.as tests to be individual tests (DONE)
-- Function to return unused pages to page list (DONE)
-- Examine Freeing of large pieces (DONE)
-- Return completely freed pages.  (DONE)
-- Streams. (DONE -- xprintf instead)
-- use Sexpr printer rather than Vex (DONE)
-- jump-spans in sam-if bytecodes (DONE)
-- remove junk from absyn headers. (DONE)
-- make abEqual type correct (DONE)
-- get rid of explicit numbers eg 256, 128 (DONE)
-- Find bug in: axiomxl -Tags all big.as big.as big.as (DONE)
-- redo garbage collector for btree allocator (DONE)
-- new print functions based on generalized streams (DONE -- used buf)
-- compact sam output (DONE)
-- test memory allocation with random-size allocator/deallocator (DONE)
-- stoAudit for mixed pages. (DONE)
-- Length as size_t  if __STDC__  or ifndef CC_no_stddef (DONE)
-- Make BTree vector size a parameter to btreeNew rather than a #define. (DONE)
-- convert to yacc grammar (DONE)
-- clean up sam stuff (DONE)
-- write program to print .spo files (DONE)
-- write .spo files to current directory (DONE)
-- test driver to run test suite (DONE)
-- relative timings of newest vs oldest compilers (DONE)
-- Check line numbers afer )assert (DONE)
-- Use HZ variable for timing (DONE)
-- create a filepath type (DONE)
-- split file system interactions from file name manipulation (DONE)
-- get new format working (DONE)
-- )reinclude vs )include (DONE)
-- allow spaces in ")  include" etc. (See test include1)  (DONE)
-- allow nested "if..endif" constucts in includer (DONE)
-- extend test include2 for additional error conditions (DONE)
-- Better  way to point to includer errors.  (DONE)
-- make file for tools directory (DONE)
-- robust handling of timing (.A to .S, .S to .B etc) (DONE)
-- reading .A (DONE)
-- writing .I (DONE)
-- )line in includer (DONE)
-- quit as soon as possible, if output from later phases is not wanted (DONE)
-- test new code with the other storage allocators (DONE)
-- Growable Buffer as a basic type. (DONE)
-- accept full syntax (DONE)
-- Valueless samifs and samseqs. (DONE)
-- Better handling of samdefs. (DONE)
-- test memory allocation by doing periodic gc's and audits.  (DONE)
