Compiler tests

This directory contains rudimentary test programs for developing the
compiler or a compiler back end.  Each one exercises some edge case,
invokes only primitives or procedures that USUAL-INTEGRATIONS assumes
to be defined to be primitives, and is therefore fit to run as a cold
load with `scheme --fasl foo.com'.

Except for empty.scm, datum.scm, declempty.scm, and decldatum.scm,
these all print no output and return an exit status of 0 on success;
the exceptions don't have any code in them and so don't call exit and
so the microcode prints the return value.

The script tests.sf sets up some macros for use by the tests:

- (ucode-primitive <name>) expands to the microcode primitive <name>

- (identity <x>) expands to an expression evaluating to <x> without
  letting the compiler assume anything about <x>.

  Currently, it creates a one-element vector with vector-cons holding x
  and returns the first element with vector-ref; this will have to
  change if we ever teach the compiler about vector-cons.

- (prelude) expands to a definition of define-multiple, as used in code
  generated by the compiler for multiple top-level definitions.

Usage:

1. Compile the tests.
   % scheme --load tests.sf --load tests.cbf

2. Run the tests.
   % for t in *.com; do scheme --fasl $t || echo $t failed; done

3. Read the .rtl and .lap files to make sure they match what the
   comment at the top of each .scm file explains.
