Thursday  August 16,1979  LQ+1D.1H.28M.3S.   LISP 1860 / COMPLR 895   -JONL-

1) DEFMACRO usages no longer cause automatic loading of DEFMAX file.
2) DEFUN& and DEFMACRO admits a "supplied-p" variable for &OPTIONAL variables.
3) DEFAULTF no longer manipulated by LOAD or FASLOAD, and new initial value.
4) ERROR-BREAK-ENVIRONMENT - sets OBARRAY/READTABLE for ^B and error loops.
5) Splicing macros which return a singleton list may now appear at top level.
The following three items apply to compiler usage:
6) New COMPLR switch "~", controlling the variable QUIT-ON-ERROR
7) New UUO "STRT7" for typing out ascii strings.  Works similar to "STRT".
8) Two numerical No-Op subrs FIXNUM-IDENTITY and FLONUM-IDENTITY open-compile

____________________________________________________________________________

1) DEFMACRO usages no longer cause automatic loading of DEFMAX file.
   As of version 80, DEFMACRO will stop outputting, along with each
   macro definition compiled, the form
	    (AND (NOT (GET '|forget-macromemos/|| 'SUBR)) 
		 (LOAD `(,(car (get 'defmacro 'autoload)) DEFMAX FASL)))
   Since LISPs prior to about version 1832 did not have autoload properties
   for the auxillary functions needed by DEFMACRO-defined macros, then
   each such macro explicitly tried to load the DEFMAX file if not already
   loaded.  If you see a message about 
	"|forget-macromemos/|| Undefined Function"
   it is probably because you are using DEFMACRO output in an old LISP
   (and some of the system code does depend upon DEFMACRO, e.g. LET) so
   you should simply load the DEFMAX file by hand.

2) DEFUN& and DEFMACRO admits a "supplied-p" variable for &OPTIONAL variables.
   The format "(binding default-value flag-variable)"  used in a place where a
   &OPTIONAL variable would be used, causes the symbol "flag-variable" to be
   bound to T if that optional argument is actually supplied, and to null
   otherwise.  Example:
	(DEFUN FOO (&OPTIONAL (Z () ZP?)) ... )
   causes "ZP?" to be non-null for those calls to FOO with an argument.

3) DEFAULTF no longer manipulated by LOAD or FASLOAD, and new initial value.
   This has the consequence that only the "oldio" compatibility functions
   change DEFAULTF (namely, UREAD, UWRITE, UFILE, UKILL).  Furthermore, its 
   initial setting will be
	`((DSK ,(status udir)) * >)	;ITS
	`((DSK ,(status udir)) * LSP)	;TOPS-10/CMU
	`((PS  ,(status udir)) * LSP)	;TOPS-20/TENEX
	`((DSK ,(status udir)) * ___)	;SAIL (kludge, meaning no extension)

4) ERROR-BREAK-ENVIRONMENT - sets OBARRAY/READTABLE for ^B and error loops.
   As a special variable, ERROR-BREAK-ENVIRONMENT holds a pair (cons pair)
   of an obarray and readtable to use during the system-supplied ^B break and
   error handlers.   Its initial setting is 
	`(,(get 'OBARRAY 'ARRAY)  .  ,(get 'READTABLE 'ARRAY))
   This may be especially useful to the person who is debugging his macros
   during the compilation of some file, and wants a different debugging
   environment than the compiler's OBARRAY/READTABLE.

5) Splicing macros which return a singleton list may now appear at top level.
   also may appear just after a "dot" for a dotted pair or hunk.
   At top level, if a splicing macro returns a list of one element,
   then READ returns that element just as if it were read primitively;
   the same holds true for splicing macros just after a dotted-pair dot.
   E.g., if "~" is defined as (SETSYNTAX '/~ 'SPLICING '(LAMBDA () (READ)))
   then   (A . ~(B))  reads in the same as  (A . B)

   An error (ILLEGAL RETURN VALUE FROM SPLICING MACRO --READ) is given if
   something other than () or a singleton LIST is returned in this context.
   (Longer lists are of course legal in other circumstances).
   Multiple splicing macro calls can be placed after a dot, but only one
   of them can return non-NIL, or it is an error.

6) New COMPLR switch "~", controlling the variable QUIT-ON-ERROR
   Generally, if an *error* (as opposed to a warning condition)
   is discovered, the COMPLR will go into a BREAK loop, awaiting
   further intervention by the user.  But if the value of the
   variable QUIT-ON-ERROR is non-null, it will merely do a (QUIT);
   The initial value of this variable is ().

7) New COMPLR switch "7", controlling the variable USE-STRT7
   LISP 1858 has a new UUO, "STRT7", for typing out ascii strings, which
   works similarly to "STRT".  The compiler will generally turn PRINC
   of a quoted thing into a STRT (which is for sixbit formats), but
   now "STRT7" can be used, resulting in shorter lengths for lower-case
   strings.   Initially USE-STRT7 is off, since older LISPs don't 
   support STRT7.

8) Two numerical No-Op subrs FIXNUM-IDENTITY and FLONUM-IDENTITY open-compile
   Along with the numerical subrs "+", "+$", etc. are added two identity
   functions:   (FIXNUM-IDENTITY x) requires that x evaluate to something 
   of type FIXNUM, and (FLONUM-IDENTITY x) similarly requires FLONUM; 
   both merely return their argument.   In the past, users have been
   checking the type of certain arguments by code like  "(+ <mumble>)" and
   "(+$ <mumble>)"; these forms will still achieve the desired effect,
   but "FIXNUM-IDENTITY" and "FLONUM-IDENTITY" can be used to distinguish
   this case from accidental 1-argument uses of the fixnum PLUS function.
   These functions are not part of a type-assertion scheme, but merely take
   advantage of the compiler's open-coding schemes.