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.