                                TALC Changes Log
                                ================

This file contains the list of changes made to the TALC project over
time.  The information up to release 1.4 is sketchy, and the
information for release 1.5 may not be complete.  The most recent
changes appear first, and changes are grouped by release.

Please follow the conventions in the file for numbering changes etc.
I suggest that cvs log messages now just say something like: R1.5/28,30,31.

Release 1.6
===========

11) Cyclone stuff added.
10) talout modified to have write options, popcorn modified to have an unmasm
    flag to get around the line limitations.
 9) a poppeep optimisation was disabled as it turned an absolute into a
    relative which breaks cyclone templates.
 8) tal.inc modified to call malloc with an absolute address
 7) talpp modified to output byte sequences in chunks of 32 bytes
 6) tests/cyclone directory added with regression and sample tests
 5) tests/popcorn modified to make regression testing easier
 4) tal_prog now gives program a blank template register
 3) added timer and debugging functions to stdlib
 2) removed register allocator from Makefile and popcompilereg from popcorn
 1) cyclone syntax changed

Release 1.5
===========

38) Fixed various other tal verifier bugs
37) Fixed identifier parsing bug
36) TALC now links as well as verifies
35) Added master TODO and CHANGES file in doc directory, removed others.
34) Introduced an abstract int32 type.
33) Generic front end added.
32) Line number parsing added.
31) Directories restructured:
      * toplevel apps directory for applications writing in popcorn/TAL
      * toplevel tests directory for various tests
30) New Makefile, supports NATIVE=yes and PROFILE=yes, for compiling to
    native and with profiling respectively.
29) Old statistics gathering code gone.
28) Popcorn: while compiling x/y.pop x is added to search path, tal
    files export and import files y_[ei].tali not x/y_[ei].tali
27) Added utilities.mli
26) make runtime almost works under unix, still need gc.a
25) exnname's take memory types not word types
24) added cc and tla information to register state
23) cc tracking is implemented, currently no refinement though
22) tla implemented
21) xor r,r hack to make r:S(0)
20) xchg & cmp reworked
19) fixed bug in unchecked code label types
18) fixed bug in link checker
17) code trees implemented, no longer need code types on all labels
16) fixed leq cutoff bug
15) fixed zero length array problem
14) added interface abbrevs
13) fixed mov to esp bug
12) changes to generic driver:
      * middle phase
      * error handling doesn't report success when error
      * produces O/S exit code and examines exit code of subprocesses
      * added print-at functionality
      * added typecheck-at functionality
      * fixed flushing bugs
      * verify and asm added to prevent multiple verifications
11) popcorn LAM implemented mostly:
      * line number directives
      * calls C preprocessor
      * open & prefix partially implemented
10) fixed div/mod bug in popcorn
 9) popcorn code generator now looks deeply into boolean expression for
    better code generation
 8) various other code generator improvements in popcorn
 7) Polymorphism and exceptions added to popcorn
 6) Binary and hexidecimal numbers added to popcorn
 5) Updated (and now mandated to) ocaml 2.01
 4) Various popcorn bug fixes
 3) Various TALC assembler fixes
 2) S(i) <= B4 and S(i) <= ^.(i)
 1) Equal recursive types are now leq, nonequal recursive type leq still
    unimplemented

Release 1.4
===========

- added generic toplevel driver
- register state is abstract
- New TAL constructor language
- New toplevel driver works with TALC assembler
- top-level global variables with following syntax
	public int x = 0;
	private int x = 5;
	public point x = new point(3,4);
Constant expressions include constants, new structs, and new unions.  For
option structs null initializers will break if the type is abstract.

- abstract and public types (public is still the default)
	abstract struct point { int x,y; }
	public   struct point { int x,y; }
- precedence of operators has been fixed and we now parse all C operators.
	(due to Dan Grossman)
- We now allow: extern int x,y;
- bug fixes:
	Int switch now uses the CMP instruction instead of TST
	exp1 ? exp2 : exp3 now works even if exp2 and exp3 have void type
	Eliminated single value case for sums.  It never worked anyways.
	Popcorn command line should now correctly deal with filenames with
spaces.

Release 1.0 - 1.3
=================

- Ocaml 1.07 compatible
- bug fixes:
	- BooleanType printed as bool instead of boolean
	- default: clause of switch takes stmts instead of stmt
	- handle Not_found when doing a new union instead of Invalid_argument 
		(List.assoc)
	- array subscript on strings used wrong scale
	- stack overflow in TAL pretty printer -- change set_margin 9999
		instead of 999999.
	- got rid of re-defined imported types
	[last two due to Trevor]
	- continue jumped to break label instead of continue label
	- various return-check bug fixes
- additions:
	- tuples:  
		- type syntax:  *(t1,...,tn)   (n >= 0)
		- intro:  new (e1,...,en)      (n >= 0)
		- elim:   e.i		       (i >= 1)
  [by Trevor]
	- do loops
	- slightly different syntax for arrays, support for first-class
		function (types) (sort of).
	- expression instead of id for function call.
	- constructs for code generation: suspend, resume, compile, hole
		- type checking support
		- no compiler support yet (requires TAL changes)
