-*-Text-*-

	Things to do to the C microcode:

MINOR (although not necessarily painless):

* Change various places that are signalling interrupts to use the
macro `Request_Interrupt'.

* Examine usage of `New_Compiler_Memtop' to determine if it is being
used similarly.

* Make Microcode_Termination close all files (including the photo
file) if there is no termination handler.

* Improve vms.c.  Implement many of the missing procedures.

* Make the microcode intern the empty string and the empty vector, so
EQV? does not have to do extra work.  Note that fasdump/fasload have
to be careful about this.  This may not be desirable for strings,
given the existence of SET-STRING-LENGTH!

* Clean up the OS dependent stuff.  Add a new error,
ERR_UNIMPLEMENTED_PRIMITIVE, which is signalled by the missing
procedures.  Divide the procedures into the ones which can signal such
an error, and the ones that must return a fake value (System_Clock,
for example).  Error added, must look through all the primitives.

* Check that the microcode backs out of assignment correctly when it
needs to gc.

* Make the communication between OS_file_open and the appropriate
primitive better: if OS_file_open fails it can be because the file
does not exist, or because of some OS limitation on the number of
files open at any given time.

MAJOR (or very painful):

* Look at all instances of Microcode_Termination to determine whether
they are synchronous or not.  If not synchronous, the stack may be in
a bad state and the termination handler may be screwed up.  In
particular, we may be in the middle of compiled code.  This might want
to be merged with the trap mechanism in unix.c.

* Change primitives to use uniform mechanism like external primitive
mechanism.  Figure out how to solve name conflict problem with
user-definable names.

* Redesign fasdump so pure load can be implemented.

* Fix purify so it does an indirect transport of the procedure stored
in an environment.  Thus purifying an environment would have the
effect of purifying the code that created it.  Maybe the values should
be purified too.

* Write complete garbage collect.  This should be easy if the
mechanism used in bchscheme is used.

* Fix purify in bchscheme.  Currently, if the object is too large, it
crashes.

* Rewrite purify to avoid the double garbage collection.  It can use
the same hack that fasdump uses, namely build a table of fixups in the
spare heap while it conses in constant space.  If it reaches the end
of constant space, it backs out by using the table of fixups.

* Fix the way weak pairs are treated by fasdump, and by fasdump and
purify in bchscheme.  They should not be treated like normal pairs.

* Eliminate all fprintf(stderr, <mumble>).  This can be achieved by
having a message facility available for the microcode.

	Things done to the C microcode:

* Clean up variable reference code.  Many changes here:
- Single trap mechanism so the microcode does not have to check more
than one thing.  Implement unbound, unassigned, and dangerous in terms of this.
- Clean up aux variable compilation: variables should not go into pure
space, and then all the kludges about compilation can go away.
- Eliminate the procedure name slot from the variable reference code.
It should still be there for debugging, but not visible.  This also
removes the extra test for assignment.
	Jinx 4/2/87
Variables can always go into pure space now because of the way aux
compilation is done (depth, offset).

* Fix `access' code so that it continues correctly when the variable
is unbound or unassigned.  This is because the value of the access'
environment field is not being pushed on the stack at the time of the
error, so there is no way to continue.  There are probably some other
similar bugs -- this one is likely to be caused by the fact that it
requires a non-standard stack frame, making it slightly painful to
implement.
	Jinx 4/2/87
